ServiceSubnetsCommandTests.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using NSubstitute;
  2. using RackPeek.Domain.Resources.Services;
  3. using RackPeek.Domain.Resources.Services.UseCases;
  4. namespace Tests.HardwareResources.Services;
  5. public class ServiceSubnetsUseCaseTests
  6. {
  7. [Fact]
  8. public async Task Filter_mode_returns_services_in_cidr_sorted_by_ip()
  9. {
  10. var repo = Substitute.For<IServiceRepository>();
  11. repo.GetAllAsync().Returns(new List<Service>
  12. {
  13. new()
  14. {
  15. Name = "svc1",
  16. Network = new Network { Ip = "192.168.10.10" },
  17. RunsOn = "hostA"
  18. },
  19. new()
  20. {
  21. Name = "svc2",
  22. Network = new Network { Ip = "192.168.10.20" },
  23. RunsOn = "hostB"
  24. },
  25. new()
  26. {
  27. Name = "svc3",
  28. Network = new Network { Ip = "10.0.0.5" },
  29. RunsOn = "hostC"
  30. }
  31. });
  32. var sut = new ServiceSubnetsUseCase(repo);
  33. var result = await sut.ExecuteAsync("192.168.10.0/24", null, CancellationToken.None);
  34. Assert.False(result.IsInvalidCidr);
  35. Assert.Equal("192.168.10.0/24", result.FilteredCidr);
  36. Assert.Equal(2, result.Services.Count);
  37. // Sorted by IP
  38. Assert.Equal("svc1", result.Services[0].Name);
  39. Assert.Equal("svc2", result.Services[1].Name);
  40. Assert.Equal("192.168.10.10", result.Services[0].Ip);
  41. Assert.Equal("192.168.10.20", result.Services[1].Ip);
  42. }
  43. [Fact]
  44. public async Task Invalid_cidr_returns_error_result()
  45. {
  46. var repo = Substitute.For<IServiceRepository>();
  47. repo.GetAllAsync().Returns(new List<Service>());
  48. var sut = new ServiceSubnetsUseCase(repo);
  49. var result = await sut.ExecuteAsync("not-a-cidr", null, CancellationToken.None);
  50. Assert.True(result.IsInvalidCidr);
  51. Assert.Equal("not-a-cidr", result.InvalidCidrValue);
  52. }
  53. [Fact]
  54. public async Task Subnet_discovery_groups_services_by_prefix()
  55. {
  56. var repo = Substitute.For<IServiceRepository>();
  57. repo.GetAllAsync().Returns(new List<Service>
  58. {
  59. new() { Name = "svc1", Network = new Network { Ip = "192.168.1.10" } },
  60. new() { Name = "svc2", Network = new Network { Ip = "192.168.1.20" } },
  61. new() { Name = "svc3", Network = new Network { Ip = "192.168.2.5" } },
  62. new() { Name = "svc4", Network = new Network { Ip = "10.0.0.1" } }
  63. });
  64. var sut = new ServiceSubnetsUseCase(repo);
  65. var result = await sut.ExecuteAsync(null, 24, CancellationToken.None);
  66. Assert.False(result.IsInvalidCidr);
  67. Assert.Equal(3, result.Subnets.Count);
  68. Assert.Contains(result.Subnets, s => s.Cidr == "10.0.0.0/24" && s.Count == 1);
  69. Assert.Contains(result.Subnets, s => s.Cidr == "192.168.1.0/24" && s.Count == 2);
  70. Assert.Contains(result.Subnets, s => s.Cidr == "192.168.2.0/24" && s.Count == 1);
  71. }
  72. }