public void RetryPolicy_Extended(string resultError, Type exceptionType)
        {
            _scassandraManager = SCassandraManager.Instance;
            var extendedRetryPolicy = new TestExtendedRetryPolicy();
            var builder             = Cluster.Builder()
                                      .AddContactPoint("127.0.0.1")
                                      .WithPort(_scassandraManager.BinaryPort)
                                      .WithRetryPolicy(extendedRetryPolicy)
                                      .WithReconnectionPolicy(new ConstantReconnectionPolicy(long.MaxValue));

            using (var cluster = builder.Build())
            {
                var          session = (Session)cluster.Connect();
                const string cql     = "select * from table1";
                _scassandraManager.PrimeQuery(cql, "{\"result\" : \"" + resultError + "\"}").Wait();
                Exception throwedException = null;
                try
                {
                    session.Execute(cql);
                }
                catch (Exception ex)
                {
                    throwedException = ex;
                }
                finally
                {
                    Assert.NotNull(throwedException);
                    Assert.AreEqual(throwedException.GetType(), exceptionType);
                    Assert.AreEqual(1, Interlocked.Read(ref extendedRetryPolicy.RequestErrorConter));
                    Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.ReadTimeoutCounter));
                    Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.WriteTimeoutCounter));
                    Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.UnavailableCounter));
                }
            }
        }
        public void RetryPolicy_Extended(string resultError, Type exceptionType)
        {
            using (var simulacronCluster = SimulacronCluster.CreateNew(new SimulacronOptions()))
            {
                var contactPoint        = simulacronCluster.InitialContactPoint;
                var extendedRetryPolicy = new TestExtendedRetryPolicy();
                var builder             = Cluster.Builder()
                                          .AddContactPoint(contactPoint)
                                          .WithRetryPolicy(extendedRetryPolicy)
                                          .WithReconnectionPolicy(new ConstantReconnectionPolicy(long.MaxValue));
                using (var cluster = builder.Build())
                {
                    var          session = (Session)cluster.Connect();
                    const string cql     = "select * from table1";

                    var primeQuery = new
                    {
                        when = new { query = cql },
                        then = new
                        {
                            result            = resultError,
                            delay_in_ms       = 0,
                            message           = resultError,
                            ignore_on_prepare = false
                        }
                    };

                    simulacronCluster.Prime(primeQuery);
                    Exception throwedException = null;
                    try
                    {
                        session.Execute(cql);
                    }
                    catch (Exception ex)
                    {
                        throwedException = ex;
                    }
                    finally
                    {
                        Assert.NotNull(throwedException);
                        Assert.AreEqual(throwedException.GetType(), exceptionType);
                        Assert.AreEqual(1, Interlocked.Read(ref extendedRetryPolicy.RequestErrorConter));
                        Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.ReadTimeoutCounter));
                        Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.WriteTimeoutCounter));
                        Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.UnavailableCounter));
                    }
                }
            }
        }
        public void RetryPolicy_Extended(ServerError resultError, Type exceptionType)
        {
            using (var simulacronCluster = SimulacronCluster.CreateNew(new SimulacronOptions()))
            {
                var contactPoint        = simulacronCluster.InitialContactPoint;
                var extendedRetryPolicy = new TestExtendedRetryPolicy();
                var builder             = Cluster.Builder()
                                          .AddContactPoint(contactPoint)
                                          .WithRetryPolicy(extendedRetryPolicy)
                                          .WithReconnectionPolicy(new ConstantReconnectionPolicy(long.MaxValue));
                using (var cluster = builder.Build())
                {
                    var          session = (Session)cluster.Connect();
                    const string cql     = "select * from table1";

                    simulacronCluster.PrimeFluent(b => b.WhenQuery(cql).ThenServerError(resultError, resultError.Value));
                    Exception throwedException = null;
                    try
                    {
                        session.Execute(cql);
                    }
                    catch (Exception ex)
                    {
                        throwedException = ex;
                    }
                    finally
                    {
                        Assert.NotNull(throwedException);
                        Assert.AreEqual(throwedException.GetType(), exceptionType);
                        Assert.AreEqual(1, Interlocked.Read(ref extendedRetryPolicy.RequestErrorConter));
                        Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.ReadTimeoutCounter));
                        Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.WriteTimeoutCounter));
                        Assert.AreEqual(0, Interlocked.Read(ref extendedRetryPolicy.UnavailableCounter));
                    }
                }
            }
        }