CalibrationManagerTests.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using IvfTl.ControlHost.Debug;
  3. using IvfTl.ControlHost.Tests.Fakes;
  4. using Xunit;
  5. namespace IvfTl.ControlHost.Tests
  6. {
  7. /// <summary>
  8. /// D2-02 Task3.2a:CalibrationManager 的 sid 校验路径(不触真实硬件标定)。
  9. /// 真实标定要硬件,这里只断言会话校验/字典管理的纯逻辑分支:
  10. /// · 不存在的 sid → StartCalibrate / GetProgress / Recalibrate 返回 SESSION_EXPIRED;
  11. /// · Stop 未知 sid 幂等返回 Okay;
  12. /// · houseBinOf 委托在 SESSION_EXPIRED 路径上绝不被调用(closure 未进入)。
  13. /// </summary>
  14. public class CalibrationManagerTests
  15. {
  16. private DateTime _now = new DateTime(2026, 6, 25, 0, 0, 0);
  17. private (CalibrationManager calib, DebugSessionManager debug, bool[] houseBinTouched) New()
  18. {
  19. var serial = new FakeSerial();
  20. var gate = new FakeGate(7, serial) { CanAcquire = true };
  21. var debug = new DebugSessionManager(sn => gate, () => _now, ttlMs: 10000, log: _ => { });
  22. var touched = new bool[1];
  23. // houseBinOf:SESSION_EXPIRED 路径下绝不应被调用;被调用则置标志,便于断言。
  24. var calib = new CalibrationManager(debug, sn => { touched[0] = true; return null; }, log: _ => { });
  25. return (calib, debug, touched);
  26. }
  27. [Fact]
  28. public void StartCalibrate_Unknown_Sid_Returns_SESSION_EXPIRED_Without_Touching_HouseBin()
  29. {
  30. var (calib, _, touched) = New();
  31. var r = calib.StartCalibrate("not-a-session", null);
  32. Assert.False(r.Ok);
  33. Assert.Equal("SESSION_EXPIRED", r.Code);
  34. Assert.False(touched[0]); // 会话校验先于取 HouseBin,委托不被触发
  35. }
  36. [Fact]
  37. public void GetProgress_Unknown_Sid_Returns_SESSION_EXPIRED()
  38. {
  39. var (calib, _, _) = New();
  40. var r = calib.GetProgress("nope");
  41. Assert.False(r.Ok);
  42. Assert.Equal("SESSION_EXPIRED", r.Code);
  43. }
  44. [Fact]
  45. public void Recalibrate_Unknown_Sid_Returns_SESSION_EXPIRED()
  46. {
  47. var (calib, _, _) = New();
  48. var r = calib.Recalibrate("nope", 3);
  49. Assert.False(r.Ok);
  50. Assert.Equal("SESSION_EXPIRED", r.Code);
  51. }
  52. [Fact]
  53. public void Stop_Unknown_Sid_Is_Idempotent_Ok()
  54. {
  55. var (calib, _, _) = New();
  56. Assert.True(calib.Stop("nope").Ok);
  57. Assert.True(calib.Stop(null).Ok);
  58. }
  59. }
  60. }