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; } }
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); }