public async Task ServiceBusSessionTopicSubscription_OrderGuaranteed() { var host = BuildSessionHost <ServiceBusSessionsTestJobs1>(); using (host) { await WriteTopicMessage("message1", "test-session1"); await WriteTopicMessage("message2", "test-session1"); await WriteTopicMessage("message3", "test-session1"); await WriteTopicMessage("message4", "test-session1"); await WriteTopicMessage("message5", "test-session1"); Assert.True(_waitHandle1.WaitOne(SBTimeoutMills)); List <LogMessage> logMessages = GetLogMessages(host).Where(m => m.Category == "Function.SBSub1Trigger.User").ToList(); Assert.True(logMessages.Count() == 5, ServiceBusSessionsTestHelper.GetLogsAsString(logMessages)); int i = 1; foreach (LogMessage logMessage in logMessages) { StringAssert.StartsWith("message" + i++, logMessage.FormattedMessage); } await host.StopAsync(); } }
public static void SBQueue2Trigger( [ServiceBusTrigger(FirstQueueNameKey, IsSessionsEnabled = true)] ServiceBusReceivedMessage message, ILogger log) { ServiceBusSessionsTestHelper.ProcessMessage(message, log, _waitHandle1, _waitHandle2); }
public static void SBSub2Trigger( [ServiceBusTrigger(TopicNameKey, FirstSubscriptionNameKey, IsSessionsEnabled = true)] ServiceBusReceivedMessage message, ILogger log) { ServiceBusSessionsTestHelper.ProcessMessage(message, log, _waitHandle1, _waitHandle2); }
private async Task TestMultipleDrainMode <T>(bool sendToQueue) { _drainValidationPreDelay = new ManualResetEvent(initialState: false); _drainValidationPostDelay = new ManualResetEvent(initialState: false); if (sendToQueue) { await ServiceBusEndToEndTests.WriteQueueMessage(_connectionString, _queueName, DrainingQueueMessageBody, _drainModeSessionId); } else { await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, DrainingTopicMessageBody, _drainModeSessionId); } using (IHost host = ServiceBusSessionsTestHelper.CreateHost <T>(_nameResolver, false, false)) { await host.StartAsync(); // Wait to ensure function invocatoin has started before draining messages Assert.True(_drainValidationPreDelay.WaitOne(SBTimeoutMills)); // Start draining in-flight messages var drainModeManager = host.Services.GetService <IDrainModeManager>(); await drainModeManager.EnableDrainModeAsync(CancellationToken.None); // Validate that function execution was allowed to complete Assert.True(_drainValidationPostDelay.WaitOne(DrainWaitTimeoutMills + SBTimeoutMills)); // Wait for the host to terminate await host.StopAsync(); } }
public async Task ServiceBusSessionTopicSubscription_OrderGuaranteed() { using (var host = ServiceBusSessionsTestHelper.CreateHost <ServiceBusSessionsTestJobs1>(_nameResolver)) { await host.StartAsync(); _waitHandle1 = new ManualResetEvent(initialState: false); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message1", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message2", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message3", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message4", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message5", "test-session1"); Assert.True(_waitHandle1.WaitOne(SBTimeout)); IEnumerable <LogMessage> logMessages = host.GetTestLoggerProvider().GetAllLogMessages(); // filter out anything from the custom processor for easier validation. List <LogMessage> consoleOutput = logMessages.Where(m => m.Category == "Function.SBSub1Trigger.User").ToList(); Assert.True(consoleOutput.Count() == 5, ServiceBusSessionsTestHelper.GetLogsAsString(consoleOutput)); int i = 1; foreach (LogMessage logMessage in consoleOutput) { Assert.True(logMessage.FormattedMessage.StartsWith("message" + i++)); } } }
public async Task ServiceBusSessionQueue_OrderGuaranteed() { var(jobHost, host) = BuildSessionHost <ServiceBusSessionsTestJobs1>(); using (jobHost) { await WriteQueueMessage("message1", "test-session1"); await WriteQueueMessage("message2", "test-session1"); await WriteQueueMessage("message3", "test-session1"); await WriteQueueMessage("message4", "test-session1"); await WriteQueueMessage("message5", "test-session1"); Assert.True(_waitHandle1.WaitOne(SBTimeoutMills)); IEnumerable <LogMessage> logMessages = host.GetTestLoggerProvider().GetAllLogMessages(); Assert.False(logMessages.Where(p => p.Level == LogLevel.Error).Any()); // filter out anything from the custom processor for easier validation. List <LogMessage> consoleOutput = logMessages.Where(m => m.Category == "Function.SBQueue1Trigger.User").ToList(); Assert.True(consoleOutput.Count() == 5, ServiceBusSessionsTestHelper.GetLogsAsString(consoleOutput)); int i = 1; foreach (LogMessage logMessage in consoleOutput) { StringAssert.StartsWith("message" + i++, logMessage.FormattedMessage); } await jobHost.StopAsync(); } }
public async Task ServiceBusSessionTopicSubscription_OrderGuaranteed() { var(jobHost, host) = BuildSessionHost <ServiceBusSessionsTestJobs1>(); using (jobHost) { _waitHandle1 = new ManualResetEvent(initialState: false); await WriteTopicMessage("message1", "test-session1"); await WriteTopicMessage("message2", "test-session1"); await WriteTopicMessage("message3", "test-session1"); await WriteTopicMessage("message4", "test-session1"); await WriteTopicMessage("message5", "test-session1"); Assert.True(_waitHandle1.WaitOne(SBTimeoutMills)); IEnumerable <LogMessage> logMessages = host.GetTestLoggerProvider().GetAllLogMessages(); // filter out anything from the custom processor for easier validation. List <LogMessage> consoleOutput = logMessages.Where(m => m.Category == "Function.SBSub1Trigger.User").ToList(); Assert.True(consoleOutput.Count() == 5, ServiceBusSessionsTestHelper.GetLogsAsString(consoleOutput)); int i = 1; foreach (LogMessage logMessage in consoleOutput) { StringAssert.StartsWith("message" + i++, logMessage.FormattedMessage); } } }
private async Task Cleanup() { List <Task> tasks = new List <Task>(); tasks.Add(ServiceBusSessionsTestHelper.CleanUpQueue(_connectionString, _queueName)); tasks.Add(ServiceBusSessionsTestHelper.CleanUpSubscription(_connectionString, _topicName, _subscriptionName)); await Task.WhenAll(tasks); }
public async Task ServiceBusSessionSub_DifferentHosts_DifferentSessions() { using (var host1 = ServiceBusSessionsTestHelper.CreateHost <ServiceBusSessionsTestJobs1>(_nameResolver, true)) using (var host2 = ServiceBusSessionsTestHelper.CreateHost <ServiceBusSessionsTestJobs2>(_nameResolver, true)) { await host1.StartAsync(); await host2.StartAsync(); _waitHandle1 = new ManualResetEvent(initialState: false); _waitHandle2 = new ManualResetEvent(initialState: false); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message1", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message1", "test-session2"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message2", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message2", "test-session2"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message3", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message3", "test-session2"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message4", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message4", "test-session2"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message5", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message5", "test-session2"); Assert.True(_waitHandle1.WaitOne(SBTimeout)); Assert.True(_waitHandle2.WaitOne(SBTimeout)); IEnumerable <LogMessage> logMessages1 = host1.GetTestLoggerProvider().GetAllLogMessages(); List <LogMessage> consoleOutput1 = logMessages1.Where(m => m.Category == "Function.SBSub1Trigger.User").ToList(); Assert.NotEmpty(logMessages1.Where(m => m.Category == "CustomMessagingProvider" && m.FormattedMessage.StartsWith("Custom processor Begin called!"))); Assert.NotEmpty(logMessages1.Where(m => m.Category == "CustomMessagingProvider" && m.FormattedMessage.StartsWith("Custom processor End called!"))); IEnumerable <LogMessage> logMessages2 = host2.GetTestLoggerProvider().GetAllLogMessages(); List <LogMessage> consoleOutput2 = logMessages2.Where(m => m.Category == "Function.SBSub2Trigger.User").ToList(); Assert.NotEmpty(logMessages2.Where(m => m.Category == "CustomMessagingProvider" && m.FormattedMessage.StartsWith("Custom processor Begin called!"))); Assert.NotEmpty(logMessages2.Where(m => m.Category == "CustomMessagingProvider" && m.FormattedMessage.StartsWith("Custom processor End called!"))); char sessionId1 = consoleOutput1[0].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1]; foreach (LogMessage m in consoleOutput1) { Assert.Equal(sessionId1, m.FormattedMessage[m.FormattedMessage.Length - 1]); } char sessionId2 = consoleOutput2[0].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1]; foreach (LogMessage m in consoleOutput2) { Assert.Equal(sessionId2, m.FormattedMessage[m.FormattedMessage.Length - 1]); } } }
public async Task ServiceBusSessionSub_SessionLocks() { using (var host = ServiceBusSessionsTestHelper.CreateHost <ServiceBusSessionsTestJobs1>(_nameResolver, true)) { await host.StartAsync(); _waitHandle1 = new ManualResetEvent(initialState: false); _waitHandle2 = new ManualResetEvent(initialState: false); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message1", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message1", "test-session2"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message2", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message2", "test-session2"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message3", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message3", "test-session2"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message4", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message4", "test-session2"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message5", "test-session1"); await ServiceBusEndToEndTests.WriteTopicMessage(_connectionString, _topicName, "message5", "test-session2"); Assert.True(_waitHandle1.WaitOne(SBTimeoutMills)); Assert.True(_waitHandle2.WaitOne(SBTimeoutMills)); IEnumerable <LogMessage> logMessages1 = host.GetTestLoggerProvider().GetAllLogMessages(); // filter out anything from the custom processor for easier validation. List <LogMessage> consoleOutput1 = logMessages1.Where(m => m.Category == "Function.SBSub1Trigger.User").ToList(); Assert.True(consoleOutput1.Count() == 10, ServiceBusSessionsTestHelper.GetLogsAsString(consoleOutput1)); double seconsds = (consoleOutput1[5].Timestamp - consoleOutput1[4].Timestamp).TotalSeconds; Assert.True(seconsds > 90 && seconsds < 110, seconsds.ToString()); for (int i = 0; i < consoleOutput1.Count(); i++) { if (i < 5) { Assert.Equal(consoleOutput1[i].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1], consoleOutput1[0].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1]); } else { Assert.Equal(consoleOutput1[i].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1], consoleOutput1[5].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1]); } } await host.StopAsync(); } }
public static void SBSub1Trigger( [ServiceBusTrigger(_topicName, _subscriptionName, IsSessionsEnabled = true)] Message message, int deliveryCount, IMessageSession messageSession, ILogger log, string lockToken) { Assert.Equal(EntityNameHelper.FormatSubscriptionPath(_topicName, _subscriptionName), messageSession.Path); Assert.Equal(1, deliveryCount); ServiceBusSessionsTestHelper.ProcessMessage(message, log, _waitHandle1, _waitHandle2); }
public static void SBQueue1Trigger( [ServiceBusTrigger(_queueName, IsSessionsEnabled = true)] Message message, int deliveryCount, IMessageSession messageSession, ILogger log, string lockToken) { Assert.Equal(_queueName, messageSession.Path); Assert.Equal(1, deliveryCount); ServiceBusSessionsTestHelper.ProcessMessage(message, log, _waitHandle1, _waitHandle2); }
public static void SBSub1Trigger( [ServiceBusTrigger(TopicNameKey, FirstSubscriptionNameKey, IsSessionsEnabled = true)] ServiceBusReceivedMessage message, int deliveryCount, ServiceBusSessionMessageActions messageSession, ILogger log, string lockToken) { Assert.AreEqual(1, deliveryCount); Assert.AreEqual(message.LockToken, lockToken); ServiceBusSessionsTestHelper.ProcessMessage(message, log, _waitHandle1, _waitHandle2); }
public async Task ServiceBusSessionQueue_SessionLocks() { var(jobHost, host) = BuildSessionHost <ServiceBusSessionsTestJobs1>(addCustomProvider: true); using (jobHost) { _waitHandle1 = new ManualResetEvent(initialState: false); _waitHandle2 = new ManualResetEvent(initialState: false); await WriteQueueMessage("message1", "test-session1"); await WriteQueueMessage("message1", "test-session2"); await WriteQueueMessage("message2", "test-session1"); await WriteQueueMessage("message2", "test-session2"); await WriteQueueMessage("message3", "test-session1"); await WriteQueueMessage("message3", "test-session2"); await WriteQueueMessage("message4", "test-session1"); await WriteQueueMessage("message4", "test-session2"); await WriteQueueMessage("message5", "test-session1"); await WriteQueueMessage("message5", "test-session2"); Assert.True(_waitHandle1.WaitOne(SBTimeoutMills)); Assert.True(_waitHandle2.WaitOne(SBTimeoutMills)); IEnumerable <LogMessage> logMessages1 = host.GetTestLoggerProvider().GetAllLogMessages(); // filter out anything from the custom processor for easier validation. List <LogMessage> consoleOutput1 = logMessages1.Where(m => m.Category == "Function.SBQueue1Trigger.User").ToList(); Assert.True(consoleOutput1.Count() == 10, ServiceBusSessionsTestHelper.GetLogsAsString(consoleOutput1)); double seconds = (consoleOutput1[5].Timestamp - consoleOutput1[4].Timestamp).TotalSeconds; Assert.True(seconds > 90 && seconds < 110, seconds.ToString()); for (int i = 0; i < consoleOutput1.Count(); i++) { if (i < 5) { Assert.AreEqual(consoleOutput1[i].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1], consoleOutput1[0].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1]); } else { Assert.AreEqual(consoleOutput1[i].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1], consoleOutput1[5].FormattedMessage[consoleOutput1[0].FormattedMessage.Length - 1]); } } } }
public static void ProcessMessage(Message message, ILogger log, EventWaitHandle waitHandle1, EventWaitHandle waitHandle2) { string messageString = ServiceBusSessionsTestHelper.GetStringMessage(message); log.LogInformation($"{messageString}-{message.SessionId}"); if (messageString == "message5" && message.SessionId == "test-session1") { waitHandle1.Set(); } if (messageString == "message5" && message.SessionId == "test-session2") { waitHandle2.Set(); } }
public async Task ServiceBusSessionSub_SessionLocks() { var host = BuildSessionHost <ServiceBusSessionsTestJobs1>(addCustomProvider: true); using (host) { await WriteTopicMessage("message1", "test-session1"); await WriteTopicMessage("message1", "test-session2"); await WriteTopicMessage("message2", "test-session1"); await WriteTopicMessage("message2", "test-session2"); await WriteTopicMessage("message3", "test-session1"); await WriteTopicMessage("message3", "test-session2"); await WriteTopicMessage("message4", "test-session1"); await WriteTopicMessage("message4", "test-session2"); await WriteTopicMessage("message5", "test-session1"); await WriteTopicMessage("message5", "test-session2"); Assert.True(_waitHandle1.WaitOne(SBTimeoutMills)); Assert.True(_waitHandle2.WaitOne(SBTimeoutMills)); var logMessages = GetLogMessages(host) .Where(m => m.Category == "Function.SBSub1Trigger.User").ToList();; Assert.True(logMessages.Count() == 10, ServiceBusSessionsTestHelper.GetLogsAsString(logMessages)); double seconds = (logMessages[5].Timestamp - logMessages[4].Timestamp).TotalSeconds; Assert.True(seconds > 90 && seconds < 110, seconds.ToString()); for (int i = 0; i < logMessages.Count(); i++) { if (i < 5) { Assert.AreEqual(logMessages[i].FormattedMessage[logMessages[0].FormattedMessage.Length - 1], logMessages[0].FormattedMessage[logMessages[0].FormattedMessage.Length - 1]); } else { Assert.AreEqual(logMessages[i].FormattedMessage[logMessages[0].FormattedMessage.Length - 1], logMessages[5].FormattedMessage[logMessages[0].FormattedMessage.Length - 1]); } } await host.StopAsync(); } }
private async Task TestMultiple <T>(bool isXml = false) { _waitHandle1 = new ManualResetEvent(initialState: false); if (isXml) { await ServiceBusEndToEndTests.WriteQueueMessage(_connectionString, _queueName, new TestPoco() { Name = "Test1" }, "sessionId"); await ServiceBusEndToEndTests.WriteQueueMessage(_connectionString, _queueName, new TestPoco() { Name = "Test2" }, "sessionId"); } else { await ServiceBusEndToEndTests.WriteQueueMessage(_connectionString, _queueName, "{'Name': 'Test1', 'Value': 'Value'}", "sessionId"); await ServiceBusEndToEndTests.WriteQueueMessage(_connectionString, _queueName, "{'Name': 'Test2', 'Value': 'Value'}", "sessionId"); } using (IHost host = ServiceBusSessionsTestHelper.CreateHost <T>(_nameResolver)) { await host.StartAsync(); bool result = _waitHandle1.WaitOne(SBTimeoutMills); Assert.True(result); // ensure message are completed await Task.Delay(2000); // Wait for the host to terminate await host.StopAsync(); } }
public override async Task <bool> BeginProcessingMessageAsync(IMessageSession session, Message message, CancellationToken cancellationToken) { _logger?.LogInformation("Custom processor Begin called!" + ServiceBusSessionsTestHelper.GetStringMessage(message)); return(await base.BeginProcessingMessageAsync(session, message, cancellationToken)); }
public static void SBSub2Trigger( [ServiceBusTrigger(_topicName, _subscriptionName, IsSessionsEnabled = true)] Message message, ILogger log) { ServiceBusSessionsTestHelper.ProcessMessage(message, log, _waitHandle1, _waitHandle2); }
public override async Task CompleteProcessingMessageAsync(IMessageSession session, Message message, Executors.FunctionResult result, CancellationToken cancellationToken) { _logger?.LogInformation("Custom processor End called!" + ServiceBusSessionsTestHelper.GetStringMessage(message)); await base.CompleteProcessingMessageAsync(session, message, result, cancellationToken); }