Ejemplo n.º 1
0
        public async Task Should_UseStatementSettings_When_StatementSettingsAreSet(RequestTypeTestCase requestType)
        {
            var lbpCluster  = new FakeLoadBalancingPolicy();
            var sepCluster  = new FakeSpeculativeExecutionPolicy();
            var rpCluster   = new FakeRetryPolicy();
            var lbp         = new FakeLoadBalancingPolicy();
            var sep         = new FakeSpeculativeExecutionPolicy();
            var rp          = new FakeRetryPolicy();
            var rpStatement = new FakeRetryPolicy();
            var profile     = ((ExecutionProfileBuilder) new ExecutionProfileBuilder()
                               .WithConsistencyLevel(ConsistencyLevel.All)
                               .WithSerialConsistencyLevel(ConsistencyLevel.Serial)
                               .WithReadTimeoutMillis(50)
                               .WithLoadBalancingPolicy(lbp)
                               .WithSpeculativeExecutionPolicy(sep)
                               .WithRetryPolicy(rp)
                               ).Build();

            var mockResult = BuildRequestHandler(
                BuildStatement(requestType)
                .SetIdempotence(true)
                .SetConsistencyLevel(ConsistencyLevel.EachQuorum)
                .SetReadTimeoutMillis(400)
                .SetSerialConsistencyLevel(ConsistencyLevel.LocalSerial)
                .SetRetryPolicy(rpStatement),
                builder =>
            {
                builder.QueryOptions =
                    new QueryOptions()
                    .SetConsistencyLevel(ConsistencyLevel.LocalOne)
                    .SetSerialConsistencyLevel(ConsistencyLevel.LocalSerial);
                builder.SocketOptions =
                    new SocketOptions().SetReadTimeoutMillis(10);
                builder.Policies = new Cassandra.Policies(
                    lbpCluster, new ConstantReconnectionPolicy(5), rpCluster, sepCluster, new AtomicMonotonicTimestampGenerator());
            },
                profile);

            await mockResult.RequestHandler.SendAsync().ConfigureAwait(false);

            var results = mockResult.SendResults.ToArray();

            Assert.GreaterOrEqual(results.Length, 1);
            var timeouts = results.Select(r => r.TimeoutMillis).ToList();

            Assert.Greater(results.Length, 0);
            Assert.AreEqual(ConsistencyLevel.EachQuorum, GetConsistencyLevels(requestType, results).Distinct().Single());
            Assert.AreEqual(ConsistencyLevel.LocalSerial, GetSerialConsistencyLevels(requestType, results).Distinct().Single());
            Assert.AreEqual(400, timeouts.Distinct().Single());

            Assert.Greater(Interlocked.Read(ref lbp.Count), 0);
            Assert.Greater(Interlocked.Read(ref sep.Count), 0);
            Assert.Greater(Interlocked.Read(ref rpStatement.Count), 0);
            Assert.AreEqual(0, Interlocked.Read(ref lbpCluster.Count));
            Assert.AreEqual(0, Interlocked.Read(ref sepCluster.Count));
            Assert.AreEqual(0, Interlocked.Read(ref rpCluster.Count));
            Assert.AreEqual(0, Interlocked.Read(ref rp.Count));
        }
Ejemplo n.º 2
0
        private IEnumerable <ConsistencyLevel> GetSerialConsistencyLevels(RequestTypeTestCase testCase, ConnectionSendResult[] results)
        {
            switch (testCase)
            {
            case RequestTypeTestCase.Batch:
                return(results.Select(r => ((BatchRequest)r.Request).SerialConsistency));

            case RequestTypeTestCase.Bound:
                return(results.Select(r => ((ExecuteRequest)r.Request).SerialConsistency));

            case RequestTypeTestCase.Simple:
                return(results.Select(r => ((QueryRequest)r.Request).SerialConsistency));

            default:
                throw new InvalidOperationException();
            }
        }
Ejemplo n.º 3
0
        private IStatement BuildStatement(RequestTypeTestCase testCase)
        {
            switch (testCase)
            {
            case RequestTypeTestCase.Batch:
                return(new BatchStatement());

            case RequestTypeTestCase.Bound:
                var mockPs = Mock.Of <PreparedStatement>();
                var bs     = new BoundStatement(mockPs);
                return(bs);

            case RequestTypeTestCase.Simple:
                return(new SimpleStatement("select"));

            default:
                throw new InvalidOperationException();
            }
        }