예제 #1
0
        public static void ConfigureSqsTransport(this TransportExtensions <SqsTransport> transportConfiguration, string queueNamePrefix = null)
        {
            transportConfiguration.ClientFactory(() => ClientFactory.CreateSqsClient());
            transportConfiguration.ClientFactory(() => ClientFactory.CreateSnsClient());
            if (queueNamePrefix != null)
            {
                transportConfiguration.QueueNamePrefix(queueNamePrefix);
            }

            var s3BucketName = EnvironmentHelper.GetEnvironmentVariable(S3BucketEnvironmentVariableName);

            if (!string.IsNullOrEmpty(S3BucketName))
            {
                transportConfiguration.S3(S3BucketName, "test");
            }
        }
        public async Task Determines_there_should_be_a_queue_with_same_name_as_endpointname()
        {
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            settings.Set(new Conventions());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            settings.SetDefault("NServiceBus.Routing.EndpointName", "sales");
            settings.SetDefault("NServiceBus.SharedQueue", "sales");

            extensions.NamespacePartitioning().AddNamespace(Name, Connectionstring);

            var definition = await DetermineResourcesToCreate(settings);

            Assert.AreEqual(1, definition.Entities.Count(ei => ei.Path == "sales" && ei.Type == EntityType.Queue && ei.Namespace.ConnectionString == Connectionstring));
        }
예제 #3
0
        public void SetUp()
        {
            settings = new SettingsHolder();
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.NamespacePartitioning().AddNamespace(PrimaryName, PrimaryConnectionString);
            extensions.NamespacePartitioning().AddNamespace(SecondaryName, SecondaryConnectionString);

            namespacePartitioningStrategy = new RoundRobinNamespacePartitioning(settings);

            // apply entity maximum lengths for addressing logic
            settings.SetDefault(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.QueuePathMaximumLength, 260);
            settings.SetDefault(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.TopicPathMaximumLength, 260);
            settings.SetDefault(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.SubscriptionNameMaximumLength, 50);
            settings.SetDefault(WellKnownConfigurationKeys.Topology.Addressing.Sanitization.RuleNameMaximumLength, 50);
        }
#pragma warning disable 618
        ITopologySectionManager SetupForwardingTopology(TransportPartsContainer container, string enpointname)
        {
            var settings = new SettingsHolder();

            container.Register(typeof(SettingsHolder), () => settings);
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            settings.SetDefault("NServiceBus.Routing.EndpointName", enpointname);
            extensions.NamespacePartitioning().AddNamespace("namespace1", AzureServiceBusConnectionString.Value);

            var topology = new ForwardingTopology(container);

            topology.Initialize(settings);

            return(container.Resolve <ITopologySectionManager>());
        }
예제 #5
0
        static void ConfigureConnection(TransportExtensions <SqlServerTransport> transport, TransportSettings transportSettings)
        {
            var builder = new DbConnectionStringBuilder
            {
                ConnectionString = transportSettings.ConnectionString
            };

            if (builder.TryGetValue(queueSchemaName, out var customSchema))
            {
                builder.Remove(queueSchemaName);

                transport.DefaultSchema((string)customSchema);
            }

            transport.ConnectionString(builder.ConnectionString);
        }
예제 #6
0
    public TransportConfigurationResult Configure(SettingsHolder settings, TransportTransactionMode transactionMode)
    {
        var sqsTransport = new SqsTransport();
        var sqsConfig    = new TransportExtensions <SqsTransport>(settings);

        sqsConfig.Region("ap-southeast-2")
        .QueueNamePrefix("TransportTest-")
        .S3BucketForLargeMessages("sqstransportmessages1337", "test")
        .NativeDeferral();

        return(new TransportConfigurationResult
        {
            TransportInfrastructure = sqsTransport.Initialize(settings, ""),
            PurgeInputQueueOnStartup = true
        });
    }
        public async Task Should_be_able_to_update_an_existing_queue_with_new_property_values_without_failing_on_readonly_properties()
        {
            var namespaceManager = new NamespaceManagerAdapter(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value));
            await namespaceManager.DeleteQueue("existingqueue").ConfigureAwait(false);

            await namespaceManager.CreateQueue(new QueueDescription("existingqueue")
            {
                LockDuration               = TimeSpan.FromSeconds(50),
                MaxSizeInMegabytes         = SizeInMegabytes.Size2048,
                RequiresDuplicateDetection = true,
                EnablePartitioning         = true,
                RequiresSession            = true
            });

            var queueDescription = await namespaceManager.GetQueue("existingqueue");

            // partitioned topics will have a size that is 16x the requested max
            Assert.AreEqual(2048 * 16, queueDescription.MaxSizeInMegabytes);
            Assert.AreEqual(TimeSpan.FromSeconds(50), queueDescription.LockDuration);
            Assert.IsTrue(queueDescription.EnablePartitioning);
            Assert.IsTrue(queueDescription.RequiresDuplicateDetection);

            var settings   = new DefaultConfigurationValues().Apply(new SettingsHolder());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.Queues().DescriptionFactory((queuePath, readOnlySettings) => new QueueDescription(queuePath)
            {
                LockDuration               = TimeSpan.FromSeconds(70),
                MaxSizeInMegabytes         = SizeInMegabytes.Size3072,
                RequiresDuplicateDetection = false,
                EnablePartitioning         = false,
                RequiresSession            = false,
            });

            var creator = new AzureServiceBusQueueCreator(settings);
            await creator.Create("existingqueue", namespaceManager);

            queueDescription = await namespaceManager.GetQueue("existingqueue");

            Assert.AreEqual(3072 * 16, queueDescription.MaxSizeInMegabytes);
            Assert.AreEqual(TimeSpan.FromSeconds(70), queueDescription.LockDuration);
            Assert.IsTrue(queueDescription.EnablePartitioning);
            Assert.IsTrue(queueDescription.RequiresDuplicateDetection);

            //cleanup
            await namespaceManager.DeleteQueue("existingqueue");
        }
예제 #8
0
        public static TransportExtensions <SqsTransport> ConfigureSqsTransport(this TransportExtensions <SqsTransport> transportConfiguration, string queueNamePrefix)
        {
            transportConfiguration
            .ClientFactory(CreateSQSClient)
            .QueueNamePrefix(queueNamePrefix)
            .PreTruncateQueueNamesForAcceptanceTests();

            var s3BucketName = EnvironmentHelper.GetEnvironmentVariable(S3BucketEnvironmentVariableName);

            if (!string.IsNullOrEmpty(s3BucketName))
            {
                var s3Configuration = transportConfiguration.S3(s3BucketName, "test");
                s3Configuration.ClientFactory(CreateS3Client);
            }

            return(transportConfiguration);
        }
예제 #9
0
        public EndpointConfigurationBuilder(string endpointName, string transportConnectionString)
        {
            _endpointConfiguration = new EndpointConfiguration(endpointName);

            // setup general
            _endpointConfiguration.UseSerialization <NewtonsoftSerializer>();
            _endpointConfiguration.EnableInstallers();

            // setup auditing
            _endpointConfiguration.SendFailedMessagesTo("error");
            _endpointConfiguration.AuditProcessedMessagesTo("audit");

            // setup transport
            _transportExtensions = _endpointConfiguration.UseTransport <RabbitMQTransport>();
            _transportExtensions.UseConventionalRoutingTopology();
            _transportExtensions.ConnectionString(transportConnectionString);
        }
        public void Determines_there_should_be_a_topic_with_same_name_as_endpointname_followed_by_dot_events()
        {
            var container = new TransportPartsContainer();

            var settings = new SettingsHolder();

            settings.Set <Conventions>(new Conventions());
            container.Register(typeof(SettingsHolder), () => settings);
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            settings.SetDefault("NServiceBus.Routing.EndpointName", "sales");
            extensions.NamespacePartitioning().AddNamespace(Name, Connectionstring);

            var definition = DetermineResourcesToCreate(settings, container);

            Assert.AreEqual(1, definition.Entities.Count(ei => ei.Path == "sales.events" && ei.Type == EntityType.Topic && ei.Namespace.ConnectionString == Connectionstring));
        }
        public async Task Should_fail_sanitization_for_invalid_endpoint_name(string reasonToFail, string endpointName)
        {
            var settings   = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            settings.SetDefault("NServiceBus.Routing.EndpointName", "sales");
            settings.SetDefault("NServiceBus.SharedQueue", "sales");

            extensions.NamespacePartitioning().AddNamespace(Name, Connectionstring);

            var topology = new ForwardingTransportInfrastructure(settings);
            await topology.Start();

            var sectionManager = topology.topologyManager;

            Assert.Throws <Exception>(() => sectionManager.DetermineQueuesToCreate(new QueueBindings(), endpointName), "Was expected to fail: " + reasonToFail);
        }
예제 #12
0
    public static void ConfigureASQ(this TransportExtensions <AzureStorageQueueTransport> extensions)
    {
        var connectionString = EnvironmentHelper.GetEnvironmentVariable("AzureStorageQueues.ConnectionString");

        extensions.ConnectionString(connectionString);

        var settings   = extensions.GetSettings();
        var serializer = Tuple.Create(new NewtonsoftSerializer() as SerializationDefinition, new SettingsHolder());

        settings.Set("MainSerializer", serializer);

        bool isMessageType(Type t) => t == typeof(MessageWrapper);

        var ctor = typeof(MessageMetadataRegistry).GetConstructor(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null, new[] { typeof(Func <Type, bool>) }, null);

        settings.Set <MessageMetadataRegistry>(ctor.Invoke(new object[] { (Func <Type, bool>)isMessageType }));
    }
예제 #13
0
        public async Task Should_upload_large_isolated_operations_request_to_s3()
        {
            var settings            = new SettingsHolder();
            var transportExtensions = new TransportExtensions <SqsTransport>(settings);

            transportExtensions.S3("someBucket", "somePrefix");

            var mockS3Client  = new MockS3Client();
            var mockSqsClient = new MockSqsClient();

            var transportConfiguration = new TransportConfiguration(settings);
            var dispatcher             = new MessageDispatcher(transportConfiguration, mockS3Client, mockSqsClient, null, new QueueCache(mockSqsClient, transportConfiguration), null);

            var transportOperations = new TransportOperations(
                new TransportOperation(
                    new OutgoingMessage(Guid.NewGuid().ToString(), new Dictionary <string, string>(), Encoding.Default.GetBytes(new string('x', 256 * 1024))),
                    new UnicastAddressTag("address1"),
                    DispatchConsistency.Isolated),
                new TransportOperation(
                    new OutgoingMessage(Guid.NewGuid().ToString(), new Dictionary <string, string>(), Encoding.Default.GetBytes(new string('x', 256 * 1024))),
                    new UnicastAddressTag("address2"),
                    DispatchConsistency.Isolated),
                new TransportOperation( /* Crazy long message id will cause the message to go over limits because attributes count as well */
                    new OutgoingMessage(new string('x', 256 * 1024), new Dictionary <string, string>(), Encoding.Default.GetBytes("{}")),
                    new UnicastAddressTag("address2"),
                    DispatchConsistency.Isolated));

            var transportTransaction = new TransportTransaction();
            var context = new ContextBag();

            await dispatcher.Dispatch(transportOperations, transportTransaction, context);

            Assert.AreEqual(3, mockSqsClient.RequestsSent.Count);
            Assert.AreEqual(3, mockS3Client.PutObjectRequestsSent.Count);

            var firstUpload  = mockS3Client.PutObjectRequestsSent.ElementAt(0);
            var secondUpload = mockS3Client.PutObjectRequestsSent.ElementAt(1);
            var thirdUpload  = mockS3Client.PutObjectRequestsSent.ElementAt(2);

            Assert.AreEqual("someBucket", firstUpload.BucketName);
            Assert.AreEqual("someBucket", secondUpload.BucketName);
            Assert.AreEqual("someBucket", thirdUpload.BucketName);
            StringAssert.Contains($@"""Body"":"""",""S3BodyKey"":""{firstUpload.Key}", mockSqsClient.RequestsSent.ElementAt(0).MessageBody);
            StringAssert.Contains($@"""Body"":"""",""S3BodyKey"":""{secondUpload.Key}", mockSqsClient.RequestsSent.ElementAt(1).MessageBody);
            StringAssert.Contains($@"""Body"":"""",""S3BodyKey"":""{thirdUpload.Key}", mockSqsClient.RequestsSent.ElementAt(2).MessageBody);
        }
        public async Task Applies_user_defined_connectivity_settings()
        {
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.MessageSenders()
            .RetryPolicy(RetryPolicy.NoRetry);

            var factory = new InterceptedMessagingFactory();

            var creator = new MessageSenderCreator(new InterceptedMessagingFactoryFactory(factory), settings);

            var sender = await creator.Create("myqueue", null, AzureServiceBusConnectionString.Value);

            Assert.IsInstanceOf <NoRetry>(sender.RetryPolicy);
        }
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services
            .AddMvcCore()
            .AddCors()
            .AddJsonFormatters()
            .AddApiExplorer()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services
            .AddSignalR();
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });
            services.AddSingleton <IEquipmentRepository, EquipmentRepository>();
            services.AddScoped <EquipmentFilter>();
            services.AddSingleton(serviceProvider => _endpoint);

            var endpointConfiguration = new EndpointConfiguration("Bondora.ConstructionEquipmentRental.Service");

            // It's used for development, for real case we should use any real transport (RabbitMQ and so on).
            TransportExtensions <LearningTransport> transport = endpointConfiguration.UseTransport <LearningTransport>();

            UpdateableServiceProvider container = null;

            endpointConfiguration.UseContainer <ServicesBuilder>(customizations =>
            {
                customizations.ExistingServices(services);
                customizations.ServiceProviderFactory(serviceCollection =>
                {
                    container = new UpdateableServiceProvider(serviceCollection);
                    return(container);
                });
            });

            RoutingSettings <LearningTransport> routing = transport.Routing();

            routing.RouteToEndpoint(
                assembly: typeof(GetInvoiceCommand).Assembly,
                destination: "Bondora.ConstructionEquipmentRental.Billing");

            _endpoint = Endpoint.Start(endpointConfiguration).GetAwaiter().GetResult();

            return(container);
        }
예제 #16
0
        private static void ConfigureMessageRouting(TransportExtensions <SqsTransport> transport)
        {
            var routing = transport.Routing();

            routing.RouteToEndpoint(
                messageType: typeof(ProcessPayment)
                , destination: "Example.PaymentSaga"
                );

            routing.RouteToEndpoint(
                messageType: typeof(MakePayment)
                , destination: "Example.PaymentProcessorWorker"
                );

            routing.RegisterPublisher(
                eventType: typeof(ICompletedMakePayment),
                publisherEndpoint: "Example.PaymentProcessorWorker");
        }
        public async Task Determines_the_namespace_from_partitioning_strategy()
        {
            var settings = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());

            settings.Set(new Conventions());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            settings.SetDefault("NServiceBus.Routing.EndpointName", "sales");
            settings.SetDefault("NServiceBus.SharedQueue", "sales");

            extensions.NamespacePartitioning().AddNamespace(Name, Connectionstring);

            var definition = await DetermineResourcesToCreate(settings);

            var namespaceInfo = new RuntimeNamespaceInfo(Name, Connectionstring);

            Assert.IsTrue(definition.Namespaces.Any(nsi => nsi == namespaceInfo));
        }
        public static void ApplyConnectionString(this TransportExtensions <RabbitMQTransport> transport, string connectionString)
        {
            var builder = new DbConnectionStringBuilder {
                ConnectionString = connectionString
            };

            if (builder.GetBooleanValue("DisableRemoteCertificateValidation"))
            {
                transport.DisableRemoteCertificateValidation();
            }

            if (builder.GetBooleanValue("UseExternalAuthMechanism"))
            {
                transport.UseExternalAuthMechanism();
            }

            transport.ConnectionString(connectionString);
        }
예제 #19
0
        public async Task Should_set_MaxSizeInMegabytes_on_created_entity()
        {
            var namespaceManager = new NamespaceManagerAdapter(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value));

            var settings   = new DefaultConfigurationValues().Apply(new SettingsHolder());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.Topics().MaxSizeInMegabytes(SizeInMegabytes.Size4096);

            var          creator   = new AzureServiceBusTopicCreator(settings);
            const string topicPath = "mytopic10";
            await namespaceManager.DeleteTopic(topicPath);

            await creator.Create(topicPath, namespaceManager);

            var foundTopic = await namespaceManager.GetTopic(topicPath);

            Assert.AreEqual(4096, foundTopic.MaxSizeInMegabytes);
        }
예제 #20
0
        public async Task Should_set_SupportOrdering_on_created_entity()
        {
            var namespaceManager = new NamespaceManagerAdapter(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value));

            var settings   = new DefaultConfigurationValues().Apply(new SettingsHolder());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.Topics().SupportOrdering(true);

            var          creator   = new AzureServiceBusTopicCreator(settings);
            const string topicPath = "mytopic12";
            await namespaceManager.DeleteTopic(topicPath);

            await creator.Create(topicPath, namespaceManager);

            var foundTopic = await namespaceManager.GetTopic(topicPath);

            Assert.IsTrue(foundTopic.SupportOrdering);
        }
예제 #21
0
        void SubscribeRouting(TransportExtensions <MsmqTransport> transportExtensions)
        {
            #region Routing-RegisterPublisher

            var routing = transportExtensions.Routing();
            routing.RegisterPublisher(
                assembly: typeof(OrderAccepted).Assembly,
                publisherEndpoint: "Sales");

            routing.RegisterPublisher(
                assembly: typeof(OrderAccepted).Assembly,
                @namespace: "PriorityMessages",
                publisherEndpoint: "Preferred");

            routing.RegisterPublisher(
                eventType: typeof(OrderSent),
                publisherEndpoint: "Sending");
            #endregion
        }
        ITopologySectionManager SetupEndpointOrientedTopologyWithFailoverNamespace(TransportPartsContainer container, string enpointname)
        {
            var settings = new SettingsHolder();

            settings.Set <Conventions>(new Conventions());
            container.Register(typeof(SettingsHolder), () => settings);
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            settings.SetDefault("NServiceBus.Routing.EndpointName", enpointname);
            extensions.NamespacePartitioning().AddNamespace("namespace1", AzureServiceBusConnectionString.Value);
            extensions.NamespacePartitioning().AddNamespace("namespace2", AzureServiceBusConnectionString.Fallback);
            extensions.NamespacePartitioning().UseStrategy <FailOverNamespacePartitioning>();

            var topology = new EndpointOrientedTopology(container);

            topology.Initialize(settings);

            return(container.Resolve <ITopologySectionManager>());
        }
        public async Task Properly_sets_SupportOrdering_on_the_created_entity()
        {
            var namespaceManager = new NamespaceManagerAdapter(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value));

            var settings   = new DefaultConfigurationValues().Apply(new SettingsHolder());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.Queues().SupportOrdering(true);

            var creator = new AzureServiceBusQueueCreator(settings);

            await creator.Create("myqueue", namespaceManager);

            var real = await namespaceManager.GetQueue("myqueue");

            Assert.IsTrue(real.SupportOrdering);

            //cleanup
            await namespaceManager.DeleteQueue("myqueue");
        }
        public async Task Properly_sets_DefaultMessageTimeToLive_on_the_created_entity()
        {
            var namespaceManager = new NamespaceManagerAdapter(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value));

            var settings   = new DefaultConfigurationValues().Apply(new SettingsHolder());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.Queues().DefaultMessageTimeToLive(TimeSpan.FromDays(1));

            var creator = new AzureServiceBusQueueCreator(settings);

            await creator.Create("myqueue", namespaceManager);

            var real = await namespaceManager.GetQueue("myqueue");

            Assert.AreEqual(TimeSpan.FromDays(1), real.DefaultMessageTimeToLive);

            //cleanup
            await namespaceManager.DeleteQueue("myqueue");
        }
        public async Task Uses_queue_description_when_provided_by_user()
        {
            var settings         = new DefaultConfigurationValues().Apply(new SettingsHolder());
            var extensions       = new TransportExtensions <AzureServiceBusTransport>(settings);
            var namespaceManager = new NamespaceManagerAdapter(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value));

            var descriptionToUse = new QueueDescription("myqueue");

            extensions.Queues().DescriptionFactory((name, s) => descriptionToUse);

            var creator = new AzureServiceBusQueueCreator(settings);

            var description = await creator.Create("myqueue", namespaceManager);

            Assert.IsTrue(await namespaceManager.QueueExists("myqueue"));
            Assert.AreEqual(descriptionToUse, description);

            //cleanup
            await namespaceManager.DeleteQueue("myqueue");
        }
        public async Task Properly_sets_EnableExpress_on_the_created_entity_that_qualifies_condition()
        {
            var namespaceManager = new NamespaceManagerAdapter(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value));

            var settings   = new DefaultConfigurationValues().Apply(new SettingsHolder());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.Queues().EnableExpress(name => name == "myqueue", true);

            var creator = new AzureServiceBusQueueCreator(settings);

            await creator.Create("myqueue", namespaceManager);

            var real = await namespaceManager.GetQueue("myqueue");

            Assert.IsTrue(real.EnableExpress, "Queue should be marked as express, but it wasn't.");

            //cleanup
            await namespaceManager.DeleteQueue("myqueue");
        }
예제 #27
0
    static void Configure(TransportExtensions <TestTransport> transportConfig, string brokerId)
    {
        var testRunId = TestContext.CurrentContext.Test.ID;

        string tempDir;

        if (Environment.OSVersion.Platform == PlatformID.Win32NT)
        {
            //can't use bin dir since that will be too long on the build agents
            tempDir = @"c:\temp";
        }
        else
        {
            tempDir = Path.GetTempPath();
        }

        var storageDir = Path.Combine(tempDir, testRunId, brokerId);

        transportConfig.StorageDirectory(storageDir);
    }
        public async Task Should_properly_set_EnableDeadLetteringOnMessageExpiration_on_the_created_entity()
        {
            var namespaceManager = new NamespaceManagerAdapterInternal(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value));

            var settings   = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.UseForwardingTopology().Subscriptions().EnableDeadLetteringOnMessageExpiration(true);

            var creator = new AzureServiceBusForwardingSubscriptionCreator(settings.Get <TopologySettings>().SubscriptionSettings);

            const string subscriptionName = "endpoint7";
            await creator.Create(topicPath, subscriptionName, metadata, sqlFilter, namespaceManager, forwardToQueue);

            var foundDescription = await namespaceManager.GetSubscription(topicPath, subscriptionName);

            Assert.IsTrue(foundDescription.EnableDeadLetteringOnMessageExpiration);

            await namespaceManager.DeleteSubscription(new SubscriptionDescription(topicPath, subscriptionName));
        }
        public async Task Should_properly_set_EnableBatchedOperations_on_the_created_entity()
        {
            var namespaceManager = new NamespaceManagerAdapterInternal(NamespaceManager.CreateFromConnectionString(AzureServiceBusConnectionString.Value), AzureServiceBusConnectionString.Value);

            var settings   = DefaultConfigurationValues.Apply(SettingsHolderFactory.BuildWithSerializer());
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            extensions.Subscriptions().EnableBatchedOperations(false);

            var creator = new AzureServiceBusSubscriptionCreator(settings.Get <TopologySettings>().SubscriptionSettings);

            const string subscriptionName = "sub5";
            await creator.Create(topicPath, subscriptionName, metadata, sqlFilter, namespaceManager);

            var foundDescription = await namespaceManager.GetSubscription(topicPath, subscriptionName);

            Assert.IsFalse(foundDescription.EnableBatchedOperations);

            await namespaceManager.DeleteSubscription(new SubscriptionDescription(topicPath, subscriptionName));
        }
        public void Should_fail_sanitization_for_invalid_endpoint_name(string reasonToFail, string endpointName)
        {
            var container = new TransportPartsContainer();

            var settings = new SettingsHolder();

            container.Register(typeof(SettingsHolder), () => settings);
            var extensions = new TransportExtensions <AzureServiceBusTransport>(settings);

            settings.SetDefault("NServiceBus.Routing.EndpointName", endpointName);
            extensions.NamespacePartitioning().AddNamespace(Name, Connectionstring);

            var topology = new ForwardingTopology(container);

            topology.Initialize(settings);

            var sectionManager = container.Resolve <ITopologySectionManager>();

            Assert.Throws <Exception>(() => sectionManager.DetermineResourcesToCreate(new QueueBindings()), "Was expected to fail: " + reasonToFail);
        }