public void Authenticate_should_not_throw_when_username_is_null_and_server_support_null_username( [Values(false, true)] bool async) { var subject = new MongoDBX509Authenticator(null); var reply = MessageHelper.BuildReply <RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(reply); var description = CreateConnectionDescription(new SemanticVersion(3, 4, 0)); Exception exception; if (async) { exception = Record.Exception(() => subject.AuthenticateAsync(connection, description, CancellationToken.None).GetAwaiter().GetResult()); } else { exception = Record.Exception(() => subject.Authenticate(connection, description, CancellationToken.None)); } exception.Should().BeNull(); }
public void Authenticate_should_not_throw_when_authentication_succeeds( [Values(false, true)] bool async) { var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US"); var reply = MessageHelper.BuildReply <RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.Description = CreateConnectionDescription(new SemanticVersion(3, 2, 0)); 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.ShouldNotThrow(); }
public void Authenticate_should_throw_an_AuthenticationException_when_authentication_fails( [Values(false, true)] bool async) { var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US", serverApi: null); var reply = MessageHelper.BuildNoDocumentsReturnedReply <RawBsonDocument>(); var connection = new MockConnection(__serverId); connection.Description = CreateConnectionDescription(new SemanticVersion(3, 2, 0)); connection.EnqueueReplyMessage(reply); Action act; if (async) { act = () => subject.AuthenticateAsync(connection, __descriptionQueryWireProtocol, CancellationToken.None).GetAwaiter().GetResult(); } else { act = () => subject.Authenticate(connection, __descriptionQueryWireProtocol, CancellationToken.None); } act.ShouldThrow <MongoAuthenticationException>(); }
public void Authenticate_should_not_throw_when_authentication_succeeds( [Values(false, true)] bool async) { var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US"); var reply = MessageHelper.BuildReply<RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.Description = CreateConnectionDescription(new SemanticVersion(3, 2, 0)); 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.ShouldNotThrow(); }
public void Authenticate_should_throw_an_AuthenticationException_when_authentication_fails( [Values(false, true)] bool async) { var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US", serverApi: null); var response = MessageHelper.BuildCommandResponse(RawBsonDocumentHelper.FromJson("{ }")); var connection = new MockConnection(__serverId); connection.Description = CreateConnectionDescription(maxWireVersion: WireVersion.Server36); connection.EnqueueCommandResponseMessage(response); 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 Authenticate_should_not_throw_when_username_is_null( [Values(false, true)] bool async) { var subject = new MongoDBX509Authenticator(username: null, serverApi: null); var response = MessageHelper.BuildCommandResponse( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueCommandResponseMessage(response); var description = CreateConnectionDescription(maxWireVersion: WireVersion.Server36); connection.Description = description; Exception exception; if (async) { exception = Record.Exception(() => subject.AuthenticateAsync(connection, description, CancellationToken.None).GetAwaiter().GetResult()); } else { exception = Record.Exception(() => subject.Authenticate(connection, description, CancellationToken.None)); } exception.Should().BeNull(); }
public void AuthenticateAsync_should_throw_an_AuthenticationException_when_authentication_fails() { var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US"); 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_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; var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US", serverApi); var connection = new MockConnection(__serverId); if (useServerApi) { var reply = MessageHelper.BuildCommandResponse(RawBsonDocumentHelper.FromJson("{ok: 1}")); connection.EnqueueCommandResponseMessage(reply); } else { var reply = MessageHelper.BuildReply(RawBsonDocumentHelper.FromJson("{ok: 1}")); connection.EnqueueReplyMessage(reply); } 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 >= 1, TimeSpan.FromSeconds(5)).Should().BeTrue(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(1); var actualRequestId = sentMessages[0]["requestId"].AsInt32; actualRequestId.Should().BeInRange(expectedRequestId, expectedRequestId + 10); if (useServerApi) { sentMessages[0].Should().Be($"{{ \"opcode\" : \"opmsg\", \"requestId\" : {actualRequestId}, \"responseTo\" : 0, \"sections\" : [{{ \"payloadType\" : 0, \"document\" : {{ \"authenticate\" : 1, \"mechanism\" : \"MONGODB-X509\", \"user\" : \"CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US\", \"$db\" : \"$external\", \"apiVersion\" : \"1\", \"apiStrict\" : true, \"apiDeprecationErrors\" : true }} }}] }}"); } else { sentMessages[0].Should().Be($"{{ opcode : \"query\", requestId : {actualRequestId}, database : \"$external\", collection : \"$cmd\", batchSize : -1, slaveOk : true, query : {{ authenticate : 1, mechanism : \"MONGODB-X509\", user : \"CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US\" }} }}"); } }
public void AuthenticateAsync_should_throw_an_AuthenticationException_when_authentication_fails() { var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US"); var reply = MessageHelper.BuildNoDocumentsReturnedReply <RawBsonDocument>(); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(reply); Action act = () => subject.AuthenticateAsync(connection, Timeout.InfiniteTimeSpan, CancellationToken.None).Wait(); act.ShouldThrow <MongoAuthenticationException>(); }
public void AuthenticateAsync_should_not_throw_when_authentication_succeeds() { var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US"); var reply = MessageHelper.BuildReply<RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(reply); Action act = () => subject.AuthenticateAsync(connection, __description, CancellationToken.None).Wait(); act.ShouldNotThrow(); }
public void AuthenticateAsync_should_not_throw_when_authentication_succeeds() { var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US"); var reply = MessageHelper.BuildSuccessReply <RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueReplyMessage(reply); Action act = () => subject.AuthenticateAsync(connection, Timeout.InfiniteTimeSpan, CancellationToken.None).Wait(); act.ShouldNotThrow(); }
public void Authenticate_should_send_serverApi_with_command_wire_protocol( [Values(false, true)] bool useServerApi, [Values(false, true)] bool async) { var serverApi = useServerApi ? new ServerApi(ServerApiVersion.V1, true, true) : null; var subject = new MongoDBX509Authenticator("CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US", serverApi); var connection = new MockConnection(__serverId); var response = MessageHelper.BuildCommandResponse(RawBsonDocumentHelper.FromJson("{ok: 1}")); connection.EnqueueCommandResponseMessage(response); connection.Description = __descriptionCommandWireProtocol; var expectedRequestId = RequestMessage.CurrentGlobalRequestId + 1; if (async) { subject.AuthenticateAsync(connection, __descriptionCommandWireProtocol, CancellationToken.None).GetAwaiter().GetResult(); } else { subject.Authenticate(connection, __descriptionCommandWireProtocol, CancellationToken.None); } SpinWait.SpinUntil(() => connection.GetSentMessages().Count >= 1, TimeSpan.FromSeconds(5)).Should().BeTrue(); var sentMessages = MessageHelper.TranslateMessagesToBsonDocuments(connection.GetSentMessages()); sentMessages.Count.Should().Be(1); var actualRequestId = sentMessages[0]["requestId"].AsInt32; actualRequestId.Should().BeInRange(expectedRequestId, expectedRequestId + 10); var expectedServerApiString = useServerApi ? ", apiVersion : \"1\", apiStrict : true, apiDeprecationErrors : true" : ""; sentMessages[0].Should().Be($"{{ opcode : \"opmsg\", requestId : {actualRequestId}, responseTo : 0, sections : [ {{ payloadType : 0, document : {{ authenticate : 1, mechanism : \"MONGODB-X509\", user : \"CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US\", $db : \"$external\"{expectedServerApiString} }} }} ] }}"); }
public void Authenticate_should_not_throw_when_username_is_null_and_server_support_null_username( [Values(false, true)] bool async) { var subject = new MongoDBX509Authenticator(null); var reply = MessageHelper.BuildReply<RawBsonDocument>( RawBsonDocumentHelper.FromJson("{ok: 1}")); var connection = new MockConnection(__serverId); connection.Description = CreateConnectionDescription(new SemanticVersion(3, 4, 0)); connection.EnqueueReplyMessage(reply); Exception exception; if (async) { exception = Record.Exception(() => subject.AuthenticateAsync(connection, __description, CancellationToken.None).GetAwaiter().GetResult()); } else { exception = Record.Exception(() => subject.Authenticate(connection, __description, CancellationToken.None)); } exception.Should().BeNull(); }