StartupFaultPolicyTests.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using IvfTl.Control.Entity.InitEntitys;
  4. using ivf_tl_Control;
  5. using Xunit;
  6. namespace IvfTl.ControlHost.Tests
  7. {
  8. public class StartupFaultPolicyTests
  9. {
  10. private static HouseFault Fault(int sn, HouseFaultType t = HouseFaultType.CcdSnMissing)
  11. => new HouseFault { HouseSn = sn, Type = t, Reason = "x", Stage = "扫口握手" };
  12. [Fact]
  13. public void BadHouseSns_Only_Counts_Known_Houses()
  14. {
  15. var faults = new List<HouseFault>
  16. {
  17. Fault(6),
  18. Fault(-1, HouseFaultType.CameraDuplicateSn), // 舱号未知 → 不算坏舱
  19. Fault(8),
  20. };
  21. var bad = StartupFaultPolicy.BadHouseSns(faults);
  22. Assert.Equal(new[] { 6, 8 }, bad.OrderBy(x => x).ToArray());
  23. }
  24. [Fact]
  25. public void RunnableHouses_Excludes_Bad_And_Sorts()
  26. {
  27. var discovered = new[] { 2, 4, 6, 7, 8, 9, 11 };
  28. var faults = new List<HouseFault> { Fault(6), Fault(8) };
  29. var run = StartupFaultPolicy.RunnableHouses(discovered, faults);
  30. Assert.Equal(new[] { 2, 4, 7, 9, 11 }, run.ToArray());
  31. }
  32. [Fact]
  33. public void RunnableHouses_With_No_Faults_Returns_All_Discovered()
  34. {
  35. var discovered = new[] { 2, 4, 6 };
  36. var run = StartupFaultPolicy.RunnableHouses(discovered, new List<HouseFault>());
  37. Assert.Equal(new[] { 2, 4, 6 }, run.ToArray());
  38. }
  39. [Fact]
  40. public void RunnableHouses_UnknownHouseFault_Does_Not_Exclude_Anyone()
  41. {
  42. var discovered = new[] { 2, 4 };
  43. var faults = new List<HouseFault> { Fault(-1, HouseFaultType.CameraReadFailed) };
  44. var run = StartupFaultPolicy.RunnableHouses(discovered, faults);
  45. Assert.Equal(new[] { 2, 4 }, run.ToArray());
  46. }
  47. [Fact]
  48. public void IsFatal_True_Only_When_No_Runnable_House()
  49. {
  50. Assert.True(StartupFaultPolicy.IsFatal(new List<int>()));
  51. Assert.False(StartupFaultPolicy.IsFatal(new List<int> { 11 }));
  52. Assert.False(StartupFaultPolicy.IsFatal(new List<int> { 2, 4 }));
  53. }
  54. [Fact]
  55. public void Partial_Failure_Is_Never_Fatal()
  56. {
  57. // 7 个舱里坏 2 个 → 仍 5 个可跑 → 不致命(核心需求)
  58. var discovered = new[] { 2, 4, 6, 7, 8, 9, 11 };
  59. var faults = new List<HouseFault> { Fault(6), Fault(8) };
  60. var run = StartupFaultPolicy.RunnableHouses(discovered, faults);
  61. Assert.False(StartupFaultPolicy.IsFatal(run));
  62. }
  63. }
  64. }