4
0

MigrationDataPreservationTests.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using RackPeek.Domain.Persistence.Yaml;
  2. namespace Tests.Yaml;
  3. public class MigrationDataPreservationTests {
  4. [Fact]
  5. public async Task RunsOn_migration_rejects_non_string_items_without_changing_them() {
  6. var runsOn = new List<object> { "hypervisor", 42 };
  7. var resource = new Dictionary<object, object> {
  8. ["kind"] = "System",
  9. ["name"] = "apps",
  10. ["runsOn"] = runsOn
  11. };
  12. var root = new Dictionary<object, object> {
  13. ["resources"] = new List<object> { resource }
  14. };
  15. await Assert.ThrowsAsync<InvalidCastException>(async () =>
  16. await RackPeekConfigMigrationDeserializer.ConvertScalarRunsOnToList(null!, root));
  17. Assert.Same(runsOn, resource["runsOn"]);
  18. Assert.Equal(new object[] { "hypervisor", 42 }, runsOn);
  19. }
  20. [Fact]
  21. public async Task Nic_migration_rejects_non_object_items_without_removing_the_original_data() {
  22. var nics = new List<object> {
  23. new Dictionary<object, object> {
  24. ["type"] = "rj45",
  25. ["speed"] = 1,
  26. ["ports"] = 2
  27. },
  28. "unexpected"
  29. };
  30. var resource = new Dictionary<object, object> {
  31. ["kind"] = "Server",
  32. ["name"] = "node",
  33. ["nics"] = nics
  34. };
  35. var root = new Dictionary<object, object> {
  36. ["resources"] = new List<object> { resource }
  37. };
  38. await Assert.ThrowsAsync<InvalidCastException>(async () =>
  39. await RackPeekConfigMigrationDeserializer.ConvertNicsToPortsV3(null!, root));
  40. Assert.Same(nics, resource["nics"]);
  41. Assert.False(resource.ContainsKey("ports"));
  42. }
  43. [Fact]
  44. public async Task Nic_migration_rejects_unknown_fields_instead_of_discarding_them() {
  45. var nic = new Dictionary<object, object> {
  46. ["type"] = "rj45",
  47. ["speed"] = 1,
  48. ["ports"] = 2,
  49. ["vendorField"] = "keep-me"
  50. };
  51. var resource = new Dictionary<object, object> {
  52. ["kind"] = "Server",
  53. ["name"] = "node",
  54. ["nics"] = new List<object> { nic }
  55. };
  56. var root = new Dictionary<object, object> {
  57. ["resources"] = new List<object> { resource }
  58. };
  59. await Assert.ThrowsAsync<InvalidCastException>(async () =>
  60. await RackPeekConfigMigrationDeserializer.ConvertNicsToPortsV3(null!, root));
  61. Assert.True(resource.ContainsKey("nics"));
  62. Assert.False(resource.ContainsKey("ports"));
  63. Assert.Equal("keep-me", nic["vendorField"]);
  64. }
  65. }