DebugBufferOpTests.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using IvfTl.ControlHost.Debug;
  3. using IvfTl.ControlHost.Tests.Fakes;
  4. using Newtonsoft.Json.Linq;
  5. using Xunit;
  6. namespace IvfTl.ControlHost.Tests
  7. {
  8. /// <summary>缓冲瓶(舱11)专属 op 路由测试:验证 Execute 把 5 个 op 分发到正确底层方法。</summary>
  9. public class DebugBufferOpTests
  10. {
  11. private static readonly DateTime Now = new DateTime(2026, 6, 24, 0, 0, 0, DateTimeKind.Utc);
  12. // 返回 (manager, sid, fakeSerial) 三件套,照 DebugStreamSessionTests 的装配方式
  13. private (DebugSessionManager mgr, string sid, FakeSerial ser) NewSession()
  14. {
  15. var ser = new FakeSerial();
  16. var gate = new FakeGate(11, ser);
  17. var mgr = new DebugSessionManager(_ => gate, () => Now, ttlMs: 10000, log: null);
  18. string sid = (string)mgr.Acquire(11).Result;
  19. return (mgr, sid, ser);
  20. }
  21. [Fact]
  22. public void BufferState_RoutesTo_BufferBottleStateWait_AndReturnsTuple()
  23. {
  24. var (mgr, sid, ser) = NewSession();
  25. ser.BufferStateReturn = (2.5m, 36.1m, 37.2m);
  26. var r = mgr.Execute(sid, "BufferState", null);
  27. Assert.True(r.Ok);
  28. Assert.Contains("BufferState", ser.Calls);
  29. var jo = JObject.FromObject(r.Result);
  30. Assert.Equal(2.5m, jo["pressure"].Value<decimal>());
  31. Assert.Equal(36.1m, jo["t1"].Value<decimal>());
  32. Assert.Equal(37.2m, jo["t2"].Value<decimal>());
  33. }
  34. [Fact]
  35. public void BufferAeration_RoutesTo_BufferBottleAerationWait()
  36. {
  37. var (mgr, sid, ser) = NewSession();
  38. var r = mgr.Execute(sid, "BufferAeration", null);
  39. Assert.True(r.Ok);
  40. Assert.Equal(true, r.Result);
  41. Assert.Contains("BufferAeration", ser.Calls);
  42. }
  43. [Fact]
  44. public void ReadLight_RoutesTo_ReadLightBrightnessWait_AndReturnsInt()
  45. {
  46. var (mgr, sid, ser) = NewSession();
  47. var r = mgr.Execute(sid, "ReadLight", null);
  48. Assert.True(r.Ok);
  49. Assert.Equal(500, r.Result); // FakeSerial.ReadLightBrightnessWait 固定返回 500
  50. Assert.Contains("ReadLight", ser.Calls);
  51. }
  52. [Fact]
  53. public void WriteLight_RoutesTo_WriteLightBrightnessWait_WithValue()
  54. {
  55. var (mgr, sid, ser) = NewSession();
  56. var args = new JObject { ["value"] = 320 };
  57. var r = mgr.Execute(sid, "WriteLight", args);
  58. Assert.True(r.Ok);
  59. Assert.Contains("WriteLight(320)", ser.Calls);
  60. Assert.Equal(320, ser.LastWriteLight);
  61. }
  62. [Fact]
  63. public void WriteOpenIntakeTimeBuffer_RoutesTo_WriteOpenIntakeTimeWait_WithIsBufferTrue()
  64. {
  65. var (mgr, sid, ser) = NewSession();
  66. var args = new JObject { ["value"] = 150 };
  67. var r = mgr.Execute(sid, "WriteOpenIntakeTimeBuffer", args);
  68. Assert.True(r.Ok);
  69. Assert.Equal(150, ser.LastWriteIntake);
  70. Assert.True(ser.LastWriteIntakeIsBuffer);
  71. }
  72. }
  73. }