public async Task CorrelationFilterProperties()
        {
            var topicName        = Guid.NewGuid().ToString("D").Substring(0, 8);
            var subscriptionName = Guid.NewGuid().ToString("D").Substring(0, 8);
            var client           = new ServiceBusManagementClient(TestEnvironment.ServiceBusConnectionString);

            await client.CreateTopicAsync(topicName);

            await client.CreateSubscriptionAsync(topicName, subscriptionName);

            var filter = new CorrelationRuleFilter();

            filter.Properties.Add("stringKey", "stringVal");
            filter.Properties.Add("intKey", 5);
            filter.Properties.Add("dateTimeKey", DateTime.UtcNow);

            RuleProperties rule = await client.CreateRuleAsync(
                topicName,
                subscriptionName,
                new CreateRuleOptions("rule1", filter));

            Assert.True(filter.Properties.Count == 3);
            Assert.AreEqual(filter, rule.Filter);

            await client.DeleteTopicAsync(topicName);
        }
        internal static AmqpMap GetCorrelationRuleFilterMap(CorrelationRuleFilter correlationRuleFilter)
        {
            var correlationRuleFilterMap = new AmqpMap
            {
                [ManagementConstants.Properties.CorrelationId]    = correlationRuleFilter.CorrelationId,
                [ManagementConstants.Properties.MessageId]        = correlationRuleFilter.MessageId,
                [ManagementConstants.Properties.To]               = correlationRuleFilter.To,
                [ManagementConstants.Properties.ReplyTo]          = correlationRuleFilter.ReplyTo,
                [ManagementConstants.Properties.Label]            = correlationRuleFilter.Subject,
                [ManagementConstants.Properties.SessionId]        = correlationRuleFilter.SessionId,
                [ManagementConstants.Properties.ReplyToSessionId] = correlationRuleFilter.ReplyToSessionId,
                [ManagementConstants.Properties.ContentType]      = correlationRuleFilter.ContentType
            };

            var propertiesMap = new AmqpMap();

            foreach (var property in correlationRuleFilter.ApplicationProperties)
            {
                propertiesMap[new MapKey(property.Key)] = property.Value;
            }

            correlationRuleFilterMap[ManagementConstants.Properties.CorrelationRuleFilterProperties] = propertiesMap;

            return(correlationRuleFilterMap);
        }
        public async Task CorrelationFilterProperties()
        {
            var topicName        = Recording.Random.NewGuid().ToString("D").Substring(0, 8);
            var subscriptionName = Recording.Random.NewGuid().ToString("D").Substring(0, 8);
            var client           = CreateClient();

            await client.CreateTopicAsync(topicName);

            await client.CreateSubscriptionAsync(topicName, subscriptionName);

            var filter = new CorrelationRuleFilter();

            filter.ApplicationProperties.Add("stringKey", "stringVal");
            filter.ApplicationProperties.Add("intKey", 5);
            filter.ApplicationProperties.Add("dateTimeKey", Recording.Now.UtcDateTime);

            RuleProperties rule = await client.CreateRuleAsync(
                topicName,
                subscriptionName,
                new CreateRuleOptions("rule1", filter));

            Assert.True(filter.ApplicationProperties.Count == 3);
            Assert.AreEqual(filter, rule.Filter);

            await client.DeleteTopicAsync(topicName);
        }
示例#4
0
        private void AddMessageVersionProperty(Type messageType, CorrelationRuleFilter filter)
        {
            var messageVersion = messageType.GetCustomAttribute <MessageVersionAttribute>();

            if (messageVersion != null)
            {
                filter.ApplicationProperties.Add(_messageVersionPropertyName, messageVersion.Version);
            }
        }
示例#5
0
 private void AddMessageFilterProperties(MessageHandlerMapping messageHandlerMapping, Type messageType,
                                         CorrelationRuleFilter filter)
 {
     if (messageHandlerMapping.SubscriptionFilter?.MessageProperties.Count > 0)
     {
         AddCustomMessageProperties(messageHandlerMapping, filter);
     }
     else
     {
         AddMessageVersionProperty(messageType, filter);
     }
 }
        protected static CorrelationRuleFilter BuildCorrelationRuleFilter(SubscriptionFilter subscriptionFilter)
        {
            var filter = new CorrelationRuleFilter
            {
                Subject = subscriptionFilter.Label
            };

            foreach (var property in subscriptionFilter.MessageProperties)
            {
                filter.ApplicationProperties.Add(property.Key, property.Value);
            }

            return(filter);
        }
        public static RuleFilter GetFilter(AmqpRuleFilterCodec amqpFilter)
        {
            RuleFilter filter;

            switch (amqpFilter.DescriptorCode)
            {
            case AmqpSqlRuleFilterCodec.Code:
                var amqpSqlFilter = (AmqpSqlRuleFilterCodec)amqpFilter;
                filter = new SqlRuleFilter(amqpSqlFilter.Expression);
                break;

            case AmqpTrueRuleFilterCodec.Code:
                filter = new TrueRuleFilter();
                break;

            case AmqpFalseRuleFilterCodec.Code:
                filter = new FalseRuleFilter();
                break;

            case AmqpCorrelationRuleFilterCodec.Code:
                var amqpCorrelationFilter = (AmqpCorrelationRuleFilterCodec)amqpFilter;
                var correlationFilter     = new CorrelationRuleFilter
                {
                    CorrelationId    = amqpCorrelationFilter.CorrelationId,
                    MessageId        = amqpCorrelationFilter.MessageId,
                    To               = amqpCorrelationFilter.To,
                    ReplyTo          = amqpCorrelationFilter.ReplyTo,
                    Subject          = amqpCorrelationFilter.Subject,
                    SessionId        = amqpCorrelationFilter.SessionId,
                    ReplyToSessionId = amqpCorrelationFilter.ReplyToSessionId,
                    ContentType      = amqpCorrelationFilter.ContentType
                };

                foreach (var property in amqpCorrelationFilter.Properties)
                {
                    correlationFilter.ApplicationProperties.Add(property.Key.Key.ToString(), property.Value);
                }

                filter = correlationFilter;
                break;

            default:
                throw new NotSupportedException($"Unknown filter descriptor code: {amqpFilter.DescriptorCode}");
            }

            return(filter);
        }
        public async Task BasicRuleCrudOperations()
        {
            var topicName        = Recording.Random.NewGuid().ToString("D").Substring(0, 8);
            var subscriptionName = Recording.Random.NewGuid().ToString("D").Substring(0, 8);
            var client           = CreateClient();
            await client.CreateTopicAsync(topicName);

            var rule1 = new CreateRuleOptions
            {
                Filter = new TrueRuleFilter(),
                Name   = "rule1"
            };
            await client.CreateSubscriptionAsync(
                new CreateSubscriptionOptions(topicName, subscriptionName),
                rule1);

            RuleProperties getRule1 = await client.GetRuleAsync(topicName, subscriptionName, "rule1");

            Assert.AreEqual(rule1, new CreateRuleOptions(getRule1));

            var sqlRuleFilter = new SqlRuleFilter("stringValue = @stringParam AND intValue = @intParam AND longValue = @longParam AND dateValue = @dateParam AND timeSpanValue = @timeSpanParam");

            sqlRuleFilter.Parameters.Add("@stringParam", "string");
            sqlRuleFilter.Parameters.Add("@intParam", 1);
            sqlRuleFilter.Parameters.Add("@longParam", (long)12);
            sqlRuleFilter.Parameters.Add("@dateParam", Recording.Now.UtcDateTime);
            sqlRuleFilter.Parameters.Add("@timeSpanParam", TimeSpan.FromDays(1));
            var rule2 = new CreateRuleOptions
            {
                Name   = "rule2",
                Filter = sqlRuleFilter,
                Action = new SqlRuleAction("SET a='b'")
            };
            await client.CreateRuleAsync(topicName, subscriptionName, rule2);

            RuleProperties getRule2 = await client.GetRuleAsync(topicName, subscriptionName, "rule2");

            Assert.AreEqual(rule2, new CreateRuleOptions(getRule2));

            var correlationRuleFilter = new CorrelationRuleFilter()
            {
                ContentType      = "contentType",
                CorrelationId    = "correlationId",
                Subject          = "label",
                MessageId        = "messageId",
                ReplyTo          = "replyTo",
                ReplyToSessionId = "replyToSessionId",
                SessionId        = "sessionId",
                To = "to"
            };

            correlationRuleFilter.ApplicationProperties.Add("customKey", "customValue");
            var rule3 = new CreateRuleOptions()
            {
                Name   = "rule3",
                Filter = correlationRuleFilter,
                Action = null
            };
            await client.CreateRuleAsync(topicName, subscriptionName, rule3);

            RuleProperties getRule3 = await client.GetRuleAsync(topicName, subscriptionName, "rule3");

            Assert.AreEqual(rule3, new CreateRuleOptions(getRule3));

            List <RuleProperties> ruleList = new List <RuleProperties>();

            await foreach (RuleProperties rule in client.GetRulesAsync(topicName, subscriptionName))
            {
                ruleList.Add(rule);
            }
            RuleProperties[] ruleArr = ruleList.ToArray();
            Assert.True(ruleArr.Length == 3);
            Assert.AreEqual(rule1, new CreateRuleOptions(ruleArr[0]));
            Assert.AreEqual(rule2, new CreateRuleOptions(ruleArr[1]));
            Assert.AreEqual(rule3, new CreateRuleOptions(ruleArr[2]));

            ((CorrelationRuleFilter)getRule3.Filter).CorrelationId = "correlationIdModified";
            SubscriptionProperties sub = await client.GetSubscriptionAsync(topicName, subscriptionName);

            RuleProperties updatedRule3 = await client.UpdateRuleAsync(topicName, subscriptionName, getRule3);

            Assert.AreEqual(getRule3, updatedRule3);

            bool exists = await client.RuleExistsAsync(topicName, subscriptionName, rule1.Name);

            Assert.True(exists);

            await client.DeleteRuleAsync(topicName, subscriptionName, "rule1");

            Assert.That(
                async() =>
                await client.GetRuleAsync(topicName, subscriptionName, "rule1"),
                Throws.InstanceOf <ServiceBusException>().And.Property(nameof(ServiceBusException.Reason)).EqualTo(ServiceBusFailureReason.MessagingEntityNotFound));

            exists = await client.RuleExistsAsync(topicName, subscriptionName, rule1.Name);

            Assert.False(exists);

            await client.DeleteTopicAsync(topicName);
        }
示例#9
0
 private static void AddCustomMessageProperties(MessageHandlerMapping messageHandlerMapping, CorrelationRuleFilter filter)
 {
     if (messageHandlerMapping.SubscriptionFilter != null)
     {
         foreach (var property in messageHandlerMapping.SubscriptionFilter.MessageProperties)
         {
             filter.ApplicationProperties.Add(property.Key, property.Value);
         }
     }
 }