Exemplo n.º 1
0
        public async Task It_should_deliver_the_message_to_both_subscribers()
        {
            var result = await Scenario.Define <Context>()
                         .WithRouter("Router", (c, cfg) =>
            {
                cfg.AddInterface <TestTransport>("Left", t => t.BrokerAlpha()).InMemorySubscriptions();
                var leftIface = cfg.AddInterface <AzureServiceBusTransport>("Right", t =>
                {
                    var connString = Environment.GetEnvironmentVariable("AzureServiceBus.ConnectionString");
                    t.ConnectionString(connString);

                    var topology = t.UseEndpointOrientedTopology();
                    topology.RegisterPublisher(typeof(MyAsbEvent), Conventions.EndpointNamingConvention(typeof(Publisher)));
                });
                leftIface.LimitMessageProcessingConcurrencyTo(1);     //To ensure when tracer arrives the subscribe request has already been processed.;
                cfg.AddRule(_ => new SuppressTransactionScopeRule());
                cfg.UseStaticRoutingProtocol().AddForwardRoute("Left", "Right");
            })
                         .WithEndpoint <Publisher>(c => c.When(x => x.EventSubscribed, s => s.Publish(new MyAsbEvent())))
                         .WithEndpoint <Subscriber>(c => c.When(async s =>
            {
                await s.Subscribe <MyAsbEvent>().ConfigureAwait(false);
                await s.Send(new TracerMessage()).ConfigureAwait(false);
            }))
                         .Done(c => c.EventDelivered)
                         .Run();

            Assert.IsTrue(result.EventDelivered);
        }
        void ConfigureRouter(Context c, RouterConfiguration cfg)
        {
            cfg.AddInterface <TestTransport>("Left", t => t.BrokerAlpha()).EnableMessageDrivenPublishSubscribe(subscriptionStorage);
            var leftIface = cfg.AddInterface <AzureServiceBusTransport>("Right", t =>
            {
                var connString = Environment.GetEnvironmentVariable("AzureServiceBus.ConnectionString");
                t.ConnectionString(connString);
                var settings = t.GetSettings();

                var builder = new ConventionsBuilder(settings);
                builder.DefiningEventsAs(EventConvention);
                settings.Set <NServiceBus.Conventions>(builder.Conventions);

                var topology = t.UseEndpointOrientedTopology();
                topology.EnableMigrationToForwardingTopology();
                topology.RegisterPublisher(typeof(MyAsbEvent), Conventions.EndpointNamingConvention(typeof(Publisher)));

                var serializer = Tuple.Create(new NewtonsoftSerializer() as SerializationDefinition, new SettingsHolder());
                settings.Set("MainSerializer", serializer);
            });

            leftIface.LimitMessageProcessingConcurrencyTo(1); //To ensure when tracer arrives the subscribe request has already been processed.;
            cfg.AddRule(_ => new SuppressTransactionScopeRule());
            cfg.UseStaticRoutingProtocol().AddForwardRoute("Left", "Right");
        }
 static void PreventInconclusiveTestsFromRunning(string endpointName)
 {
     if (endpointName == Conventions.EndpointNamingConvention(typeof(When_publishing_from_sendonly.SendOnlyPublisher)))
     {
         Assert.Inconclusive("Test is not using endpoint naming conventions in hardcoded subscription storage. Should be fixed in core vNext.");
     }
 }
 public HardcodedSubscriptionManager()
 {
     addressTask = Task.FromResult(new[]
     {
         new Unicast.Subscriptions.MessageDrivenSubscriptions.Subscriber(Conventions.EndpointNamingConvention(typeof(Subscriber)), null)
     }.AsEnumerable());
 }
 public Publisher()
 {
     EndpointSetup <DefaultPublisher>(b => b.OnEndpointSubscribed <Context>((s, context) =>
     {
         if (s.SubscriberEndpoint.Contains(Conventions.EndpointNamingConvention(typeof(Subscriber1))))
         {
             context.Subscriber1Subscribed = true;
         }
     }));
 }
Exemplo n.º 6
0
 public Endpoint()
 {
     EndpointSetup <DefaultServer>(config =>
     {
         config.EnableFeature <TimeoutManager>();
         config.UsePersistence <FakeTimeoutPersistence>();
         config.SendFailedMessagesTo(Conventions.EndpointNamingConvention(typeof(Endpoint)));
         config.RegisterComponents(c => c.ConfigureComponent <FakeTimeoutStorage>(DependencyLifecycle.SingleInstance));
         config.Pipeline.Register <BehaviorThatLogsControlMessageDelivery.Registration>();
     });
 }
Exemplo n.º 7
0
 public Publisher1()
 {
     EndpointSetup <DefaultPublisher>(b => b.OnEndpointSubscribed <Context>((s, context) =>
     {
         context.AddTrace($"{Conventions.EndpointNamingConvention(typeof(Publisher1))} SubscriberEndpoint={s.SubscriberEndpoint}");
         if (s.SubscriberEndpoint.Contains(Conventions.EndpointNamingConvention(typeof(Subscriber1))))
         {
             context.SubscribedToPublisher1 = true;
         }
     }));
 }
 public Publisher3()
 {
     EndpointSetup <DefaultPublisher>(b => b.OnEndpointSubscribed <Context>((s, context) =>
     {
         var subscriber3 = Conventions.EndpointNamingConvention(typeof(Subscriber3));
         if (s.SubscriberEndpoint.Contains(subscriber3))
         {
             context.AddTrace($"{subscriber3} is now subscribed");
             context.Subscriber3Subscribed = true;
         }
     }));
 }
Exemplo n.º 9
0
 public Publisher()
 {
     EndpointSetup <DefaultPublisher>(c =>
     {
         c.OnEndpointSubscribed <Context>((s, context) =>
         {
             if (s.SubscriberEndpoint.Contains(Conventions.EndpointNamingConvention(typeof(Subscriber))))
             {
                 context.SubscribedMessageDriven = true;
             }
         });
     }).IncludeType <TestingInMemorySubscriptionPersistence>();
 }
 public Publisher(string connectionString, bool supportsPublishSubscribe)
 {
     EndpointSetup(new CustomizedServer(_connectionString, supportsPublishSubscribe), (c, rd) =>
     {
         c.OnEndpointSubscribed <Context>((s, context) =>
         {
             if (s.SubscriberEndpoint.Contains(Conventions.EndpointNamingConvention(typeof(Subscriber))))
             {
                 context.SubscribedMessageDriven = true;
             }
         });
     }).IncludeType <TestingInMemorySubscriptionPersistence>();
 }
 public Endpoint()
 {
     EndpointSetup <DefaultServer>((config, runDescriptor) =>
     {
         config.EnableFeature <TimeoutManager>();
         config.UsePersistence <FakeTimeoutPersistence>();
         config.SendFailedMessagesTo(Conventions.EndpointNamingConvention(typeof(Endpoint)));
         config.RegisterComponents(c => c.ConfigureComponent <FakeTimeoutStorage>(DependencyLifecycle.SingleInstance));
         config.Pipeline.Register <BehaviorThatLogsControlMessageDelivery.Registration>();
         config.LimitMessageProcessingConcurrencyTo(1);
         config.UseTransport(runDescriptor.GetTransportType()).Transactions(TransportTransactionMode.TransactionScope);
     });
 }
Exemplo n.º 12
0
 public Publisher()
 {
     EndpointSetup <DefaultPublisher>((c, r) =>
     {
         c.Pipeline.Register("EventTypeSpy", new EventTypeSpy((Context)r.ScenarioContext), "EventTypeSpy");
         c.OnEndpointSubscribed <Context>((s, context) =>
         {
             if (s.SubscriberEndpoint.Contains(Conventions.EndpointNamingConvention(typeof(Subscriber))))
             {
                 context.Subscribed = true;
             }
         });
     });
 }
Exemplo n.º 13
0
 public Publisher()
 {
     EndpointSetup <DefaultPublisher>(c =>
     {
         c.Conventions().DefiningEventsAs(t => t.Namespace != null && t.Name.EndsWith("Event"));
         c.Pipeline.Register("EventTypeSpy", typeof(EventTypeSpy), "EventTypeSpy");
         c.OnEndpointSubscribed <Context>((s, context) =>
         {
             if (s.SubscriberEndpoint.Contains(Conventions.EndpointNamingConvention(typeof(Subscriber))))
             {
                 context.Subscribed = true;
             }
         });
     }).ExcludeType <MyEvent>(); // remove that type from assembly scanning to simulate what would happen with true unobtrusive mode
 }
 public Endpoint()
 {
     EndpointSetup <DefaultServer>(config =>
     {
         config.EnableFeature <TimeoutManager>();
         config.UsePersistence <FakeTimeoutPersistence>();
         config.SendFailedMessagesTo(Conventions.EndpointNamingConvention(typeof(Endpoint)));
         config.RegisterComponents(c =>
         {
             c.AddSingleton <FakeTimeoutStorage>();
             c.AddSingleton <IPersistTimeouts>(sp => sp.GetRequiredService <FakeTimeoutStorage>());
             c.AddSingleton <IQueryTimeouts>(sp => sp.GetRequiredService <FakeTimeoutStorage>());
         });
         config.Pipeline.Register <BehaviorThatLogsControlMessageDelivery.Registration>();
     });
 }
Exemplo n.º 15
0
        void ConfigureRouter(Context c, RouterConfiguration cfg)
        {
            cfg.AddInterface <TestTransport>("Left", t => t.BrokerAlpha()).EnableMessageDrivenPublishSubscribe(subscriptionStorage);
            var leftIface = cfg.AddInterface <AzureServiceBusTransport>("Right", t =>
            {
                var connString = Environment.GetEnvironmentVariable("AzureServiceBus.ConnectionString");
                t.ConnectionString(connString);

                var topology = t.UseEndpointOrientedTopology();
                topology.EnableMigrationToForwardingTopology();
                topology.RegisterPublisher(typeof(MyAsbEvent), Conventions.EndpointNamingConvention(typeof(Publisher)));
            });

            leftIface.LimitMessageProcessingConcurrencyTo(1); //To ensure when tracer arrives the subscribe request has already been processed.;
            cfg.AddRule(_ => new SuppressTransactionScopeRule());
            cfg.UseStaticRoutingProtocol().AddForwardRoute("Left", "Right");
        }
        public async Task Should_receive_event()
        {
            Requires.EndpointOrientedTopology();

            var context = await Scenario.Define <Context>()
                          // Publish event only when it was signaled that events went out
                          .WithEndpoint <Publisher>(b =>
            {
                b.CustomConfig(c =>
                {
                    var transport = c.ConfigureAzureServiceBus();
                    transport.NamespacePartitioning().AddNamespace("publisherNamespace", publisherConnectionString);
                    transport.UseEndpointOrientedTopology();
                })
                .When(c => c.ReceiverSubscribedToEvents, async messageSession =>
                {
                    await messageSession.Publish <MyEvent>();
                });
            })
                          .WithEndpoint <Subscriber>(b =>
            {
                b.CustomConfig(c =>
                {
                    var transport = c.ConfigureAzureServiceBus();
                    transport.NamespacePartitioning().AddNamespace("subscriberNamespace", subscriberConnectionString);
                    var namespaceInfo = transport.NamespaceRouting().AddNamespace("publisherNamespace", publisherConnectionString);
                    namespaceInfo.RegisteredEndpoints.Add(Conventions.EndpointNamingConvention(typeof(Publisher)));
                    transport.UseEndpointOrientedTopology()
                    .RegisterPublisher(typeof(MyEvent), Conventions.EndpointNamingConvention(typeof(Publisher)));
                })
                .When(async(session, c) =>
                {
                    await session.Subscribe <MyEvent>();

                    c.ReceiverSubscribedToEvents = true;
                });
            })
                          .Done(ctx => ctx.SubscriberGotTheEvent)
                          .Run();

            Assert.That(context.SubscriberGotTheEvent, Is.True, "Should receive the event");
        }
Exemplo n.º 17
0
 public Publisher()
 {
     EndpointSetup <DefaultPublisher>(b =>
     {
         b.OnEndpointSubscribed <Context>((s, context) =>
         {
             if (s.SubscriberEndpoint.Contains(Conventions.EndpointNamingConvention(typeof(Subscriber))))
             {
                 if (s.MessageType == typeof(IEventA).AssemblyQualifiedName)
                 {
                     context.EventASubscribed = true;
                 }
                 if (s.MessageType == typeof(IEventB).AssemblyQualifiedName)
                 {
                     context.EventBSubscribed = true;
                 }
             }
         });
     });
 }
            public Publisher()
            {
                EndpointSetup <DefaultPublisher>(b =>
                {
                    b.OnEndpointSubscribed <Context>((s, context) =>
                    {
                        var subscriber1 = Conventions.EndpointNamingConvention(typeof(Subscriber1));
                        if (s.SubscriberEndpoint.Contains(subscriber1))
                        {
                            context.Subscriber1Subscribed = true;
                            context.AddTrace($"{subscriber1} is now subscribed");
                        }

                        var subscriber2 = Conventions.EndpointNamingConvention(typeof(Subscriber2));
                        if (s.SubscriberEndpoint.Contains(subscriber2))
                        {
                            context.AddTrace($"{subscriber2} is now subscribed");
                            context.Subscriber2Subscribed = true;
                        }
                    });
                    b.DisableFeature <AutoSubscribe>();
                });
            }
        public async Task Should_reply_to_configured_return_address()
        {
            var ctx = await Scenario.Define <Context>()
                      .WithEndpoint <SendingEndpoint>(c => c
                                                      .CustomConfig(b => b.OverridePublicReturnAddress(Conventions.EndpointNamingConvention(typeof(OtherEndpoint))))
                                                      .When(b => b.Send(new MyMessage())))
                      .WithEndpoint <ReplyingEndpoint>()
                      .WithEndpoint <OtherEndpoint>()
                      .Done(c => c.OtherEndpointGotResponse)
                      .Run();

            Assert.IsTrue(ctx.OtherEndpointGotResponse);
            Assert.IsFalse(ctx.SendingEndpointGotResponse);
        }