using Xunit; using OpenHarbor.MCP.Gateway.Infrastructure.Transport; using OpenHarbor.MCP.Gateway.Core.Models; namespace OpenHarbor.MCP.Gateway.Infrastructure.Tests.Transport; /// /// Unit tests for StdioServerTransport following TDD approach. /// Tests stdio transport implementation. /// public class StdioServerTransportTests { [Fact] public void Constructor_WithValidCommand_CreatesSuccessfully() { // Arrange & Act var transport = new StdioServerTransport("dotnet", new[] { "run" }); // Assert Assert.NotNull(transport); Assert.False(transport.IsConnected); } [Fact] public void Constructor_WithNullCommand_ThrowsException() { // Arrange, Act & Assert Assert.Throws(() => new StdioServerTransport(null!, new[] { "arg" })); } [Fact] public void IsConnected_BeforeConnect_ReturnsFalse() { // Arrange var transport = new StdioServerTransport("echo", new[] { "test" }); // Act & Assert Assert.False(transport.IsConnected); } [Fact] public async Task SendRequestAsync_WithoutConnect_ThrowsException() { // Arrange var transport = new StdioServerTransport("echo", new[] { "test" }); var request = new GatewayRequest { ToolName = "test" }; // Act & Assert await Assert.ThrowsAsync(() => transport.SendRequestAsync(request, CancellationToken.None)); } [Fact] public void Dispose_MultipleTimesests_DoesNotThrow() { // Arrange var transport = new StdioServerTransport("echo", new[] { "test" }); // Act & Assert transport.Dispose(); transport.Dispose(); // Should not throw } }