|
@@ -0,0 +1,45 @@
|
|
|
|
|
+using IvfTl.ControlHost.Debug;
|
|
|
|
|
+using IvfTl.ControlHost.Tests.Fakes;
|
|
|
|
|
+using Newtonsoft.Json.Linq;
|
|
|
|
|
+using System;
|
|
|
|
|
+using Xunit;
|
|
|
|
|
+namespace IvfTl.ControlHost.Tests
|
|
|
|
|
+{
|
|
|
|
|
+ public class DebugExecuteTests
|
|
|
|
|
+ {
|
|
|
|
|
+ private DateTime _now = new DateTime(2026, 6, 23);
|
|
|
|
|
+ private (DebugSessionManager mgr, FakeSerial serial, string sid) New()
|
|
|
|
|
+ {
|
|
|
|
|
+ var serial = new FakeSerial();
|
|
|
|
|
+ var gate = new FakeGate(5, serial);
|
|
|
|
|
+ var mgr = new DebugSessionManager(sn => gate, () => _now, 10000, _ => { });
|
|
|
|
|
+ string sid = (string)mgr.Acquire(5).Result;
|
|
|
|
|
+ return (mgr, serial, sid);
|
|
|
|
|
+ }
|
|
|
|
|
+ [Fact] public void Execute_ReadTemp_Dispatches()
|
|
|
|
|
+ {
|
|
|
|
|
+ var (mgr, serial, sid) = New();
|
|
|
|
|
+ var r = mgr.Execute(sid, "ReadTemp", null);
|
|
|
|
|
+ Assert.True(r.Ok);
|
|
|
|
|
+ Assert.Contains("Temp", serial.Calls);
|
|
|
|
|
+ }
|
|
|
|
|
+ [Fact] public void Execute_OpenLed_Dispatches()
|
|
|
|
|
+ {
|
|
|
|
|
+ var (mgr, serial, sid) = New();
|
|
|
|
|
+ Assert.True(mgr.Execute(sid, "OpenLed", null).Ok);
|
|
|
|
|
+ Assert.Contains("OpenLed", serial.Calls);
|
|
|
|
|
+ }
|
|
|
|
|
+ [Fact] public void Execute_Expired_Session_Rejected()
|
|
|
|
|
+ {
|
|
|
|
|
+ var (mgr, _, _) = New();
|
|
|
|
|
+ Assert.Equal("SESSION_EXPIRED", mgr.Execute("ghost", "ReadTemp", null).Code);
|
|
|
|
|
+ }
|
|
|
|
|
+ [Fact] public void Execute_Unknown_Op_Rejected()
|
|
|
|
|
+ {
|
|
|
|
|
+ var (mgr, _, sid) = New();
|
|
|
|
|
+ var r = mgr.Execute(sid, "NoSuchOp", null);
|
|
|
|
|
+ Assert.False(r.Ok);
|
|
|
|
|
+ Assert.Equal("BAD_OP", r.Code);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|