public async Task Should_pass_message_and_headers_to_partition_key_extractor()
        {
            object capturedMessageInstanceFromPartionKeyExtractor = null;
            IReadOnlyDictionary <string, string> capturedHeadersFromPartionKeyExtractor = null;
            var partitionKeyExtractor = new PartitionKeyExtractor(
                (object msg, IReadOnlyDictionary <string, string> headers, out PartitionKey? partitionKey) =>
            {
                partitionKey = null;
                capturedMessageInstanceFromPartionKeyExtractor = msg;
                capturedHeadersFromPartionKeyExtractor         = headers;
                return(true);
            });

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

            var messageHeaders = new Dictionary <string, string> {
                { "HeaderKey", "HeaderValue" }
            };
            var messageInstance = new object();
            var context         = new TestableIncomingLogicalMessageContext
            {
                MessageHeaders = messageHeaders,
                Message        = new LogicalMessage(new MessageMetadata(typeof(object)), messageInstance)
            };

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

            Assert.That(capturedMessageInstanceFromPartionKeyExtractor, Is.Not.Null.And.EqualTo(messageInstance));
            Assert.That(capturedHeadersFromPartionKeyExtractor, Is.Not.Null.And.EqualTo(messageHeaders));
        }
示例#2
0
        public async Task Should_not_set_partition_key_when_partition_key_extractor_returns_false()
        {
            var extractor = new PartitionKeyExtractor(
                (IReadOnlyDictionary <string, string> headers, out PartitionKey? key) =>
            {
                key = null;
                return(false);
            });

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

            var context = new TestableTransportReceiveContext();

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

            Assert.That(context.Extensions.TryGet <PartitionKey>(out _), Is.False);
        }
        public async Task Should_set_partition_key_when_partition_key_extractor_returns_true()
        {
            var partitionKeyExtractor = new PartitionKeyExtractor(
                (object msg, IReadOnlyDictionary <string, string> headers, out PartitionKey? key) =>
            {
                key = new PartitionKey(true);
                return(true);
            });

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

            var context = new TestableIncomingLogicalMessageContext();

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

            Assert.That(context.Extensions.TryGet <PartitionKey>(out var partitionKey), Is.True);
            Assert.AreEqual(new PartitionKey(true), partitionKey);
        }
示例#4
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));
        }
示例#5
0
 public void SetUp()
 {
     extractor = new PartitionKeyExtractor();
 }