Add unit tests for Router configuration and transport layers
- Implemented tests for RouterConfig, RoutingOptions, StaticInstanceConfig, and RouterConfigOptions to ensure default values are set correctly. - Added tests for RouterConfigProvider to validate configurations and ensure defaults are returned when no file is specified. - Created tests for ConfigValidationResult to check success and error scenarios. - Developed tests for ServiceCollectionExtensions to verify service registration for RouterConfig. - Introduced UdpTransportTests to validate serialization, connection, request-response, and error handling in UDP transport. - Added scripts for signing authority gaps and hashing DevPortal SDK snippets.
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Moq;
|
||||
using StellaOps.Microservice;
|
||||
using StellaOps.Router.Common.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.Microservice.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for EndpointDiscoveryService - verifies integration of discovery + YAML loading + merging.
|
||||
/// </summary>
|
||||
public class EndpointDiscoveryServiceTests
|
||||
{
|
||||
private readonly Mock<IEndpointDiscoveryProvider> _discoveryProviderMock;
|
||||
private readonly Mock<IMicroserviceYamlLoader> _yamlLoaderMock;
|
||||
private readonly Mock<IEndpointOverrideMerger> _mergerMock;
|
||||
private readonly ILogger<EndpointDiscoveryService> _logger;
|
||||
private readonly EndpointDiscoveryService _service;
|
||||
|
||||
public EndpointDiscoveryServiceTests()
|
||||
{
|
||||
_discoveryProviderMock = new Mock<IEndpointDiscoveryProvider>();
|
||||
_yamlLoaderMock = new Mock<IMicroserviceYamlLoader>();
|
||||
_mergerMock = new Mock<IEndpointOverrideMerger>();
|
||||
_logger = NullLogger<EndpointDiscoveryService>.Instance;
|
||||
|
||||
_service = new EndpointDiscoveryService(
|
||||
_discoveryProviderMock.Object,
|
||||
_yamlLoaderMock.Object,
|
||||
_mergerMock.Object,
|
||||
_logger);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiscoverEndpoints_CallsDiscoveryProvider()
|
||||
{
|
||||
var codeEndpoints = new List<EndpointDescriptor>();
|
||||
_discoveryProviderMock
|
||||
.Setup(x => x.DiscoverEndpoints())
|
||||
.Returns(codeEndpoints);
|
||||
_mergerMock
|
||||
.Setup(x => x.Merge(It.IsAny<IReadOnlyList<EndpointDescriptor>>(), It.IsAny<MicroserviceYamlConfig?>()))
|
||||
.Returns(codeEndpoints);
|
||||
|
||||
_service.DiscoverEndpoints();
|
||||
|
||||
_discoveryProviderMock.Verify(x => x.DiscoverEndpoints(), Times.Once);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiscoverEndpoints_CallsYamlLoader()
|
||||
{
|
||||
var codeEndpoints = new List<EndpointDescriptor>();
|
||||
_discoveryProviderMock
|
||||
.Setup(x => x.DiscoverEndpoints())
|
||||
.Returns(codeEndpoints);
|
||||
_mergerMock
|
||||
.Setup(x => x.Merge(It.IsAny<IReadOnlyList<EndpointDescriptor>>(), It.IsAny<MicroserviceYamlConfig?>()))
|
||||
.Returns(codeEndpoints);
|
||||
|
||||
_service.DiscoverEndpoints();
|
||||
|
||||
_yamlLoaderMock.Verify(x => x.Load(), Times.Once);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiscoverEndpoints_PassesCodeEndpointsAndYamlConfigToMerger()
|
||||
{
|
||||
var codeEndpoints = new List<EndpointDescriptor>
|
||||
{
|
||||
CreateEndpoint("GET", "/api/test")
|
||||
};
|
||||
var yamlConfig = new MicroserviceYamlConfig
|
||||
{
|
||||
Endpoints =
|
||||
[
|
||||
new EndpointOverrideConfig { Method = "GET", Path = "/api/test" }
|
||||
]
|
||||
};
|
||||
|
||||
_discoveryProviderMock
|
||||
.Setup(x => x.DiscoverEndpoints())
|
||||
.Returns(codeEndpoints);
|
||||
_yamlLoaderMock
|
||||
.Setup(x => x.Load())
|
||||
.Returns(yamlConfig);
|
||||
_mergerMock
|
||||
.Setup(x => x.Merge(codeEndpoints, yamlConfig))
|
||||
.Returns(codeEndpoints);
|
||||
|
||||
_service.DiscoverEndpoints();
|
||||
|
||||
_mergerMock.Verify(x => x.Merge(codeEndpoints, yamlConfig), Times.Once);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiscoverEndpoints_ReturnsMergedEndpoints()
|
||||
{
|
||||
var codeEndpoints = new List<EndpointDescriptor>
|
||||
{
|
||||
CreateEndpoint("GET", "/api/test", TimeSpan.FromSeconds(10))
|
||||
};
|
||||
var mergedEndpoints = new List<EndpointDescriptor>
|
||||
{
|
||||
CreateEndpoint("GET", "/api/test", TimeSpan.FromMinutes(5))
|
||||
};
|
||||
|
||||
_discoveryProviderMock
|
||||
.Setup(x => x.DiscoverEndpoints())
|
||||
.Returns(codeEndpoints);
|
||||
_mergerMock
|
||||
.Setup(x => x.Merge(It.IsAny<IReadOnlyList<EndpointDescriptor>>(), It.IsAny<MicroserviceYamlConfig?>()))
|
||||
.Returns(mergedEndpoints);
|
||||
|
||||
var result = _service.DiscoverEndpoints();
|
||||
|
||||
result.Should().BeSameAs(mergedEndpoints);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiscoverEndpoints_ContinuesWithNullYamlConfig_WhenLoaderReturnsNull()
|
||||
{
|
||||
var codeEndpoints = new List<EndpointDescriptor>
|
||||
{
|
||||
CreateEndpoint("GET", "/api/test")
|
||||
};
|
||||
|
||||
_discoveryProviderMock
|
||||
.Setup(x => x.DiscoverEndpoints())
|
||||
.Returns(codeEndpoints);
|
||||
_yamlLoaderMock
|
||||
.Setup(x => x.Load())
|
||||
.Returns((MicroserviceYamlConfig?)null);
|
||||
_mergerMock
|
||||
.Setup(x => x.Merge(codeEndpoints, null))
|
||||
.Returns(codeEndpoints);
|
||||
|
||||
var result = _service.DiscoverEndpoints();
|
||||
|
||||
_mergerMock.Verify(x => x.Merge(codeEndpoints, null), Times.Once);
|
||||
result.Should().BeSameAs(codeEndpoints);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiscoverEndpoints_ContinuesWithNullYamlConfig_WhenLoaderThrows()
|
||||
{
|
||||
var codeEndpoints = new List<EndpointDescriptor>
|
||||
{
|
||||
CreateEndpoint("GET", "/api/test")
|
||||
};
|
||||
|
||||
_discoveryProviderMock
|
||||
.Setup(x => x.DiscoverEndpoints())
|
||||
.Returns(codeEndpoints);
|
||||
_yamlLoaderMock
|
||||
.Setup(x => x.Load())
|
||||
.Throws(new Exception("YAML parsing failed"));
|
||||
_mergerMock
|
||||
.Setup(x => x.Merge(codeEndpoints, null))
|
||||
.Returns(codeEndpoints);
|
||||
|
||||
var result = _service.DiscoverEndpoints();
|
||||
|
||||
// Should not throw, should continue with null config
|
||||
_mergerMock.Verify(x => x.Merge(codeEndpoints, null), Times.Once);
|
||||
result.Should().BeSameAs(codeEndpoints);
|
||||
}
|
||||
|
||||
private static EndpointDescriptor CreateEndpoint(
|
||||
string method,
|
||||
string path,
|
||||
TimeSpan? timeout = null)
|
||||
{
|
||||
return new EndpointDescriptor
|
||||
{
|
||||
ServiceName = "test-service",
|
||||
Version = "1.0.0",
|
||||
Method = method,
|
||||
Path = path,
|
||||
DefaultTimeout = timeout ?? TimeSpan.FromSeconds(30)
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user