コード例 #1
0
        public void Should_SendRequest_When_AConnectionIsObtained(bool currentHostRetry)
        {
            var mockSession          = Mock.Of <IInternalSession>();
            var mockRequest          = Mock.Of <IRequest>();
            var mockRequestExecution = Mock.Of <IRequestHandler>();
            var connection           = Mock.Of <IConnection>();
            var host = new Host(
                new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9047),
                new ConstantReconnectionPolicy(1));
            var validHost = ValidHost.New(
                host,
                HostDistance.Local);

            Mock.Get(mockRequestExecution)
            .Setup(m => m.GetConnectionToValidHostAsync(validHost, It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .ReturnsAsync(connection);
            Mock.Get(mockRequestExecution)
            .Setup(m => m.GetNextValidHost(It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .Returns(validHost);
            var sut = new ProxyRequestExecution(mockRequestExecution, mockSession, mockRequest);

            sut.Start(currentHostRetry);
            TestHelper.RetryAssert(
                () =>
            {
                Mock.Get(connection)
                .Verify(
                    c => c.Send(mockRequest, It.IsAny <Action <Exception, Response> >(), It.IsAny <int>()),
                    Times.Once);
            });
        }
コード例 #2
0
        public void ItBindsTheGlobalsCorrectly()
        {
            var host = new ValidHost();

            using (dynamic instance = Fixture.Module.Instantiate(host))
            {
                host.Int32Mut.Value.Should().Be(0);
                ((int)instance.get_global_i32_mut()).Should().Be(0);
                host.Int32.Value.Should().Be(1);
                ((int)instance.get_global_i32()).Should().Be(1);
                host.Int64Mut.Value.Should().Be(2);
                ((long)instance.get_global_i64_mut()).Should().Be(2);
                host.Int64.Value.Should().Be(3);
                ((long)instance.get_global_i64()).Should().Be(3);
                host.Float32Mut.Value.Should().Be(4);
                ((float)instance.get_global_f32_mut()).Should().Be(4);
                host.Float32.Value.Should().Be(5);
                ((float)instance.get_global_f32()).Should().Be(5);
                host.Float64Mut.Value.Should().Be(6);
                ((double)instance.get_global_f64_mut()).Should().Be(6);
                host.Float64.Value.Should().Be(7);
                ((double)instance.get_global_f64()).Should().Be(7);

                host.Int32Mut.Value = 10;
                host.Int32Mut.Value.Should().Be(10);
                ((int)instance.get_global_i32_mut()).Should().Be(10);
                instance.set_global_i32_mut(11);
                host.Int32Mut.Value.Should().Be(11);
                ((int)instance.get_global_i32_mut()).Should().Be(11);

                host.Int64Mut.Value = 12;
                host.Int64Mut.Value.Should().Be(12);
                ((long)instance.get_global_i64_mut()).Should().Be(12);
                instance.set_global_i64_mut(13);
                host.Int64Mut.Value.Should().Be(13);
                ((long)instance.get_global_i64_mut()).Should().Be(13);

                host.Float32Mut.Value = 14;
                host.Float32Mut.Value.Should().Be(14);
                ((float)instance.get_global_f32_mut()).Should().Be(14);
                instance.set_global_f32_mut(15);
                host.Float32Mut.Value.Should().Be(15);
                ((float)instance.get_global_f32_mut()).Should().Be(15);

                host.Float64Mut.Value = 16;
                host.Float64Mut.Value.Should().Be(16);
                ((double)instance.get_global_f64_mut()).Should().Be(16);
                instance.set_global_f64_mut(17);
                host.Float64Mut.Value.Should().Be(17);
                ((double)instance.get_global_f64_mut()).Should().Be(17);
            }
        }
コード例 #3
0
        public void Should_SendRequest_When_AConnectionIsObtained(bool currentHostRetry)
        {
            var mockSession           = Mock.Of <IInternalSession>();
            var requestHandlerFactory = Mock.Of <IRequestHandlerFactory>();

            Mock.Get(requestHandlerFactory)
            .Setup(r => r.Create(
                       It.IsAny <IInternalSession>(),
                       It.IsAny <ISerializer>(),
                       It.IsAny <IRequest>(),
                       It.IsAny <IStatement>(),
                       It.IsAny <IRequestOptions>()))
            .Returns(Mock.Of <IRequestHandler>());
            var config = new TestConfigurationBuilder
            {
                RequestHandlerFactory = requestHandlerFactory
            }.Build();

            Mock.Get(mockSession).SetupGet(m => m.Cluster.Configuration).Returns(config);
            var mockRequest = Mock.Of <IRequest>();
            var mockParent  = Mock.Of <IRequestHandler>();
            var connection  = Mock.Of <IConnection>();
            var host        = new Host(
                new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9047),
                new ConstantReconnectionPolicy(1));
            var validHost = ValidHost.New(
                host,
                HostDistance.Local);

            Mock.Get(mockParent)
            .Setup(m => m.GetConnectionToValidHostAsync(validHost, It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .ReturnsAsync(connection);
            Mock.Get(mockParent)
            .Setup(m => m.GetNextValidHost(It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .Returns(validHost);
            Mock.Get(mockParent)
            .Setup(m => m.RequestOptions)
            .Returns(config.DefaultRequestOptions);
            var sut = new RequestExecution(mockParent, mockSession, mockRequest, NullRequestObserver.Instance);

            sut.Start(currentHostRetry);
            TestHelper.RetryAssert(
                () =>
            {
                Mock.Get(connection)
                .Verify(
                    c => c.Send(mockRequest, It.IsAny <Action <IRequestError, Response> >(), It.IsAny <int>()),
                    Times.Once);
            });
        }
コード例 #4
0
        public void ItBindsTheGlobalsCorrectly()
        {
            var host = new ValidHost();

            using dynamic instance = Fixture.Module.Instantiate(host);

            host.Mem.ReadString(0, 11).Should().Be("Hello World");
            int written = host.Mem.WriteString(0, "WebAssembly Rocks!");

            host.Mem.ReadString(0, written).Should().Be("WebAssembly Rocks!");

            host.Mem.ReadByte(20).Should().Be(1);
            host.Mem.WriteByte(20, 11);
            host.Mem.ReadByte(20).Should().Be(11);
            ((byte)instance.ReadByte()).Should().Be(11);

            host.Mem.ReadInt16(21).Should().Be(2);
            host.Mem.WriteInt16(21, 12);
            host.Mem.ReadInt16(21).Should().Be(12);
            ((short)instance.ReadInt16()).Should().Be(12);

            host.Mem.ReadInt32(23).Should().Be(3);
            host.Mem.WriteInt32(23, 13);
            host.Mem.ReadInt32(23).Should().Be(13);
            ((int)instance.ReadInt32()).Should().Be(13);

            host.Mem.ReadInt64(27).Should().Be(4);
            host.Mem.WriteInt64(27, 14);
            host.Mem.ReadInt64(27).Should().Be(14);
            ((long)instance.ReadInt64()).Should().Be(14);

            host.Mem.ReadSingle(35).Should().Be(5);
            host.Mem.WriteSingle(35, 15);
            host.Mem.ReadSingle(35).Should().Be(15);
            ((float)instance.ReadFloat32()).Should().Be(15);

            host.Mem.ReadDouble(39).Should().Be(6);
            host.Mem.WriteDouble(39, 16);
            host.Mem.ReadDouble(39).Should().Be(16);
            ((double)instance.ReadFloat64()).Should().Be(16);

            host.Mem.ReadIntPtr(48).Should().Be((IntPtr)7);
            host.Mem.WriteIntPtr(48, (IntPtr)17);
            host.Mem.ReadIntPtr(48).Should().Be((IntPtr)17);
            ((IntPtr)instance.ReadIntPtr()).Should().Be((IntPtr)17);
        }
コード例 #5
0
        public void Should_NotThrowException_When_AValidHostIsObtained(bool currentHostRetry)
        {
            var mockSession          = Mock.Of <IInternalSession>();
            var mockRequest          = Mock.Of <IRequest>();
            var mockRequestExecution = Mock.Of <IRequestHandler>();
            var host = new Host(
                new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9047),
                new ConstantReconnectionPolicy(1));
            var validHost = ValidHost.New(
                host,
                HostDistance.Local);

            Mock.Get(mockRequestExecution)
            .SetupSequence(m => m.GetNextValidHost(It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .Returns(validHost)
            .Throws(new NoHostAvailableException(new Dictionary <IPEndPoint, Exception>()));
            var sut = new ProxyRequestExecution(mockRequestExecution, mockSession, mockRequest);

            sut.Start(currentHostRetry);
        }
コード例 #6
0
        public void Should_NotThrowException_When_AValidHostIsObtained(bool currentHostRetry)
        {
            var mockSession           = Mock.Of <IInternalSession>();
            var requestHandlerFactory = Mock.Of <IRequestHandlerFactory>();

            Mock.Get(requestHandlerFactory)
            .Setup(r => r.Create(
                       It.IsAny <IInternalSession>(),
                       It.IsAny <Serializer>(),
                       It.IsAny <IRequest>(),
                       It.IsAny <IStatement>()))
            .Returns(Mock.Of <IRequestHandler>());
            var config = new TestConfigurationBuilder
            {
                RequestHandlerFactory = requestHandlerFactory
            }.Build();

            Mock.Get(mockSession).SetupGet(m => m.Cluster.Configuration).Returns(config);
            Mock.Get(mockSession).SetupGet(m => m.Configuration).Returns(config);
            var mockRequest          = Mock.Of <IRequest>();
            var mockRequestExecution = Mock.Of <IRequestHandler>();
            var host = new Host(
                new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9047),
                new ConstantReconnectionPolicy(1));
            var validHost = ValidHost.New(
                host,
                HostDistance.Local);

            Mock.Get(mockRequestExecution)
            .SetupSequence(m => m.GetNextValidHost(It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .Returns(validHost)
            .Throws(new NoHostAvailableException(new Dictionary <IPEndPoint, Exception>()));
            var sut = new RequestExecution(mockRequestExecution, mockSession, mockRequest);

            sut.Start(currentHostRetry);
        }
コード例 #7
0
        public void Should_RetryRequestToSameHost_When_ConnectionFailsAndRetryDecisionIsRetrySameHost()
        {
            var mockSession = Mock.Of <IInternalSession>();
            var config      = new Configuration();

            Mock.Get(mockSession).SetupGet(m => m.Cluster.Configuration).Returns(config);
            var mockRequest = Mock.Of <IRequest>();
            var mockParent  = Mock.Of <IRequestHandler>();
            var connection  = Mock.Of <IConnection>();

            // Setup hosts
            var host = new Host(
                new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9047),
                new ConstantReconnectionPolicy(1));
            var validHost = ValidHost.New(
                host,
                HostDistance.Local);
            var secondHost = new Host(
                new IPEndPoint(IPAddress.Parse("127.0.0.2"), 9047),
                new ConstantReconnectionPolicy(1)); // second host should never be used if test passes
            var secondValidHost = ValidHost.New(
                secondHost,
                HostDistance.Local);

            // Setup query plan
            Mock.Get(mockParent)
            .SetupSequence(m => m.GetNextValidHost(It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .Returns(validHost)
            .Returns(secondValidHost);

            // Setup retry policy
            var exception = new OverloadedException(string.Empty);

            Mock.Get(mockParent)
            .SetupGet(m => m.RetryPolicy)
            .Returns(() =>
                     Mock.Of <IExtendedRetryPolicy>(a =>
                                                    a.OnRequestError(
                                                        It.IsAny <IStatement>(), config, exception, 0)
                                                    == RetryDecision.Retry(null, true)));

            // Setup connection failure
            Mock.Get(mockParent)
            .Setup(m => m.GetConnectionToValidHostAsync(validHost, It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .ThrowsAsync(exception);

            // Setup successful second connection on the same host retry (different method call - ValidateHostAndGetConnectionAsync)
            Mock.Get(mockParent)
            .Setup(m => m.ValidateHostAndGetConnectionAsync(validHost.Host, It.IsAny <Dictionary <IPEndPoint, Exception> >()))
            .ReturnsAsync(connection);

            var sut = new ProxyRequestExecution(mockParent, mockSession, mockRequest);

            sut.Start(false);

            // Validate request is sent
            TestHelper.RetryAssert(
                () =>
            {
                Mock.Get(connection).Verify(
                    c => c.Send(mockRequest, It.IsAny <Action <Exception, Response> >(), It.IsAny <int>()),
                    Times.Once);
            });

            // Validate that there were 2 connection attempts (1 with each method)
            Mock.Get(mockParent).Verify(
                m => m.GetConnectionToValidHostAsync(validHost, It.IsAny <Dictionary <IPEndPoint, Exception> >()),
                Times.Once);
            Mock.Get(mockParent).Verify(
                m => m.ValidateHostAndGetConnectionAsync(validHost.Host, It.IsAny <Dictionary <IPEndPoint, Exception> >()),
                Times.Once);
        }