public void Test_ServiceBusQueueMessenger_UpdateReceiverChangesSubscription() { // Arrange var topicOne = GetTopicMessenger("updatereceiverreceiverone", "subone"); var topicTwo = GetTopicMessenger("updatereceiverreceivertwo", "subtwo"); ((ServiceBusManager)topicOne.EntityManager).EntityFullPurge("updatereceiverreceiverone", true).GetAwaiter().GetResult(); ((ServiceBusManager)topicTwo.EntityManager).EntityFullPurge("updatereceiverreceivertwo", true).GetAwaiter().GetResult(); var testMessageOne = "Message One"; var testMessageTwo = "Message Two"; // Act/Assert // Send the message to initiate receive. topicOne.Send(testMessageOne).GetAwaiter().GetResult(); topicTwo.Send(testMessageTwo).GetAwaiter().GetResult(); Thread.Sleep(2000); var config = new ConfigurationBuilder().AddJsonFile("appSettings.json").Build(); var testMessenger = new ServiceBusMessenger(new ConnectionConfig() { ConnectionString = config.GetValue <string>("ConnectionString"), Receiver = new ReceiverSetup() { EntityType = EntityType.Topic, EntityName = "updatereceiverreceiverone", EntitySubscriptionName = "subone" } }); var receivedMessageOne = testMessenger.ReceiveOne <string>(); var count = 0; while (receivedMessageOne == null && count < 10) { receivedMessageOne = testMessenger.ReceiveOne <string>(); count++; } Assert.Equal(receivedMessageOne, testMessageOne); testMessenger.Complete(receivedMessageOne).GetAwaiter().GetResult(); //Update receiver to listen to the second subscription testMessenger.UpdateReceiver("updatereceiverreceivertwo", "subtwo").GetAwaiter().GetResult(); var receivedMessageTwo = testMessenger.ReceiveOne <string>(); count = 0; while (receivedMessageTwo == null && count < 10) { receivedMessageTwo = testMessenger.ReceiveOne <string>(); count++; } Assert.Equal(receivedMessageTwo, testMessageTwo); testMessenger.Complete(receivedMessageTwo).GetAwaiter().GetResult(); }
private async Task CreateStringTestMessages(ServiceBusMessenger messenger, int numberToCreate) { var messages = new List <string>(); for (int i = 0; i < numberToCreate; i++) { messages.Add(Lorem.GetSentence()); } await messenger.SendBatch(messages); }
/// <summary> /// Adds the service bus singleton. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="services">The services.</param> /// <param name="config">The configuration.</param> /// <returns>IServiceCollection.</returns> public static IServiceCollection AddServiceBusSingleton <T>(this IServiceCollection services, ServicePrincipleConfig config) where T : IMessageOperations { var serviceBusInstance = new ServiceBusMessenger(config); services.AddSingleton(typeof(T), serviceBusInstance); services.AddFactoryIfNotAdded <IMessenger>(); services.AddFactoryIfNotAdded <IReactiveMessenger>(); return(services); }
public async Task ServiceBusTopicMessenger_ReceiveSetupError() { // Arrange var config = new ConfigurationBuilder().AddJsonFile("appSettings.json").Build(); var testMessenger = new ServiceBusMessenger(new ConnectionConfig() { ConnectionString = config.GetValue <string>("ConnectionString"), }); // Act/Assert Assert.Throws <InvalidOperationException>(() => testMessenger.Receive <string>((msg) => { }, (err) => { })); Assert.Null(testMessenger.ReceiveOne <string>()); await Assert.ThrowsAsync <NullReferenceException>(() => testMessenger.Send("test")); }
/// <summary> /// Add service bus singleton of type T, using connection string configuration. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="services">Service collection to extend</param> /// <param name="key">Key to identify the named instance of the service bus singleton.</param> /// <param name="config">The connection string configuration</param> /// <returns>Modified service collection with the IReactiveMessenger, IMessenger and NamedInstanceFactory{T} configured.</returns> public static IServiceCollection AddServiceBusSingletonNamed <T>(this IServiceCollection services, string key, ConnectionConfig config) where T : IMessageOperations { var serviceBusInstance = new ServiceBusMessenger(config); if (!key.IsNullOrEmpty()) { serviceBusInstance.Name = key; } services.AddSingleton(typeof(T), serviceBusInstance); services.AddFactoryIfNotAdded <IMessenger>(); services.AddFactoryIfNotAdded <IReactiveMessenger>(); return(services); }
public void Test_ServiceBusMessenger_GetAccessTokenUrlNotImplemented() { // Arrange/Act var msiConfig = new MsiConfig() { SharedAccessPolicyName = "" }; var connectionConfig = new ConnectionConfig(); var spConfig = new ServicePrincipleConfig() { SharedAccessPolicyName = "TestPolicy", InstanceName = "testSBInstance", AppId = "TestAppId", AppSecret = "TestAppSecret", TenantId = "TestTenantId", SubscriptionId = "FakeSubscriptionId" }; var serviceBus = new ServiceBusMessenger(spConfig); // Assert serviceBus.ToString().Should().NotBeNullOrEmpty(); serviceBus.Name.Should().Be("testSBInstance"); (serviceBus.Config as ServicePrincipleConfig).Should().NotBeNull(); }
public void Test_ServiceBusConnector_ServiceDispose() { // Assert var messenger = new ServiceBusMessenger(new ConnectionConfig { ConnectionString = "test.test" }); var connector = new ServiceBusConnector <object>(new ServiceBusManager("", new ConnectionConfig()), new Subject <object>(), null); // Act - call dispose. messenger.Dispose(); connector.Dispose(); // Called a second time to test branch. messenger.Dispose(); connector.Dispose(); // Assert - disposed as expected. messenger.Disposed.Should().BeTrue(); connector.Disposed.Should().BeTrue(); }
/// <summary> /// Add service bus singleton of type T, using named properties (as opposed to passing MsiConfig/ServicePrincipleConfig etc). /// Will automatically use MsiConfiguration. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="services">Service collection to extend</param> /// <param name="key">Key to identify the named instance of the service bus singleton.</param> /// <param name="instanceName">Instance name of service bus.</param> /// <param name="tenantId">Tenant Id where service bus exists.</param> /// <param name="subscriptionId">Subscription within the tenancy to use for the service bus instance.</param> /// <param name="receiver">Receiver configuration (if any).</param> /// <param name="sender">Sender configuration (if any).</param> /// <param name="enableAutoBackoff">Backoff mechanism enabled (only works when both sender and receiver is configured).</param> /// <returns>Modified service collection with the IReactiveMessenger, IMessenger and NamedInstanceFactory{T} configured.</returns> public static IServiceCollection AddServiceBusSingletonNamed <T>(this IServiceCollection services, string key, string instanceName, string tenantId, string subscriptionId, ReceiverSetup receiver = null, SenderSetup sender = null, bool enableAutoBackoff = false) where T : IMessageOperations { var serviceBusInstance = new ServiceBusMessenger(new MsiConfig { InstanceName = instanceName, TenantId = tenantId, SubscriptionId = subscriptionId, Receiver = receiver, Sender = sender, EnableAutobackOff = enableAutoBackoff }); if (!key.IsNullOrEmpty()) { serviceBusInstance.Name = key; } services.AddSingleton(typeof(T), serviceBusInstance); services.AddFactoryIfNotAdded <IMessenger>(); services.AddFactoryIfNotAdded <IReactiveMessenger>(); return(services); }
public void Test_ServiceBusQueueMessenger_UpdateReceiverChangesSubscriptionWithDifferentType() { // Arrange var topicOne = GetTopicMessenger("updatereceiverreceiverone1", "subone1"); var topicTwo = GetTopicMessenger("updatereceiverreceivertwo2", "subtwo2"); ((ServiceBusManager)topicOne.EntityManager).EntityFullPurge("updatereceiverreceiverone1", true).GetAwaiter().GetResult(); ((ServiceBusManager)topicTwo.EntityManager).EntityFullPurge("updatereceiverreceivertwo2", true).GetAwaiter().GetResult(); var testMessageOne = "Message One"; var testMessageTwo = new TestProps() { Test1 = 2, Test2 = true, Version = "new" }; // Act/Assert // Send the message to initiate receive. topicOne.Send(testMessageOne).GetAwaiter().GetResult(); topicTwo.Send(testMessageTwo).GetAwaiter().GetResult(); Thread.Sleep(2000); var config = new ConfigurationBuilder().AddJsonFile("appSettings.json").Build(); var testMessenger = new ServiceBusMessenger(new ConnectionConfig() { ConnectionString = config.GetValue <string>("ConnectionString"), Receiver = new ReceiverSetup() { EntityType = EntityType.Topic, EntityName = "updatereceiverreceiverone1", EntitySubscriptionName = "subone1" } }); var receivedMessageOne = testMessenger.ReceiveOne <string>(); var count = 0; while (receivedMessageOne == null && count < 10) { receivedMessageOne = testMessenger.ReceiveOne <string>(); Task.Delay(500); count++; } receivedMessageOne.Should().BeEquivalentTo(testMessageOne); testMessenger.Complete(receivedMessageOne).GetAwaiter().GetResult(); //Update receiver to listen to the second subscription testMessenger.UpdateReceiver("updatereceiverreceivertwo2", "subtwo2").GetAwaiter().GetResult(); var receivedMessageTwo = testMessenger.ReceiveOne <TestProps>(); count = 0; while (receivedMessageTwo == null && count < 10) { receivedMessageTwo = testMessenger.ReceiveOne <TestProps>(); Task.Delay(500); count++; } testMessenger.Complete(receivedMessageTwo).GetAwaiter().GetResult(); Assert.NotNull(receivedMessageTwo); receivedMessageTwo.Should().BeEquivalentTo(testMessageTwo); topicOne.CompleteAllMessages().GetAwaiter().GetResult(); topicTwo.CompleteAllMessages().GetAwaiter().GetResult(); }
private static IServiceCollection AddNamedInstance <T>(IServiceCollection services, string key, ServiceBusMessenger instance) where T : INamedInstance { if (!key.IsNullOrEmpty()) { instance.Name = key; } services.AddSingleton(typeof(T), instance); // Ensure there's a NamedInstance factory to allow named collections of the messenger. services.AddFactoryIfNotAdded <T>(); return(services); }