public void UnknownElementsInAtomXmlHanldedRight()
    {
        string subscriptionDescriptionXml = $@"<entry xmlns=""{ManagementClientConstants.AtomNamespace}"">" +
                                            $@"<title xmlns=""{ManagementClientConstants.AtomNamespace}"">testqueue1</title>" +
                                            $@"<content xmlns=""{ManagementClientConstants.AtomNamespace}"">" +
                                            $@"<SubscriptionDescription xmlns=""{ManagementClientConstants.ServiceBusNamespace}"">" +
                                            $"<LockDuration>{XmlConvert.ToString(TimeSpan.FromMinutes(1))}</LockDuration>" +
                                            $"<RequiresSession>true</RequiresSession>" +
                                            $"<DefaultMessageTimeToLive>{XmlConvert.ToString(TimeSpan.FromMinutes(60))}</DefaultMessageTimeToLive>" +
                                            $"<DeadLetteringOnMessageExpiration>false</DeadLetteringOnMessageExpiration>" +
                                            $"<DeadLetteringOnFilterEvaluationExceptions>false</DeadLetteringOnFilterEvaluationExceptions>" +
                                            $"<MaxDeliveryCount>10</MaxDeliveryCount>" +
                                            $"<EnableBatchedOperations>true</EnableBatchedOperations>" +
                                            $"<Status>Active</Status>" +
                                            $"<ForwardTo>fq1</ForwardTo>" +
                                            $"<UserMetadata></UserMetadata>" +
                                            $"<AutoDeleteOnIdle>{XmlConvert.ToString(TimeSpan.FromMinutes(60))}</AutoDeleteOnIdle>" +
                                            $"<IsClientAffine>prop1</IsClientAffine>" +
                                            $"<ClientAffineProperties><ClientId>xyz</ClientId><IsDurable>false</IsDurable><IsShared>true</IsShared></ClientAffineProperties>" +
                                            $"<UnknownElement3>prop3</UnknownElement3>" +
                                            $"<UnknownElement4>prop4</UnknownElement4>" +
                                            $"</SubscriptionDescription>" +
                                            $"</content>" +
                                            $"</entry>";

        SubscriptionDescription subscriptionDesc = SubscriptionDescriptionExtensions.ParseFromContent("abcd", subscriptionDescriptionXml);

        Assert.NotNull(subscriptionDesc.UnknownProperties);
        XDocument doc = SubscriptionDescriptionExtensions.Serialize(subscriptionDesc);

        XName    subscriptionDescriptionElementName      = XName.Get("SubscriptionDescription", ManagementClientConstants.ServiceBusNamespace);
        XElement expectedSubscriptionDecriptionElement   = XElement.Parse(subscriptionDescriptionXml).Descendants(subscriptionDescriptionElementName).FirstOrDefault();
        XElement serializedSubscriptionDescritionElement = doc.Descendants(subscriptionDescriptionElementName).FirstOrDefault();
        XNode    expectedChildNode = expectedSubscriptionDecriptionElement.FirstNode;
        XNode    actualChildNode   = serializedSubscriptionDescritionElement.FirstNode;

        while (expectedChildNode != null)
        {
            Assert.NotNull(actualChildNode);
            Assert.True(XNode.DeepEquals(expectedChildNode, actualChildNode), $"SubscriptionDescrition parsing and serialization combo didn't work as expected. {expectedChildNode.ToString()}");
            expectedChildNode = expectedChildNode.NextNode;
            actualChildNode   = actualChildNode.NextNode;
        }
    }
Exemplo n.º 2
0
        public static Options UseAzureServiceBus(this Options options, AzureServiceBusTransportSettings settings)
        {
            if (!settings.ConnectionStrings.Any())
            {
                throw new InvalidOperationException(
                          $"No connection strings were set up in the {nameof(AzureServiceBusTransportSettings)} instance given to {nameof(UseAzureServiceBus)}.");
            }

            var connectionStringNumber = 0;

            foreach (var connectionString in settings.ConnectionStrings)
            {
                connectionStringNumber++;

                options.Services
                .AddSingleton <IAzureServiceBusInstance>(
                    sp => new AzureServiceBusInstance(
                        new MessageReceiver(
                            connectionString,
                            EntityNameHelper.FormatSubscriptionPath(
                                settings.SafeEffectiveTopicName,
                                SubscriptionDescriptionExtensions.SafeSubscriptionName(options.EndpointName))),
                        new TopicClient(
                            connectionString,
                            settings.SafeEffectiveTopicName)
                {
                    OperationTimeout = settings.SendTimeout
                },
                        settings,
                        sp.GetLoggerOrDefault <AzureServiceBusInstance>(),
                        connectionStringNumber));
            }

            options
            .Services
            .AddSingleton(settings)
            .AddSingleton <ISubscriptionInitialiser>(
                sp => new SubscriptionInitialiser(
                    settings,
                    sp.GetLoggerOrDefault <AzureServiceBusMessageSource>()))
            .AddSingleton(
                sp => new AzureServiceBusMessageSink(
                    sp.GetFailoverStrategyOrDefault(
                        settings.ConnectionStrings)))
            .AddSingleton(
                sp => new AzureServiceBusMessageSource(
                    settings,
                    sp.GetRequiredService <ISubscriptionInitialiser>(),
                    sp.GetServices <IAzureServiceBusInstance>(),
                    sp.GetRequiredService <ITypeMap>(),
                    sp.GetLoggerOrDefault <AzureServiceBusMessageSource>(),
                    sp.GetRequiredService <Options>().EndpointName))
            .AddSingleton <IMessageSink>(
                sp => sp.GetRequiredService <AzureServiceBusMessageSink>())
            .AddScoped <IMessageSource>(
                sp => sp.GetRequiredService <AzureServiceBusMessageSource>())
            .AddSingleton <NoFailoverStrategy>()
            .AddSingleton <ActiveActiveFailoverStrategy>()
            .AddSingleton <ActivePassiveFailoverStrategy>();

            return(options);
        }