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));
        }
Example #4
0
        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());
                    }
                }
            });
        }