public async Task SendAsync_RespectsMessageType() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var handle = await provider.BeginDialogAsync( new BeginDialogArguments("InitiatorService", "TargetService") { ContractName = "TestContract", }); // Act await provider.SendAsync(new SendArguments(handle) { MessageTypeName = "TestMessageType", }); var received = await connection.QueryAsync("SELECT * FROM [TargetQueue] WITH (NOLOCK)"); // Assert Assert.Equal("TestMessageType", received.Single().message_type_name); }
public async Task BeginDialogAsync_RespectsEncryptionOn() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var arguments = new BeginDialogArguments("InitiatorService", "TargetService") { Encryption = true, }; // Act var conversationHandle = await provider.BeginDialogAsync(arguments); var sql = @" SEND ON CONVERSATION @handle; SELECT GET_TRANSMISSION_STATUS(@handle) AS [status]"; var results = await connection.QueryAsync(sql, new { handle = conversationHandle.Value }); var status = results.Single().status; // Assert Assert.StartsWith("The session keys", status); }
public async Task BeginDialogAsync_UsesTransaction() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var arguments = new BeginDialogArguments("InitiatorService", "TargetService"); var handle = default(ConversationHandle); // Act using (var transaction = await provider.BeginTransactionAsync()) { handle = await provider.BeginDialogAsync(arguments); transaction.Rollback(); } var sql = @"SELECT * FROM sys.conversation_endpoints WHERE conversation_handle = @handle"; var results = await connection.QueryAsync(sql, new { handle = handle.Value }); // Assert Assert.Empty(results); }
public async Task BeginDialogAsync_RespectsRelatedConversationHandlesAndGroupIds() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var group = Guid.NewGuid(); var arguments = new BeginDialogArguments("InitiatorService", "TargetService") { Related = (ConversationGroupId)group }; // Act var conversationHandle = await provider.BeginDialogAsync(arguments); arguments.Related = conversationHandle; conversationHandle = await provider.BeginDialogAsync(arguments); var sql = @" SELECT e.conversation_group_id FROM sys.conversation_endpoints e WHERE conversation_handle = @handle "; var results = await connection.QueryAsync(sql, new { handle = conversationHandle.Value }); var conversation = results.Single(); // Assert Assert.Equal(group, conversation.conversation_group_id); }
public async Task BeginDialogAsync_RespectsEncryptionOff() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var arguments = new BeginDialogArguments("InitiatorService", "TargetService") { Encryption = true, }; // Act var conversationHandle = await provider.BeginDialogAsync(arguments); var sql = @" SEND ON CONVERSATION @handle; SELECT * FROM sys.conversation_endpoints WHERE conversation_handle = @handle"; var results = await connection.QueryAsync(sql, new { handle = conversationHandle.Value }); var conversation = results.Single(); // Assert Assert.Equal("CO", conversation.state); Assert.Equal(Guid.Empty, conversation.outbound_session_key_identifier); Assert.Equal(Guid.Empty, conversation.inbound_session_key_identifier); }
public async Task BeginDialogAsync_RespectsLifeTime() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var arguments = new BeginDialogArguments("InitiatorService", "TargetService") { Lifetime = TimeSpan.FromHours(23), }; // Act var conversationHandle = await provider.BeginDialogAsync(arguments); var sql = @" SELECT e.lifetime FROM sys.conversation_endpoints e WHERE conversation_handle = @handle "; var results = await connection.QueryAsync(sql, new { handle = conversationHandle.Value }); var conversation = results.Single(); // Assert Assert.True(conversation.lifetime < DateTime.Now.AddDays(1).ToUniversalTime()); }
public async Task BeginDialogAsync_RespectsContract() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var arguments = new BeginDialogArguments("InitiatorService", "TargetService") { ContractName = "TestContract", }; // Act var conversationHandle = await provider.BeginDialogAsync(arguments); var sql = @" SELECT c.name FROM sys.conversation_endpoints e JOIN sys.service_contracts c ON c.service_contract_id = e.service_contract_id WHERE conversation_handle = @handle "; var results = await connection.QueryAsync(sql, new { handle = conversationHandle.Value }); var contract = results.Single(); // Assert Assert.Equal("TestContract", contract.name); }
public async Task BeginDialogAsync_RespectsBrokerInstanceCurrentDatabase() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var arguments = new BeginDialogArguments("InitiatorService", "TargetService") { BrokerInstance = BrokerInstance.CurrentDatabase, }; // Act var conversationHandle = await provider.BeginDialogAsync(arguments); var sql = @" SELECT CAST(e.far_broker_instance AS uniqueidentifier) AS [actual], (SELECT service_broker_guid FROM sys.databases WHERE database_id = DB_ID()) AS [expected] FROM sys.conversation_endpoints e WHERE conversation_handle = @handle "; var results = await connection.QueryAsync(sql, new { handle = conversationHandle.Value }); var conversation = results.Single(); // Assert Assert.Equal(conversation.expected, conversation.actual); }
public async Task BeginDialogAsync_RespectsToAndFromServices() { // Arrange await InitializeDatabaseAsync(); var provider = new SqlServerServiceBroker(connection); var arguments = new BeginDialogArguments("InitiatorService", "TargetService"); // Act var conversationHandle = await provider.BeginDialogAsync(arguments); var sql = @" SELECT e.state, e.far_service, e.is_initiator, s.name FROM sys.conversation_endpoints e JOIN sys.services s ON s.service_id = e.service_id WHERE conversation_handle = @handle "; var results = await connection.QueryAsync(sql, new { handle = conversationHandle.Value }); var conversation = results.Single(); // Assert Assert.NotNull(conversation); Assert.Equal("SO", conversation.state); Assert.Equal("InitiatorService", conversation.name); Assert.Equal("TargetService", conversation.far_service); Assert.Equal(true, conversation.is_initiator); }
public async Task BeginDialogAsync_ArgumentsCannotBeNull() { // Arrange var provider = new SqlServerServiceBroker(connection); // Act Func<Task> call = async () => await provider.BeginDialogAsync(null); // Assert await Assert.ThrowsAsync<ArgumentNullException>("arguments", call); }