Ejemplo n.º 1
0
        public async Task Run(TestCtx ctx)
        {
            var hostA = ctx.HostA;
            var hostB = ctx.HostB;

            await Task.WhenAll(
                Setup(hostA),
                Setup(hostB));

            await ctx.ConnectFrom(Host.A);

            await hostB.ChannelRecv(0, amount);

            await hostA.ChannelXmit(0, amount);

            var durationMs = await ctx.Pause(50000, _ => _.Trace.GetLastTraceItemChannelFor(Host.B, null)?.Channels[0]?.RecvPosition == amount);

            var xmitted   = ctx.Trace.GetLastTraceItemChannelFor(Host.B, null).Channels[0].RecvPosition;
            var speedKbps = xmitted / durationMs * 1000;
            var speedStr  = Utils.GetSizeAsString((long)speedKbps);
            var amountStr = Utils.GetSizeAsString(xmitted
                                                  );

            ctx.Log($@"Overall duration {durationMs} ms, amount {amountStr}, speed: {speedStr}/s");
            await ctx.HostB.ExpectClose();

            await ctx.HostA.Close();

            await ctx.Pause(100);

            await ctx.HostB.EnsureClosed();
        }
        public async Task ConfigurePipelineFor_WithCorrectExecution()
        {
            // arrange
            var services = new ServiceCollection();

            services.ConfigurePipelineFor <TestCtx>()
            .Use <Middleware1>()
            .Use(typeof(Middleware2));

            var sp       = services.BuildServiceProvider();
            var pipeline = sp.GetRequiredService <IPipeline <TestCtx> >();

            var testContext = new TestCtx();

            Assert.IsNull(testContext.Msg);
            Assert.Zero(testContext.ExecutedMiddlewaresCount);

            // act
            await pipeline.ExecuteAsync(testContext);

            // assert
            const string expectedMessage = "Before_" + nameof(Middleware1) +
                                           "Before_" + nameof(Middleware2) +
                                           "After_" + nameof(Middleware2) +
                                           "After_" + nameof(Middleware1);

            Assert.AreEqual(expectedMessage, testContext.Msg, "Pipeline execution order is not match");
            Assert.AreEqual(2, testContext.ExecutedMiddlewaresCount, "ExecutedMiddlewaresCount is not match");
        }
        public async Task Executes_With_Register_MiddlewareDelegate()
        {
            // arrange
            var services = new ServiceCollection();

            services
            .ConfigurePipelineFor <TestCtx>()
            .Use(next =>
            {
                return((ctx, cancellationToken) =>
                {
                    ctx.Msg = "123";

                    return next(ctx, cancellationToken);
                });
            });

            var sp = services.BuildServiceProvider();

            var pipeline = sp.GetRequiredService <IPipeline <TestCtx> >();

            var testCtx = new TestCtx();

            // act
            await pipeline.ExecuteAsync(testCtx);

            // assert
            Assert.AreEqual("123", testCtx.Msg);
        }
        public async Task Should_BeCorrect_PipelineExecutionOrder_WithServiceProviderConditions([Values(true, false)] bool executeMiddleware2)
        {
            // arrange
            var pipelineBuilder = new PipelineBuilder <TestCtx>();

            pipelineBuilder.Use <Middleware1>();
            pipelineBuilder.UseWhen(ctx => ctx.ExecuteMiddleware2, async(_, ctx, next) =>
            {
                ctx.ExecutedMiddlewaresCount++;

                ctx.Msg += "Before_LambdaMiddleware";

                await next();

                ctx.Msg += "After_LambdaMiddleware";
            });
            pipelineBuilder.Use <Middleware2>();

            var pipeline = pipelineBuilder.Build(new ServiceCollection().BuildServiceProvider());

            var testContext = new TestCtx
            {
                ExecuteMiddleware2 = executeMiddleware2
            };

            Assert.IsNull(testContext.Msg);
            Assert.Zero(testContext.ExecutedMiddlewaresCount);

            // act
            await pipeline.ExecuteAsync(testContext);

            // assert
            var expectedMessage = "Before_" + nameof(Middleware1) +
                                  (executeMiddleware2 ? "Before_LambdaMiddleware" : string.Empty) +
                                  "Before_" + nameof(Middleware2) +

                                  "After_" + nameof(Middleware2) +
                                  (executeMiddleware2 ? "After_LambdaMiddleware" : string.Empty) +
                                  "After_" + nameof(Middleware1);

            var expectedExecutedMiddlewaresCount = executeMiddleware2 ? 3 : 2;

            Assert.AreEqual(expectedMessage, testContext.Msg, "Pipeline execution order is not match");
            Assert.AreEqual(expectedExecutedMiddlewaresCount, testContext.ExecutedMiddlewaresCount, "ExecutedMiddlewaresCount is not match");
        }
        public async Task NoOp_WhenPipeline_Empty()
        {
            // arrange
            var services = new ServiceCollection();

            services.ConfigurePipelineFor <TestCtx>();

            var sp = services.BuildServiceProvider();

            var pipeline = sp.GetRequiredService <IPipeline <TestCtx> >();

            var testCtx = new TestCtx();

            // act
            await pipeline.ExecuteAsync(testCtx);

            // assert
            Assert.IsNull(testCtx.Msg);
        }
Ejemplo n.º 6
0
        private async void ButtonStart(object sender, RoutedEventArgs e)
        {
            BtnStart.IsEnabled = false;
            try
            {
                logContainer.Add(@"cmbTests.SelectedItem : {0}", CmbTests.SelectedItem);
                logContainer.Add(@"cmbTests.SelectedValue: {0}", CmbTests.SelectedValue);
                var ctx    = new TestCtx(logContainer, Settings.Default.HostA, Settings.Default.HostB);
                var test   = (ITest)CmbTests.SelectedItem;
                var runner = new TestRunner(test, ctx);
                await runner.Run();

                UpdateTrace(runner.GetTrace());
            }
            finally
            {
                BtnStart.IsEnabled = true;
            }
        }
Ejemplo n.º 7
0
        public async Task Run(TestCtx ctx)
        {
            var hostA = ctx.HostA;
            var hostB = ctx.HostB;

            await Task.WhenAll(
                Setup(hostA),
                Setup(hostB));

            await ctx.ConnectFrom(Host.A);

            await ctx.Pause(100);

            await ctx.HostB.ExpectClose();

            await ctx.HostA.Close();

            await ctx.Pause(300);

            await ctx.HostB.EnsureClosed();
        }
        public async Task Pipeline_Should_Preserve_OwnPipelineComponents_AfterBuild()
        {
            // arrange
            var sp = new ServiceCollection().BuildServiceProvider();

            var pipelineBuilder = new PipelineBuilder <TestCtx>();

            pipelineBuilder.Use <Middleware1>();

            var firstPipeline = pipelineBuilder.Build(sp);

            pipelineBuilder.Use(async(ctx, next) =>
            {
                ctx.Msg += "Before_LambdaMiddleware";

                await next();

                ctx.Msg += "After_LambdaMiddleware";
            });

            var secondPipeline = pipelineBuilder.Build(sp);

            var testContext = new TestCtx();

            // act
            await firstPipeline.ExecuteAsync(testContext); // this pipeline has no lambda middleware in pipeline.

            Assert.AreEqual("Before_Middleware1After_Middleware1", testContext.Msg);

            testContext.Msg = null;                         // clear before second pipeline execution

            await secondPipeline.ExecuteAsync(testContext); // this has full pipeline.

            // assert
            Assert.AreEqual(
                "Before_Middleware1Before_LambdaMiddlewareAfter_LambdaMiddlewareAfter_Middleware1",
                testContext.Msg
                );
        }
Ejemplo n.º 9
0
        public async Task Should_BeCorrect_PipelineExecutionOrder()
        {
            // arrange
            var pipelineBuilder = new PipelineBuilder <TestCtx>();

            pipelineBuilder.Use <Middleware1>();
            pipelineBuilder.Use <Middleware2>();
            pipelineBuilder.Use(async(ctx, next) =>
            {
                ctx.ExecutedMiddlewaresCount++;

                ctx.Msg += "Before_LambdaMiddleware";

                await next();
                ctx.Msg += "After_LambdaMiddleware";
            });

            var pipeline = pipelineBuilder.Build(new ServiceCollection().BuildServiceProvider());

            var testContext = new TestCtx();

            Assert.IsNull(testContext.Msg);
            Assert.Zero(testContext.ExecutedMiddlewaresCount);

            // act
            await pipeline.ExecuteAsync(testContext);

            // assert
            const string expectedMessage = "Before_" + nameof(Middleware1) +
                                           "Before_" + nameof(Middleware2) +
                                           "Before_LambdaMiddleware" +
                                           "After_LambdaMiddleware" +
                                           "After_" + nameof(Middleware2) +
                                           "After_" + nameof(Middleware1);

            Assert.AreEqual(expectedMessage, testContext.Msg, "Pipeline execution order is not match");
            Assert.AreEqual(3, testContext.ExecutedMiddlewaresCount, "ExecutedMiddlewaresCount is not match");
        }
Ejemplo n.º 10
0
        public async Task Should_BeCorrect_PipelineExecutionOrder_WithDeps()
        {
            // arrange
            var services = new ServiceCollection();
            var dep      = new ExampleDependency();

            services.AddSingleton(dep);

            var sp = services.BuildServiceProvider();

            var pipelineBuilder = new PipelineBuilder <TestCtx>();

            pipelineBuilder.Use <Middleware1>();
            pipelineBuilder.Use <Middleware2>();
            pipelineBuilder.Use <TestCtx, ExampleDependency>(async(ctx, deps, next) =>
            {
                ctx.ExecutedMiddlewaresCount++;
                deps.Resolved = true;

                ctx.Msg += "Before_LambdaMiddleware";

                await next();
                ctx.Msg += "After_LambdaMiddleware";
            });

            var pipeline = pipelineBuilder.Build(sp);

            var testContext = new TestCtx();

            Assert.IsFalse(dep.Resolved);

            // act
            await pipeline.ExecuteAsync(testContext);

            // assert
            Assert.IsTrue(dep.Resolved, "Dependency is not resolved");
        }
Ejemplo n.º 11
0
 public async Task Run(TestCtx ctx)
 {
     await Task.CompletedTask;
 }