using StellaOps.Router.Common.Enums; using StellaOps.Router.Common.Models; using StellaOps.Router.Transport.InMemory; using Xunit; namespace StellaOps.Router.Transport.InMemory.Tests; public class InMemoryChannelTests { [Fact] public async Task ToMicroservice_WritesAndReads() { // Arrange using var channel = new InMemoryChannel("test-1"); var frame = new Frame { Type = FrameType.Request, CorrelationId = "corr-1", Payload = ReadOnlyMemory.Empty }; // Act await channel.ToMicroservice.Writer.WriteAsync(frame); var readFrame = await channel.ToMicroservice.Reader.ReadAsync(); // Assert Assert.Equal(FrameType.Request, readFrame.Type); Assert.Equal("corr-1", readFrame.CorrelationId); } [Fact] public async Task ToGateway_WritesAndReads() { // Arrange using var channel = new InMemoryChannel("test-1"); var frame = new Frame { Type = FrameType.Response, CorrelationId = "corr-1", Payload = ReadOnlyMemory.Empty }; // Act await channel.ToGateway.Writer.WriteAsync(frame); var readFrame = await channel.ToGateway.Reader.ReadAsync(); // Assert Assert.Equal(FrameType.Response, readFrame.Type); Assert.Equal("corr-1", readFrame.CorrelationId); } [Fact] public void Dispose_CancelsLifetimeToken() { // Arrange var channel = new InMemoryChannel("test-1"); // Act channel.Dispose(); // Assert Assert.True(channel.LifetimeToken.IsCancellationRequested); } [Fact] public void Dispose_CompletesChannels() { // Arrange var channel = new InMemoryChannel("test-1"); // Act channel.Dispose(); // Assert Assert.True(channel.ToMicroservice.Reader.Completion.IsCompleted); Assert.True(channel.ToGateway.Reader.Completion.IsCompleted); } [Fact] public void BoundedChannel_RespectsBufferSize() { // Arrange & Act using var channel = new InMemoryChannel("test-1", bufferSize: 5); // Assert - no exception means it was created successfully Assert.NotNull(channel); } [Fact] public void Instance_CanBeSetAndRetrieved() { // Arrange using var channel = new InMemoryChannel("test-1"); var instance = new InstanceDescriptor { InstanceId = "inst-1", ServiceName = "test-service", Version = "1.0.0", Region = "eu1" }; // Act channel.Instance = instance; // Assert Assert.Same(instance, channel.Instance); } }