public void When_EnhanchedDurability_Is_False_Hello_Doesnt_Requests_MutationSeqNo() { var mockConnection = new Mock <IConnection>(); mockConnection.Setup(x => x.MustEnableServerFeatures).Returns(true); var mockConnectionPool = new Mock <IConnectionPool>(); mockConnectionPool.Setup(x => x.Acquire()).Returns(mockConnection.Object); mockConnectionPool.SetupGet(x => x.Configuration).Returns(new PoolConfiguration { UseEnhancedDurability = false }); mockConnectionPool.Setup(x => x.Connections).Returns(new List <IConnection> { mockConnection.Object }); var service = new PooledIOService(mockConnectionPool.Object); service.Execute(new FakeOperationWithRequiredKey("key", null, new DefaultTranscoder(), 0)); var features = new short[] { (byte)ServerFeatures.SubdocXAttributes, (byte)ServerFeatures.SelectBucket }; var expectedBytes = new Hello(features.ToArray(), new DefaultTranscoder(), 0, 0).Write(); mockConnectionPool.Verify(x => x.Acquire(), Times.Once); mockConnection.Verify(x => x.Send(It.Is <byte[]>(bytes => bytes.SequenceEqual(expectedBytes)))); }
public void Result_Has_Failure_Status_If_ErrorMap_Available() { const string codeString = "2c"; // 44 var code = short.Parse(codeString, NumberStyles.HexNumber); var errorCode = new ErrorCode { Name = "test" }; var errorMap = new ErrorMap { Version = 1, Revision = 1, Errors = new Dictionary <string, ErrorCode> { { codeString, errorCode } } }; var converter = new DefaultConverter(); var responseBytes = new byte[24]; converter.FromByte((byte)Magic.Response, responseBytes, HeaderIndexFor.Magic); converter.FromInt16(code, responseBytes, HeaderIndexFor.Status); var mockConnection = new Mock <IConnection>(); mockConnection.Setup(x => x.IsConnected).Returns(true); mockConnection.Setup(x => x.Send(It.IsAny <byte[]>())).Returns(responseBytes); var mockConnectionPool = new Mock <IConnectionPool>(); mockConnectionPool.Setup(x => x.Acquire()).Returns(mockConnection.Object); mockConnectionPool.SetupGet(x => x.Configuration).Returns(new PoolConfiguration { ClientConfiguration = new ClientConfiguration { Tracer = NullTracer.Instance } }); mockConnectionPool.Setup(x => x.Connections).Returns(new List <IConnection> { mockConnection.Object }); var service = new PooledIOService(mockConnectionPool.Object) { ErrorMap = errorMap }; var result = service.Execute(new FakeOperationWithRequiredKey("key", null, new DefaultTranscoder(), 0, 0)); Assert.AreEqual(ResponseStatus.Failure, result.Status); Assert.AreEqual(errorCode.ToString(), result.Message); }
public void When_SaslMechinism_Is_Set_On_PoolIOService_And_Authentication_Fails_Return_AuthenticationError() { var mockAuthenticator = new Mock<ISaslMechanism>(); mockAuthenticator.Setup(x => x.Authenticate(It.IsAny<IConnection>(), Username, Password)) .Returns(false); mockAuthenticator.SetupGet(x => x.Username).Returns(BucketName); var service = new PooledIOService(_connectionPool, mockAuthenticator.Object); var operation = new SaslStart("PLAIN", GetAuthData(Username, Password), new DefaultTranscoder(), OperationLifespan); var response = service.Execute(operation); Assert.AreEqual(string.Format("Authentication failed for bucket '{0}'", BucketName), response.Message); Assert.AreEqual(ResponseStatus.AuthenticationError, response.Status); Assert.IsFalse(response.Success); }
public void When_SaslMechinism_Is_Set_On_PoolIOService_And_Authentication_Fails_Return_AuthenticationError() { var mockAuthenticator = new Mock <ISaslMechanism>(); mockAuthenticator.Setup(x => x.Authenticate(It.IsAny <IConnection>(), Username, Password)) .Returns(false); mockAuthenticator.SetupGet(x => x.Username).Returns(BucketName); var service = new PooledIOService(_connectionPool, mockAuthenticator.Object); var operation = new SaslStart("PLAIN", GetAuthData(Username, Password), new DefaultTranscoder(), OperationLifespan); var response = service.Execute(operation); Assert.AreEqual(string.Format("Authentication failed for bucket '{0}'", BucketName), response.Message); Assert.AreEqual(ResponseStatus.AuthenticationError, response.Status); Assert.IsFalse(response.Success); }
public void When_Operation_Fails_Without_SocketException_ClientFailure_Is_Returned() { var mockedSasl = new Mock <ISaslMechanism>(); var mockedConnection = new Mock <IConnection>(); mockedConnection.Setup(x => x.Send(It.IsAny <byte[]>())).Throws <IndexOutOfRangeException>(); mockedConnection.Setup(x => x.IsAuthenticated).Returns(true); var mockedPool = new Mock <IConnectionPool>(); mockedPool.Setup(x => x.Acquire()).Returns(mockedConnection.Object); var service = new PooledIOService(mockedPool.Object, mockedSasl.Object); var op = new Add <string>(string.Empty, "", null, new DefaultTranscoder(new DefaultConverter()), 100); var result = service.Execute(op); Assert.AreEqual(ResponseStatus.ClientFailure, result.Status); }
public void When_EnhanchedDurability_Is_True_Hello_Requests_MutationSeqNo() { const ulong connectionId = 12345; var mockConnection = new Mock <IConnection>(); mockConnection.Setup(x => x.ConnectionId).Returns(connectionId); mockConnection.Setup(x => x.MustEnableServerFeatures).Returns(true); var mockConnectionPool = new Mock <IConnectionPool>(); mockConnectionPool.Setup(x => x.Acquire()).Returns(mockConnection.Object); mockConnectionPool.SetupGet(x => x.Configuration).Returns(new PoolConfiguration { UseEnhancedDurability = true, ClientConfiguration = new ClientConfiguration { Tracer = NullTracer.Instance } }); mockConnectionPool.Setup(x => x.Connections).Returns(new List <IConnection> { mockConnection.Object }); var service = new PooledIOService(mockConnectionPool.Object); service.Execute(new FakeOperationWithRequiredKey("key", null, new DefaultTranscoder(), 0)); var features = new[] { (short)ServerFeatures.SubdocXAttributes, (short)ServerFeatures.SelectBucket, (short)ServerFeatures.XError, (short)ServerFeatures.MutationSeqno, (short)ServerFeatures.ServerDuration }; var key = IOServiceBase.BuildHelloKey(connectionId); var expectedBytes = new Hello(key, features.ToArray(), new DefaultTranscoder(), 0, 0).Write(); mockConnectionPool.Verify(x => x.Acquire(), Times.Once); mockConnection.Verify(x => x.Send(It.Is <byte[]>(bytes => bytes.SequenceEqual(expectedBytes)))); }
public void Result_Has_UnknownError_Status_If_ErrorMap_Not_Available() { const string codeString = "2C"; // 44 var code = short.Parse(codeString, NumberStyles.HexNumber); var errorCode = new ErrorCode { name = "test" }; var errorMap = new ErrorMap { version = 1, revision = 1, errors = new Dictionary <string, ErrorCode>() }; var converter = new DefaultConverter(); var responseBytes = new byte[24]; converter.FromInt16(code, responseBytes, HeaderIndexFor.Status); var mockConnection = new Mock <IConnection>(); mockConnection.Setup(x => x.IsConnected).Returns(true); mockConnection.Setup(x => x.Send(It.IsAny <byte[]>())).Returns(responseBytes); var mockConnectionPool = new Mock <IConnectionPool>(); mockConnectionPool.Setup(x => x.Acquire()).Returns(mockConnection.Object); mockConnectionPool.SetupGet(x => x.Configuration).Returns(new PoolConfiguration()); var service = new PooledIOService(mockConnectionPool.Object); service.SetErrorMap(errorMap); var result = service.Execute(new FakeOperationWithRequiredKey("key", null, new DefaultTranscoder(), 0, 0)); Assert.AreEqual(ResponseStatus.UnknownError, result.Status); Assert.AreEqual(converter.ToString(responseBytes, 0, 24), result.Message); }
public void When_Operation_Fails_With_SocketException_TransportFailure_Is_Returned() { var mockedSasl = new Mock<ISaslMechanism>(); var mockedConnection = new Mock<IConnection>(); mockedConnection.Setup(x => x.Send(It.IsAny<byte[]>())).Throws<SocketException>(); mockedConnection.Setup(x => x.IsAuthenticated).Returns(true); var mockedPool = new Mock<IConnectionPool>(); mockedPool.Setup(x => x.Acquire()).Returns(mockedConnection.Object); var service = new PooledIOService(mockedPool.Object, mockedSasl.Object); var op = new Get<object>(string.Empty, null, new DefaultTranscoder(new DefaultConverter()), 100); var result = service.Execute(op); Assert.AreEqual(ResponseStatus.TransportFailure, result.Status); }