From 9cd45367e9c6077eb703e52bd68798b9f12cfb7f Mon Sep 17 00:00:00 2001 From: Lauri Saurus Date: Wed, 1 May 2024 08:16:58 +0300 Subject: [PATCH] Make NodeStateCollectionConcurrencyTests more robust (#2594) --- .../NodeStateCollectionConcurrencyTests.cs | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateCollectionConcurrencyTests.cs b/Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateCollectionConcurrencyTests.cs index 6432ea36c3..0a0d4d17dd 100644 --- a/Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateCollectionConcurrencyTests.cs +++ b/Tests/Opc.Ua.Core.Tests/Stack/State/NodeStateCollectionConcurrencyTests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using NUnit.Framework; using Assert = NUnit.Framework.Legacy.ClassicAssert; @@ -17,7 +18,8 @@ namespace Opc.Ua.Core.Tests.Stack.State public class NodeStateCollectionConcurrencyTests { [Test] - public void NodeStateReferencesCollectionConcurrencyTest() + [CancelAfter(10000)] + public void NodeStateReferencesCollectionConcurrencyTest(CancellationToken cancellationToken) { var testNodeState = new AnalogUnitRangeState(null); var serviceMessageContext = new ServiceMessageContext(); @@ -56,13 +58,13 @@ namespace Opc.Ua.Core.Tests.Stack.State }); - while (referenceTargets.TryTake(out ExpandedNodeId target, TimeSpan.FromSeconds(1))) + foreach (var target in referenceTargets.GetConsumingEnumerable(cancellationToken)) { var removeReferenceSuccess = testNodeState.RemoveReference(ReferenceTypeIds.HasComponent, false, target); Assert.IsTrue(removeReferenceSuccess); } - task.Wait(); + task.Wait(cancellationToken); references.Clear(); testNodeState.GetReferences(systemContext, references); @@ -72,7 +74,8 @@ namespace Opc.Ua.Core.Tests.Stack.State } [Test] - public void NodeStateNotifiersCollectionConcurrencyTest() + [CancelAfter(10000)] + public void NodeStateNotifiersCollectionConcurrencyTest(CancellationToken cancellationToken) { var serviceMessageContext = new ServiceMessageContext(); var systemContext = new SystemContext() { NamespaceUris = serviceMessageContext.NamespaceUris }; @@ -120,12 +123,12 @@ namespace Opc.Ua.Core.Tests.Stack.State }); - while (notifierTargets.TryTake(out NodeState target, TimeSpan.FromSeconds(1))) + foreach(var target in notifierTargets.GetConsumingEnumerable(cancellationToken)) { testNodeState.RemoveNotifier(systemContext, target, false); } - task.Wait(); + task.Wait(cancellationToken); notifiers.Clear(); testNodeState.GetNotifiers(systemContext, notifiers); @@ -135,7 +138,8 @@ namespace Opc.Ua.Core.Tests.Stack.State } [Test] - public void NodeStateChildrenCollectionConcurrencyTest() + [CancelAfter(10000)] + public void NodeStateChildrenCollectionConcurrencyTest(CancellationToken cancellationToken) { var serviceMessageContext = new ServiceMessageContext(); var systemContext = new SystemContext() { NamespaceUris = serviceMessageContext.NamespaceUris }; @@ -183,12 +187,12 @@ namespace Opc.Ua.Core.Tests.Stack.State }); - while (childrenCollection.TryTake(out BaseInstanceState child, TimeSpan.FromSeconds(1))) + foreach (var child in childrenCollection.GetConsumingEnumerable(cancellationToken)) { testNodeState.RemoveChild(child); } - task.Wait(); + task.Wait(cancellationToken); children.Clear(); testNodeState.GetChildren(systemContext, children);