public void StopResponsiveService() { var test = new TestDef { MaxTime = TimeSpan.FromMinutes(1) }; var terminated = TimeSpan.Zero; test.AddScript("com:test", async env => { try { while (!env.Token.IsCancellationRequested) { await env.SimulateWork(10.Sec(), env.Token); } } finally { terminated = env.Time; } }); test.Run(async plan => { plan.StartServices(); await plan.Delay(TimeSpan.FromSeconds(1)); await plan.StopServices(); }); Assert.AreEqual(TimeSpan.FromSeconds(1), terminated); }
public void RebootTest() { var bootCount = 0; var test = new TestDef() { MaxTime = 2.Minutes(), MaxInactive = 2.Minutes() }; test.AddScript("com:test", async env => { bootCount++; while (!env.Token.IsCancellationRequested) { await env.SimulateWork(100.Ms()); } }); test.Run(async plan => { plan.StartServices(); await plan.Delay(TimeSpan.FromMinutes(1)); await plan.StopServices(); plan.StartServices(); }); Assert.AreEqual(2, bootCount); }
public void NonResponsiveServiceIsKilledWithoutMercy() { var test = new TestDef { MaxTime = TimeSpan.FromMinutes(1) }; var launched = true; var terminated = false; test.AddScript("com:test", async env => { launched = true; try { while (!env.Token.IsCancellationRequested) { await env.SimulateWork(10000.Ms()); } } finally { // this should never hit terminated = true; } }); test.Run(async plan => { plan.StartServices(); await plan.Delay(1.Sec()); await plan.StopServices(grace: 1.Sec()); }); Assert.IsTrue(launched, nameof(launched)); Assert.IsFalse(terminated, nameof(terminated)); }
public void CancellationAbortsPromise() { var test = new TestDef(); var cancel = TimeSpan.MinValue; var result = false; test.AddScript("m:m", async env => { var promise = new SimFuture <bool>(5000, env.Token); try { result = await promise.Task; } catch (TaskCanceledException) { cancel = env.Time; } }); test.Run(async plan => { plan.StartServices(); await plan.Delay(1000.Sec()); await plan.StopServices(grace: 1.Sec()); }); Assert.IsFalse(result); Assert.AreEqual(TimeSpan.FromMilliseconds(1000), cancel, nameof(cancel)); }
static void AddHelloWorldClient(TestDef run, string endpoint, List <object> responses) { run.AddScript("localhost:console", async env => { try { using (var conn = await env.Connect(endpoint, 80)) { await conn.Write("Hello"); var response = await conn.Read(5.Sec()); responses.Add(response); } } catch (IOException ex) { env.Debug(ex.Message); responses.Add(ex); } }); }
static void AddHelloWorldServer(TestDef run, string endpoint, List <object> requests) { run.AddScript(endpoint + ":engine", async env => { async void Handler(IConn conn) { using (conn) { var msg = await conn.Read(5.Sec()); requests.Add(msg); await conn.Write("World"); } } using (var socket = await env.Bind(80)) { while (!env.Token.IsCancellationRequested) { Handler(await socket.Accept()); } } }); }
static void AddHelloWorldProxy(TestDef run, string endpoint, string target) { run.AddScript(endpoint + ":engine", async env => { async void Handler(IConn conn) { using (conn) { var msg = await conn.Read(5.Sec()); using (var outgoing = await env.Connect(target, 80)) { await outgoing.Write(msg); var response = await outgoing.Read(5.Sec()); await conn.Write(response); } } } using (var socket = await env.Bind(80)) { while (!env.Token.IsCancellationRequested) { Handler(await socket.Accept()); } } }); }