Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions Libraries/Opc.Ua.Client/Session/Session.cs
Original file line number Diff line number Diff line change
Expand Up @@ -950,8 +950,8 @@ public virtual void Save(
{
using Activity? activity = m_telemetry.StartActivity();
// Snapshot subscription state
var subscriptionStateCollection = new SubscriptionStateCollection(SubscriptionCount);
foreach (Subscription subscription in Subscriptions)
var subscriptionStateCollection = new SubscriptionStateCollection();
foreach (Subscription subscription in subscriptions)
{
subscription.Snapshot(out SubscriptionState state);
subscriptionStateCollection.Add(state);
Expand Down
32 changes: 32 additions & 0 deletions Tests/Opc.Ua.Client.Tests/SessionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,13 @@
* ======================================================================*/

using System;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Moq;
using NUnit.Framework;
using Opc.Ua.Tests;

namespace Opc.Ua.Client.Tests
{
Expand Down Expand Up @@ -1340,5 +1342,35 @@ public void OpenAsyncShouldHandleInvalidServerResponse()

sut.Channel.Verify();
}

[Test]
public void SaveShouldOnlySaveSpecifiedSubscriptions()
{
var sut = SessionMock.Create();
ITelemetryContext telemetry = NUnitTelemetryContext.Create();

var subscription1 = new Subscription(telemetry, new SubscriptionOptions { DisplayName = "Subscription1" });
var subscription2 = new Subscription(telemetry, new SubscriptionOptions { DisplayName = "Subscription2" });
var subscription3 = new Subscription(telemetry, new SubscriptionOptions { DisplayName = "Subscription3" });

sut.AddSubscription(subscription1);
sut.AddSubscription(subscription2);
sut.AddSubscription(subscription3);

Assert.That(sut.SubscriptionCount, Is.EqualTo(3));

// Only save a subset of subscriptions (subscription1 and subscription3)
Subscription[] subscriptionsToSave = [subscription1, subscription3];

using var stream = new MemoryStream();
sut.Save(stream, subscriptionsToSave);
stream.Position = 0;

var loadSession = SessionMock.Create();
var loadedSubscriptions = loadSession.Load(stream).ToList();

Assert.That(loadedSubscriptions.Count, Is.EqualTo(2), "Only the specified subscriptions should be saved");
Assert.That(loadedSubscriptions.Select(s => s.DisplayName), Is.EquivalentTo(["Subscription1", "Subscription3"]));
}
}
}
Loading