Skip to content
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
63810fc
Record full partitioned CTT run of the merged CTT PRs
romanett Sep 15, 2026
5e24c41
Explain the CTT CloseSession delay and the Security None 007.js failure
romanett Sep 15, 2026
0f06604
Raise ChannelLifetime of the CTT reference server configuration to 120 s
romanett Sep 15, 2026
fdb16ba
Keep idle SecureChannels open while their security token is valid
romanett Sep 15, 2026
926881d
Confirm C36 with a dump of the CTT endpoint cache
romanett Sep 15, 2026
4a0c0fb
Keep the inactivity timeout for SecureChannels that carry a Session
romanett Sep 17, 2026
e026c5a
Consider the previous security token in the inactivity cleanup
romanett Sep 17, 2026
90a7ee5
Record the full CTT run of 2026-09-22 and the DeltaBounds difference
romanett Sep 22, 2026
22d07a3
Record the Mantis issues filed for the CTT defects
romanett Sep 24, 2026
fcc8f9f
Revert the inactivity cleanup change for idle SecureChannels
romanett Sep 24, 2026
979999c
Raise ChannelLifetime of the CTT reference server configuration to 120 s
romanett Sep 24, 2026
0baf8a2
Merge branch 'master' into romanett/ctt-test-run-regression-7b954e
romanett Sep 24, 2026
983abab
Reduce ctt-issues.md to the failing tests and their Mantis issues
romanett Sep 24, 2026
7c2ed6a
Rewrite ctt-testing.md as a runbook for running the CTT
romanett Sep 24, 2026
2289e2f
Make the AddNodes duplicate BrowseName test run instead of going inco…
romanett Sep 24, 2026
635c799
Raise the CTT subscription limit to 200 subscriptions
romanett Sep 24, 2026
12552b3
Lower the CTT Alarm Cycle Time to 30 s
romanett Sep 24, 2026
b4faa2f
Offer a de-DE ApplicationName in the reference server
romanett Sep 24, 2026
e98f3e6
Test the RequestHandle echo for an oversized chunked Call argument
romanett Sep 24, 2026
fb2e486
Exclude Uncertain values from NumberOfTransitions when TreatUncertain…
romanett Sep 24, 2026
ea98325
Use the variable's interpolation for the DurationInState status regions
romanett Sep 24, 2026
b69df14
Return BadNoData from AnnotationCount for intervals without data
romanett Sep 24, 2026
c75e530
Cover TreatUncertainAsBad in the value-based aggregate status
romanett Sep 24, 2026
1d88303
Dequeue the oldest Publish request when the queue is full
romanett Sep 24, 2026
e0abe7c
Accept more queued Publish requests than the session has subscriptions
romanett Sep 24, 2026
5301779
Resolve the open items of ctt-issues.md
romanett Sep 24, 2026
157293b
Record the Mantis issues filed for C51-C53, U2 and U4
romanett Sep 25, 2026
147a46b
Merge remote-tracking branch 'origin/master' into romanett/ctt-open-f…
romanett Sep 25, 2026
9e07b37
Restore the blank line before the configuration notes heading
romanett Sep 25, 2026
299954d
Split the chunked request body without array ranges
romanett Sep 25, 2026
24b5c2c
Bound the AnnotationCount data extent reads and apply them to the key…
romanett Sep 25, 2026
8703c24
Check the fixture server's ApplicationName in the discovery locale test
romanett Sep 25, 2026
d93bbe9
Count annotations outside the window as AnnotationCount data
romanett Sep 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 47 additions & 85 deletions plans/ctt-issues.md

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion plans/ctt-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,8 @@ each CU on its own takes well over an hour.
manual single-case CUs cost nothing.
2. **One CTT process, fresh server.** The CTT keeps one alarm thread for the whole group, so the initial event
capture (one Alarm Cycle Time) is paid once, by the first A & C CU.
3. **Project copy with `/Server Test/Alarms and Conditions/Alarm Cycle Time` = 30** (default 60). The setting
3. **`/Server Test/Alarms and Conditions/Alarm Cycle Time` = 30** (CTT default 60; `samples/UAReferenceServer.ctt.xml`
sets 30). The setting
is the length of the initial capture, one third of the maximum time of every collector test case, and ten
times the Enable `Test_003.js` refresh delay. The reference server's alarm sources run a 40 s sawtooth and
every alarm type reports an event at most 11 s apart, so 30 s still captures every type, and the longest
Expand Down
19 changes: 19 additions & 0 deletions samples/Quickstarts.Servers/ReferenceServer/ReferenceServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,15 @@ protected override ResourceManager CreateResourceManager(
}
}

// Offer the application name in the advertised locales, so FindServers and
// GetEndpoints return a de-DE ApplicationName when the client asks for German.
string applicationName = configuration.ApplicationName ?? string.Empty;
resourceManager.Add(ApplicationNameKey, "en-US", applicationName);
resourceManager.Add(
ApplicationNameKey,
"de-DE",
applicationName.Replace("Reference Server", "Referenzserver", StringComparison.Ordinal));

return resourceManager;
}

Expand Down Expand Up @@ -488,6 +497,15 @@ protected override void OnServerStarted(IServerInternal server)

RegisterIdentityAuthenticators(server);

// Key the ApplicationName of the endpoints, so the resource manager translates it.
if (ServerDescription != null)
{
ServerDescription.ApplicationName = new LocalizedText(
ApplicationNameKey,
"en-US",
ServerDescription.ApplicationName.Text ?? string.Empty);
}

try
{
ServerInternal.UpdateServerStatus(
Expand Down Expand Up @@ -866,6 +884,7 @@ protected override void Dispose(bool disposing)
base.Dispose(disposing);
}

private const string ApplicationNameKey = "ApplicationName";
private CertificateManager? m_userCertificateValidator;
private string? m_rejectedUserStorePath;
private readonly ITelemetryContext m_telemetry;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@
<NodeManagerSaveFile>Ctt.ReferenceServer.nodes.xml</NodeManagerSaveFile>
<MinSubscriptionLifetime>10000</MinSubscriptionLifetime>
<MaxPublishRequestCount>20</MaxPublishRequestCount>
<MaxSubscriptionCount>100</MaxSubscriptionCount>
<MaxSubscriptionCount>200</MaxSubscriptionCount>
<MaxEventQueueSize>10000</MaxEventQueueSize>
<!-- see https://opcfoundation-onlineapplications.org/profilereporting/ for list of available profiles -->
<ServerProfileArray>
Expand Down
4 changes: 2 additions & 2 deletions samples/UAReferenceServer.ctt.xml
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@
</Column>
<Column column="1">
<ItemData role="0" rolename="DisplayRole">
<Value type="10" typename="QString" data="100"/>
<Value type="10" typename="QString" data="200"/>
</ItemData>
<ChildRows size="0"/>
</Column>
Expand Down Expand Up @@ -16578,7 +16578,7 @@
</Column>
<Column column="1">
<ItemData role="0" rolename="DisplayRole">
<Value type="10" typename="QString" data="60"/>
<Value type="10" typename="QString" data="30"/>
</ItemData>
<ChildRows size="0"/>
</Column>
Expand Down
15 changes: 0 additions & 15 deletions src/Opc.Ua.Server/Aggregates/AggregateCalculator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -680,11 +680,6 @@ protected class TimeSlice
/// </summary>
public LinkedListNode<DataValue> EarlyBound { get; set; } = null!;

/// <summary>
/// The latest non-Bad value before the slice.
/// </summary>
public LinkedListNode<DataValue> NonBadEarlyBound { get; set; } = null!;

/// <summary>
/// The second early bound for the slice (always earlier than the first).
/// </summary>
Expand Down Expand Up @@ -802,11 +797,6 @@ protected bool UpdateSlice(TimeSlice slice)
// check if before the beginning of the slice.
if (CompareTimestamps(slice.StartTime, ii) >= 0)
{
if (StatusCode.IsNotBad(ii.Value.StatusCode))
{
slice.NonBadEarlyBound = ii;
}

if (IsGood(ii.Value))
{
slice.SecondEarlyBound = slice.EarlyBound;
Expand Down Expand Up @@ -843,11 +833,6 @@ protected bool UpdateSlice(TimeSlice slice)
// check if before the beginning of the slice.
if (CompareTimestamps(slice.StartTime, ii) > 0)
{
if (StatusCode.IsNotBad(ii.Value.StatusCode))
{
slice.NonBadEarlyBound = ii;
}

if (IsGood(ii.Value))
{
slice.SecondEarlyBound = slice.EarlyBound;
Expand Down
103 changes: 97 additions & 6 deletions src/Opc.Ua.Server/Aggregates/CountAggregateCalculator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,61 @@ public static ArrayOf<DataValue> CalculateAnnotationCounts(
double processingInterval,
int outputCap,
CancellationToken cancellationToken)
{
return CalculateAnnotationCounts(
annotationTimestamps,
startTime,
endTime,
processingInterval,
DateTimeUtc.MinValue,
DateTimeUtc.MaxValue,
outputCap,
cancellationToken);
Comment thread
romanett marked this conversation as resolved.
Resolved
}

/// <summary>
/// Calculates AnnotationCount values for the requested time domain of a
/// history collection whose data spans the specified range.
/// </summary>
/// <remarks>
/// Part 13 §5.4.3.20: an interval entirely before the start of data or
/// after the end of data is <c>Bad_NoData</c>, and an interval that
/// overlaps the start or the end of data has the Partial bit set
/// (§5.3.3.2). Pass a <paramref name="startOfData"/> later than
/// <paramref name="endOfData"/> when the collection has no data.
/// </remarks>
/// <param name="annotationTimestamps">
/// Annotation timestamps in any order.
/// </param>
/// <param name="startTime">The start of the requested domain.</param>
/// <param name="endTime">The end of the requested domain.</param>
/// <param name="processingInterval">
/// The interval in milliseconds. Zero requests one result over the
/// complete domain.
/// </param>
/// <param name="startOfData">The timestamp of the first data point.</param>
/// <param name="endOfData">The timestamp of the last data point.</param>
/// <param name="outputCap">Maximum number of returned values.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>The calculated AnnotationCount values.</returns>
/// <exception cref="ArgumentNullException">
/// <paramref name="annotationTimestamps"/> is null.
/// </exception>
/// <exception cref="ArgumentOutOfRangeException">
/// <paramref name="outputCap"/> is not positive.
/// </exception>
/// <exception cref="ServiceResultException">
/// The interval is invalid or the output cap is exceeded.
/// </exception>
public static ArrayOf<DataValue> CalculateAnnotationCounts(
ArrayOf<DateTimeUtc> annotationTimestamps,
DateTimeUtc startTime,
DateTimeUtc endTime,
double processingInterval,
DateTimeUtc startOfData,
DateTimeUtc endOfData,
int outputCap,
CancellationToken cancellationToken)
{
if (annotationTimestamps.IsNull)
{
Expand Down Expand Up @@ -181,7 +236,33 @@ public static ArrayOf<DataValue> CalculateAnnotationCounts(
cursor,
next,
cancellationToken);
values.Add(CreateAnnotationCountValue(count, cursor));

// chronological bounds; forward intervals exclude the late
// time and reverse intervals exclude the early time.
DateTimeUtc early = forward ? cursor : next;
DateTimeUtc late = forward ? next : cursor;
bool beforeStartOfData = forward
? late <= startOfData
: late < startOfData;
bool afterEndOfData = forward
? early > endOfData
: early >= endOfData;
if (beforeStartOfData || afterEndOfData)
{
values.Add(new DataValue(
Variant.Null,
StatusCodes.BadNoData,
cursor,
cursor));
}
else
{
// same edge rules as AggregateCalculator.TryGetProcessedValue.
bool partial =
(startOfData > early && startOfData < late) ||
(endOfData >= early && endOfData < late);
values.Add(CreateAnnotationCountValue(count, cursor, partial));
}
cursor = next;
}
return values.ToArrayOf();
Expand Down Expand Up @@ -340,7 +421,12 @@ protected DataValue ComputeDurationInState(TimeSlice slice, bool isNonZero)
StatusCodes.Good,
GetTimestamp(slice),
GetTimestamp(slice));
value = value.WithStatus(GetTimeBasedStatusCode(regions, value.StatusCode));

// The duration uses stepped regions because a state lasts until the next value, but
// the status regions follow the interpolation of the variable: with sloped
// interpolation a region ending in a Bad or Uncertain value (including the simple
// end bound) is Uncertain (Part 13 §5.4.3.2.2).
value = value.WithStatus(GetTimeBasedStatusCode(slice, values, value.StatusCode));
value = value.WithStatus(value.StatusCode.WithAggregateBits(AggregateBits.Calculated));

// return result.
Expand All @@ -362,7 +448,9 @@ protected DataValue ComputeNumberOfTransitions(TimeSlice slice)
}

// The first non-Bad value is a transition when no previous non-Bad value exists.
LinkedListNode<DataValue>? previousValue = slice.NonBadEarlyBound;
// Part 13 §4.2.1.2: with TreatUncertainAsBad an Uncertain value is equivalent to Bad,
// so it is neither counted nor used as the previous value (IsGood applies the setting).
LinkedListNode<DataValue>? previousValue = slice.EarlyBound;
bool hasLastValue = previousValue != null;
Variant lastValue = previousValue != null
? previousValue.Value.WrappedValue
Expand All @@ -373,7 +461,7 @@ protected DataValue ComputeNumberOfTransitions(TimeSlice slice)

for (int ii = 0; ii < values.Count; ii++)
{
if (StatusCode.IsBad(values[ii].StatusCode))
if (!IsGood(values[ii]))
{
continue;
}
Expand Down Expand Up @@ -502,15 +590,18 @@ private static int CountReverseAnnotations(

private static DataValue CreateAnnotationCountValue(
int count,
DateTimeUtc timestamp)
DateTimeUtc timestamp,
bool partial)
{
var value = new DataValue(
Variant.From(count),
StatusCodes.Good,
timestamp,
timestamp);
return value.WithStatus(value.StatusCode.WithAggregateBits(
AggregateBits.Calculated));
partial
? AggregateBits.Calculated | AggregateBits.Partial
: AggregateBits.Calculated));
}
}
}
51 changes: 51 additions & 0 deletions src/Opc.Ua.Server/Historian/HistorianDispatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1118,6 +1118,55 @@ private static async ValueTask<ServiceResult> ComputeAnnotationCountAsync(
}
token = page.NextToken;
}

// Part 13 §5.4.3.20: intervals before the start or after the end of data are
// Bad_NoData and intervals overlapping either edge are Partial. The data is the
// raw history (read with bounds, as for the other aggregates) and the annotations.
DateTimeUtc startOfData = DateTimeUtc.MaxValue;
DateTimeUtc endOfData = DateTimeUtc.MinValue;
foreach (DateTimeUtc annotationTime in annotationTimes)
{
startOfData = annotationTime < startOfData ? annotationTime : startOfData;
endOfData = annotationTime > endOfData ? annotationTime : endOfData;
}
if (provider is IHistorianDataProvider raw)
{
var rawRequest = new HistorianRawReadRequest
{
NodeId = node.NodeId,
StartTime = windowStart,
EndTime = windowEnd,
MaxValues = 0,
IsForward = true,
ReturnBounds = true
Comment thread
romanett marked this conversation as resolved.
Resolved
};
HistorianResumeToken rawToken = default;
while (true)
{
HistorianPage<HistoricalDataValue> rawPage = await raw.ReadRawAsync(
opContext, rawRequest, rawToken, cancellationToken).ConfigureAwait(false);
foreach (HistoricalDataValue sample in rawPage.Values)
{
// skip bound placeholders as AggregateCalculator.QueueRawValue does.
StatusCode status = sample.Value.StatusCode;
if (sample.Value.IsNull ||
status == StatusCodes.BadNoData ||
status == StatusCodes.BadBoundNotFound)
{
continue;
}
DateTimeUtc sampleTime = sample.Value.SourceTimestamp;
startOfData = sampleTime < startOfData ? sampleTime : startOfData;
endOfData = sampleTime > endOfData ? sampleTime : endOfData;
}
if (rawPage.IsFinal)
{
break;
}
rawToken = rawPage.NextToken;
}
}

ArrayOf<DataValue> outputs;
try
{
Expand All @@ -1126,6 +1175,8 @@ private static async ValueTask<ServiceResult> ComputeAnnotationCountAsync(
startTime,
endTime,
details.ProcessingInterval,
startOfData,
endOfData,
kMaxProcessedBufferedOutputs,
cancellationToken);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1064,6 +1064,69 @@
Is.GreaterThan(DateTime.UtcNow.AddMinutes(-1)));
}

/// <summary>
/// The shape of CTT GDS Application Directory 005.js: a Call request whose
/// String input argument is MaxStringLength + 10 %, sent in two chunks.
/// The Bad_EncodingLimitsExceeded ServiceFault (OPC 10000-4 §5.3) echoes
/// the RequestHandle (OPC 10000-4 §7.34), read from the first chunk.
/// </summary>
[Test]
public async Task OversizedCallArgumentInChunkedRequestFaultEchoesRequestHandleAsync()
{
const int maxStringLength = 1000;
var pool = new TrackingArrayPool();
using TestServerChannel channel = CreateOpenChannel(pool, maxStringLength: maxStringLength);
var transport = new GateByteTransport(expectedSendCount: 1, captureSentChunks: true);
channel.SetTransport(transport);

var request = new CallRequest
{
RequestHeader = new RequestHeader
{
AuthenticationToken = new NodeId(Guid.NewGuid()),
Timestamp = DateTime.UtcNow,
RequestHandle = 18
},
MethodsToCall =
[
new CallMethodRequest
{
ObjectId = new NodeId(141u, 2),
MethodId = new NodeId(143u, 2),
InputArguments = [new Variant(new string('u', maxStringLength + (maxStringLength / 10)))]
}
]
};
var encodeContext = ServiceMessageContext.Create(NUnitTelemetryContext.Create());
encodeContext.MaxStringLength = 0;
byte[] body = BinaryEncoder.EncodeMessage(request, encodeContext);
int split = body.Length / 2;

await channel.FeedReceivedChunkAsync(
channel.CreateRequestChunkForTest(
TcpMessageType.Message,
isFinal: false,
sequenceNumber: 1,
requestId: 7,
body: body[..split]))

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (5/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (5/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (4/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (4/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (9/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (9/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (9/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (9/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (23/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (23/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (23/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (23/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net48 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net48 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net472 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net472 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (8/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (8/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA netstandard2.0 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA netstandard2.0 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net48 Debug (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1111 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net48 Debug (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'
.ConfigureAwait(false);
await channel.FeedReceivedChunkAsync(
channel.CreateRequestChunkForTest(
TcpMessageType.Message,
isFinal: true,
sequenceNumber: 2,
requestId: 7,
body: body[split..]))

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (5/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (5/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (4/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (4/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (9/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (9/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (9/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (9/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (23/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (23/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (23/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (23/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net48 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net48 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net472 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net472 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (8/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / test-windows-net48 (8/30)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA netstandard2.0 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA netstandard2.0 Release (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net48 Debug (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'

Check failure on line 1119 in tests/Opc.Ua.Core.Tests/Stack/Transport/TcpServerChannelBufferTests.cs

View workflow job for this annotation

GitHub Actions / build-UA net48 Debug (windows)

Missing compiler required member 'System.Runtime.CompilerServices.RuntimeHelpers.GetSubArray'
.ConfigureAwait(false);

ServiceFault fault = await ReadSentServiceFaultAsync(transport, expectedRequestId: 7)
.ConfigureAwait(false);
Assert.That(
fault.ResponseHeader.ServiceResult,
Is.EqualTo((StatusCode)StatusCodes.BadEncodingLimitsExceeded));
Assert.That(fault.ResponseHeader.RequestHandle, Is.EqualTo(18u));
}

/// <summary>
/// A discovery-only channel rejects a non-discovery request from its
/// encoding id before decoding it; the ServiceFault still echoes the
Expand Down
Loading
Loading