public void Authenticate_should_throw_an_AuthenticationException_when_authentication_fails( [Values(false, true)] bool async) { #pragma warning disable 618 var subject = new MongoDBCRAuthenticator(__credential); #pragma warning restore 618 var commandResponse = MessageHelper.BuildCommandResponse(RawBsonDocumentHelper.FromJson("{ }")); var connection = new MockConnection(__serverId); connection.EnqueueCommandResponseMessage(commandResponse); connection.Description = __descriptionCommandWireProtocol; Action act; if (async) { act = () => subject.AuthenticateAsync(connection, __descriptionCommandWireProtocol, CancellationToken.None).GetAwaiter().GetResult(); } else { act = () => subject.Authenticate(connection, __descriptionCommandWireProtocol, CancellationToken.None); } act.ShouldThrow <MongoAuthenticationException>(); }
public void AuthenticateAsync_should_not_throw_when_authentication_succeeds() { var subject = new MongoDBCRAuthenticator(__credential); var getNonceReply = MessageHelper.BuildSuccessReply <RawBsonDocument>( RawBsonDocumentHelper.FromJson("{nonce: \"2375531c32080ae8\", ok: 1}")); var authenticateReply = MessageHelper.BuildSuccessReply <RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(getNonceReply); connection.EnqueueReplyMessage(authenticateReply); var currentRequestId = RequestMessage.CurrentGlobalRequestId; Action act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).Wait(); act.ShouldNotThrow(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(2); sentMessages[0].Should().Be("{opcode: \"query\", requestId: " + (currentRequestId + 1) + ", database: \"source\", collection: \"$cmd\", batchSize: -1, slaveOk: true, query: {getnonce: 1}}"); sentMessages[1].Should().Be("{opcode: \"query\", requestId: " + (currentRequestId + 2) + ", database: \"source\", collection: \"$cmd\", batchSize: -1, slaveOk: true, query: {authenticate: 1, user: \"user\", nonce: \"2375531c32080ae8\", key: \"21742f26431831d5cfca035a08c5bdf6\"}}"); }
public void Authenticate_should_send_serverApi_with_command_wire_protocol_if_serverApi_is_provided( [Values(false, true)] bool useServerApi, [Values(false, true)] bool async) { var serverApi = useServerApi ? new ServerApi(ServerApiVersion.V1, true, true) : null; #pragma warning disable 618 var subject = new MongoDBCRAuthenticator(__credential, serverApi); #pragma warning restore 618 var connection = new MockConnection(__serverId); var getNonceReply = RawBsonDocumentHelper.FromJson("{nonce: \"2375531c32080ae8\", ok: 1}"); var authenticateReply = RawBsonDocumentHelper.FromJson("{ok: 1}"); if (useServerApi) { connection.EnqueueCommandResponseMessage(MessageHelper.BuildCommandResponse(getNonceReply)); connection.EnqueueCommandResponseMessage(MessageHelper.BuildCommandResponse(authenticateReply)); } else { connection.EnqueueReplyMessage(MessageHelper.BuildReply(getNonceReply)); connection.EnqueueReplyMessage(MessageHelper.BuildReply(authenticateReply)); } connection.Description = __descriptionQueryWireProtocol; var expectedRequestId = RequestMessage.CurrentGlobalRequestId + 1; if (async) { subject.AuthenticateAsync(connection, __descriptionQueryWireProtocol, CancellationToken.None).GetAwaiter().GetResult(); } else { subject.Authenticate(connection, __descriptionQueryWireProtocol, CancellationToken.None); } SpinWait.SpinUntil(() => connection.GetSentMessages().Count >= 2, TimeSpan.FromSeconds(5)).Should().BeTrue(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(2); var actualRequestId0 = sentMessages[0]["requestId"].AsInt32; var actualRequestId1 = sentMessages[1]["requestId"].AsInt32; actualRequestId0.Should().BeInRange(expectedRequestId, expectedRequestId + 10); actualRequestId1.Should().BeInRange(actualRequestId0 + 1, actualRequestId0 + 11); if (useServerApi) { sentMessages[0].Should().Be($"{{opcode : \"opmsg\", requestId : {actualRequestId0}, responseTo : 0, sections : [{{ \"payloadType\" : 0, \"document\" : {{ \"getnonce\" : 1, \"$db\" : \"source\", \"apiVersion\" : \"1\", \"apiStrict\" : true, \"apiDeprecationErrors\" : true }} }}]}}"); sentMessages[1].Should().Be($"{{opcode : \"opmsg\", requestId : {actualRequestId1}, responseTo : 0, sections : [{{ \"payloadType\" : 0, \"document\" : {{ \"authenticate\" : 1, \"user\" : \"user\", \"nonce\" : \"2375531c32080ae8\", \"key\" : \"21742f26431831d5cfca035a08c5bdf6\", \"$db\" : \"source\", \"apiVersion\" : \"1\", \"apiStrict\" : true, \"apiDeprecationErrors\" : true }} }}]}}"); } else { sentMessages[0].Should().Be($"{{ opcode : \"query\", requestId : {actualRequestId0}, database : \"source\", collection : \"$cmd\", batchSize : -1, slaveOk : true, query : {{ getnonce : 1 }} }}"); sentMessages[1].Should().Be($"{{ opcode : \"query\", requestId : {actualRequestId1}, database : \"source\", collection : \"$cmd\", batchSize : -1, slaveOk : true, query : {{ authenticate : 1, user : \"user\", nonce : \"2375531c32080ae8\", key : \"21742f26431831d5cfca035a08c5bdf6\" }} }}"); } }
public void AuthenticateAsync_should_throw_an_AuthenticationException_when_authentication_fails() { var subject = new MongoDBCRAuthenticator(__credential); var reply = MessageHelper.BuildNoDocumentsReturnedReply<RawBsonDocument>(); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(reply); Action act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).Wait(); act.ShouldThrow<MongoAuthenticationException>(); }
public void AuthenticateAsync_should_throw_an_AuthenticationException_when_authentication_fails() { var subject = new MongoDBCRAuthenticator(__credential); var reply = MessageHelper.BuildNoDocumentsReturnedReply <RawBsonDocument>(); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(reply); Action act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).Wait(); act.ShouldThrow <MongoAuthenticationException>(); }
public void Authenticate_should_not_throw_when_authentication_succeeds( [Values(false, true)] bool async) { var subject = new MongoDBCRAuthenticator(__credential); var getNonceReply = MessageHelper.BuildReply <RawBsonDocument>( RawBsonDocumentHelper.FromJson("{nonce: \"2375531c32080ae8\", ok: 1}")); var authenticateReply = MessageHelper.BuildReply <RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(getNonceReply); connection.EnqueueReplyMessage(authenticateReply); var expectedRequestId = RequestMessage.CurrentGlobalRequestId + 1; Action act; if (async) { act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).GetAwaiter().GetResult(); } else { act = () => subject.Authenticate(connection, __description, CancellationToken.None); } act.ShouldNotThrow(); SpinWait.SpinUntil(() => connection.GetSentMessages().Count >= 2, TimeSpan.FromSeconds(5)).Should().BeTrue(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(2); var actualRequestId0 = sentMessages[0]["requestId"].AsInt32; var actualRequestId1 = sentMessages[1]["requestId"].AsInt32; actualRequestId0.Should().BeInRange(expectedRequestId, expectedRequestId + 10); actualRequestId1.Should().BeInRange(actualRequestId0 + 1, actualRequestId0 + 11); sentMessages[0].Should().Be("{opcode: \"query\", requestId: " + actualRequestId0 + ", database: \"source\", collection: \"$cmd\", batchSize: -1, slaveOk: true, query: {getnonce: 1}}"); sentMessages[1].Should().Be("{opcode: \"query\", requestId: " + actualRequestId1 + ", database: \"source\", collection: \"$cmd\", batchSize: -1, slaveOk: true, query: {authenticate: 1, user: \"user\", nonce: \"2375531c32080ae8\", key: \"21742f26431831d5cfca035a08c5bdf6\"}}"); }
public void Authenticate_should_not_throw_when_authentication_succeeds( [Values(false, true)] bool async) { #pragma warning disable 618 var subject = new MongoDBCRAuthenticator(__credential); #pragma warning restore 618 var getNonceCommandResponse = MessageHelper.BuildCommandResponse( RawBsonDocumentHelper.FromJson("{nonce: \"2375531c32080ae8\", ok: 1}")); var authenticateCommandResponse = MessageHelper.BuildCommandResponse( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueCommandResponseMessage(getNonceCommandResponse); connection.EnqueueCommandResponseMessage(authenticateCommandResponse); connection.Description = __descriptionCommandWireProtocol; var expectedRequestId = RequestMessage.CurrentGlobalRequestId + 1; Action act; if (async) { act = () => subject.AuthenticateAsync(connection, __descriptionCommandWireProtocol, CancellationToken.None).GetAwaiter().GetResult(); } else { act = () => subject.Authenticate(connection, __descriptionCommandWireProtocol, CancellationToken.None); } act.ShouldNotThrow(); SpinWait.SpinUntil(() => connection.GetSentMessages().Count >= 2, TimeSpan.FromSeconds(5)).Should().BeTrue(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(2); var actualRequestId0 = sentMessages[0]["requestId"].AsInt32; var actualRequestId1 = sentMessages[1]["requestId"].AsInt32; actualRequestId0.Should().BeInRange(expectedRequestId, expectedRequestId + 10); actualRequestId1.Should().BeInRange(actualRequestId0 + 1, actualRequestId0 + 11); sentMessages[0].Should().Be("{ \"opcode\" : \"opmsg\", \"requestId\" : " + actualRequestId0 + ", \"responseTo\" : 0, \"sections\" : [{ \"payloadType\" : 0, \"document\" : { \"getnonce\" : 1, \"$db\" : \"source\" } }] }"); sentMessages[1].Should().Be("{ \"opcode\" : \"opmsg\", \"requestId\" : " + actualRequestId1 + ", \"responseTo\" : 0, \"sections\" : [{ \"payloadType\" : 0, \"document\" : { \"authenticate\" : 1, \"user\" : \"user\", \"nonce\" : \"2375531c32080ae8\", \"key\" : \"21742f26431831d5cfca035a08c5bdf6\", \"$db\" : \"source\" } }] }"); }
public void Authenticate_should_not_throw_when_authentication_succeeds( [Values(false, true)] bool async) { var subject = new MongoDBCRAuthenticator(__credential); var getNonceReply = MessageHelper.BuildReply<RawBsonDocument>( RawBsonDocumentHelper.FromJson("{nonce: \"2375531c32080ae8\", ok: 1}")); var authenticateReply = MessageHelper.BuildReply<RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(getNonceReply); connection.EnqueueReplyMessage(authenticateReply); var expectedRequestId = RequestMessage.CurrentGlobalRequestId + 1; Action act; if (async) { act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).GetAwaiter().GetResult(); } else { act = () => subject.Authenticate(connection, __description, CancellationToken.None); } act.ShouldNotThrow(); SpinWait.SpinUntil(() => connection.GetSentMessages().Count >= 2, 100).Should().BeTrue(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(2); var actualRequestId0 = sentMessages[0]["requestId"].AsInt32; var actualRequestId1 = sentMessages[1]["requestId"].AsInt32; actualRequestId0.Should().BeInRange(expectedRequestId, expectedRequestId + 10); actualRequestId1.Should().BeInRange(actualRequestId0 + 1, actualRequestId0 + 11); sentMessages[0].Should().Be("{opcode: \"query\", requestId: " + actualRequestId0 + ", database: \"source\", collection: \"$cmd\", batchSize: -1, slaveOk: true, query: {getnonce: 1}}"); sentMessages[1].Should().Be("{opcode: \"query\", requestId: " + actualRequestId1 + ", database: \"source\", collection: \"$cmd\", batchSize: -1, slaveOk: true, query: {authenticate: 1, user: \"user\", nonce: \"2375531c32080ae8\", key: \"21742f26431831d5cfca035a08c5bdf6\"}}"); }
public void Authenticate_should_throw_an_AuthenticationException_when_authentication_fails( [Values(false, true)] bool async) { var subject = new MongoDBCRAuthenticator(__credential); var reply = MessageHelper.BuildNoDocumentsReturnedReply<RawBsonDocument>(); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(reply); Action act; if (async) { act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).GetAwaiter().GetResult(); } else { act = () => subject.Authenticate(connection, __description, CancellationToken.None); } act.ShouldThrow<MongoAuthenticationException>(); }
public void AuthenticateAsync_should_not_throw_when_authentication_succeeds() { var subject = new MongoDBCRAuthenticator(__credential); var getNonceReply = MessageHelper.BuildReply<RawBsonDocument>( RawBsonDocumentHelper.FromJson("{nonce: \"2375531c32080ae8\", ok: 1}")); var authenticateReply = MessageHelper.BuildReply<RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(getNonceReply); connection.EnqueueReplyMessage(authenticateReply); var currentRequestId = RequestMessage.CurrentGlobalRequestId; Action act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).Wait(); act.ShouldNotThrow(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(2); sentMessages[0].Should().Be("{opcode: \"query\", requestId: " + (currentRequestId + 1) + ", database: \"source\", collection: \"$cmd\", batchSize: -1, slaveOk: true, query: {getnonce: 1}}"); sentMessages[1].Should().Be("{opcode: \"query\", requestId: " + (currentRequestId + 2) + ", database: \"source\", collection: \"$cmd\", batchSize: -1, slaveOk: true, query: {authenticate: 1, user: \"user\", nonce: \"2375531c32080ae8\", key: \"21742f26431831d5cfca035a08c5bdf6\"}}"); }
public void Authenticate_should_throw_an_AuthenticationException_when_authentication_fails( [Values(false, true)] bool async) { var subject = new MongoDBCRAuthenticator(__credential); var reply = MessageHelper.BuildNoDocumentsReturnedReply <RawBsonDocument>(); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(reply); Action act; if (async) { act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).GetAwaiter().GetResult(); } else { act = () => subject.Authenticate(connection, __description, CancellationToken.None); } act.ShouldThrow <MongoAuthenticationException>(); }