Beispiel #1
0
        public async Task ShouldNotCacheContext()
        {
            var stringWriter = new StringWriter();

            var pipelineModifications = new PipelineModifications();

            pipelineModifications.Additions.Add(new Behavior1.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Stage1.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Behavior2.Registration(stringWriter));
            pipelineModifications.Additions.Add(new StageFork.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Stage2.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Terminator.Registration(stringWriter));

            var pipeline = new Pipeline <ITransportReceiveContext>(new FakeBuilder(), new SettingsHolder(), pipelineModifications);

            stringWriter.WriteLine("Run 1");

            var context = new TestableTransportReceiveContext();

            context.Extensions.Set <IPipelineCache>(new FakePipelineCache());
            context.Extensions.Set(ExtendableExtensions.RunSpecificKey, 1);

            await pipeline.Invoke(context);

            stringWriter.WriteLine("Run 2");

            context = new TestableTransportReceiveContext();
            context.Extensions.Set <IPipelineCache>(new FakePipelineCache());
            context.Extensions.Set(ExtendableExtensions.RunSpecificKey, 2);

            await pipeline.Invoke(context);

            Approvals.Verify(stringWriter.ToString());
        }
        public async Task ShouldExecutePipeline()
        {
            if (Environment.OSVersion.Platform != PlatformID.Win32NT)
            {
                Assert.Ignore("ApprovalTests only works on Windows");
            }

            var stringWriter = new StringWriter();

            var pipelineModifications = new PipelineModifications();

            pipelineModifications.Additions.Add(new Behavior1.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Stage1.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Behavior2.Registration(stringWriter));
            pipelineModifications.Additions.Add(new StageFork.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Stage2.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Terminator.Registration(stringWriter));

            var pipeline = new Pipeline <ITransportReceiveContext>(new FakeBuilder(), pipelineModifications);

            var context = new TestableTransportReceiveContext();

            context.Extensions.Set <IPipelineCache>(new FakePipelineCache());

            await pipeline.Invoke(context);

            TestApprover.Verify(stringWriter.ToString());
        }
    public Task TransportReceiveContext()
    {
        var context = new TestableTransportReceiveContext
        {
            Message = BuildIncomingMessage(),
            ReceiveOperationAborted = true
        };

        return(Verify(context));
    }
        static ITransportReceiveContext CreateContext(FakeBatchPipeline pipeline, string messageId)
        {
            var context = new TestableTransportReceiveContext
            {
                Message = new IncomingMessage(messageId, new Dictionary <string, string>(), new byte[0])
            };

            context.Extensions.Set <IPipelineCache>(new FakePipelineCache(pipeline));

            return(context);
        }
Beispiel #5
0
        public async Task Should_not_set_container_when_container_information_extractor_returns_false()
        {
            var containerInformationExtractor = new ContainerInformationExtractor(
                (IReadOnlyDictionary <string, string> headers, out ContainerInformation? container) =>
            {
                container = null;
                return(false);
            });

            var behavior = new TransactionInformationBeforeThePhysicalOutboxBehavior(new PartitionKeyExtractor(), containerInformationExtractor);

            var context = new TestableTransportReceiveContext();

            await behavior.Invoke(context, _ => Task.CompletedTask);

            Assert.That(context.Extensions.TryGet <ContainerInformation>(out _), Is.False);
        }
Beispiel #6
0
        public async Task Should_set_container_when_container_information_extractor_returns_true()
        {
            var containerInformationExtractor = new ContainerInformationExtractor(
                (IReadOnlyDictionary <string, string> headers, out ContainerInformation? container) =>
            {
                container = new ContainerInformation("containerName", new PartitionKeyPath("/deep/down"));
                return(true);
            });

            var behavior = new TransactionInformationBeforeThePhysicalOutboxBehavior(new CosmosDB.PartitionKeyExtractor(), containerInformationExtractor);

            var context = new TestableTransportReceiveContext();

            await behavior.Invoke(context, _ => Task.CompletedTask);

            Assert.That(context.Extensions.TryGet <ContainerInformation>(out var containerInformation), Is.True);
            Assert.AreEqual(new ContainerInformation("containerName", new PartitionKeyPath("/deep/down")), containerInformation);
        }
Beispiel #7
0
        public async Task Should_set_partition_key_when_partition_key_extractor_returns_true()
        {
            var partitionKeyExtractor = new PartitionKeyExtractor(
                (IReadOnlyDictionary <string, string> headers, out PartitionKey? key) =>
            {
                key = new PartitionKey(true);
                return(true);
            });

            var behavior = new TransactionInformationBeforeThePhysicalOutboxBehavior(partitionKeyExtractor, new ContainerInformationExtractor());

            var context = new TestableTransportReceiveContext();

            await behavior.Invoke(context, _ => Task.CompletedTask);

            Assert.That(context.Extensions.TryGet <PartitionKey>(out var partitionKey), Is.True);
            Assert.AreEqual(new PartitionKey(true), partitionKey);
        }
Beispiel #8
0
        public async Task Should_pass_headers_to_partition_key_extractor()
        {
            IReadOnlyDictionary <string, string> capturedHeaders = null;
            var partitionKeyExtractor = new PartitionKeyExtractor(
                (IReadOnlyDictionary <string, string> headers, out PartitionKey? key) =>
            {
                key             = null;
                capturedHeaders = headers;
                return(false);
            });

            var behavior = new TransactionInformationBeforeThePhysicalOutboxBehavior(partitionKeyExtractor, new ContainerInformationExtractor());

            var context = new TestableTransportReceiveContext();

            context.Message.Headers.Add("TheAnswer", "Is42");

            await behavior.Invoke(context, _ => Task.CompletedTask);

            Assert.That(capturedHeaders, Is.EqualTo(context.Message.Headers));
        }
Beispiel #9
0
        public async Task ShouldCacheExecutionFunc()
        {
            var stringWriter = new StringWriter();

            var pipelineModifications = new PipelineModifications();

            pipelineModifications.Additions.Add(new Behavior1.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Stage1.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Behavior2.Registration(stringWriter));
            pipelineModifications.Additions.Add(new StageFork.Registration(stringWriter));

            var pipeline = new Pipeline <ITransportReceiveContext>(new FakeBuilder(), new SettingsHolder(), pipelineModifications);

            var context = new TestableTransportReceiveContext();

            context.Extensions.Set <IPipelineCache>(new FakePipelineCache());

            var stopwatch = Stopwatch.StartNew();
            await pipeline.Invoke(context);

            stopwatch.Stop();

            var firstRunTicks = stopwatch.ElapsedTicks;

            var runs = new List <long>();

            for (var i = 0; i < 100; i++)
            {
                stopwatch = Stopwatch.StartNew();
                await pipeline.Invoke(context);

                stopwatch.Stop();
                runs.Add(stopwatch.ElapsedTicks);
            }

            var average = runs.Average();

            Assert.That(average, Is.LessThan(firstRunTicks / 5));
        }
Beispiel #10
0
        public async Task ShouldExecutePipeline()
        {
            var stringWriter = new StringWriter();

            var pipelineModifications = new PipelineModifications();

            pipelineModifications.Additions.Add(new Behavior1.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Stage1.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Behavior2.Registration(stringWriter));
            pipelineModifications.Additions.Add(new StageFork.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Stage2.Registration(stringWriter));
            pipelineModifications.Additions.Add(new Terminator.Registration(stringWriter));

            var pipeline = new Pipeline <ITransportReceiveContext>(new ServiceCollection().BuildServiceProvider(), pipelineModifications);

            var context = new TestableTransportReceiveContext();

            context.Extensions.Set <IPipelineCache>(new FakePipelineCache());

            await pipeline.Invoke(context);

            Approver.Verify(stringWriter.ToString());
        }