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)); }
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(); } }
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(); } }