public void CassandraAny_Ssl()
        {
            CcmCluster testCluster = GetTestCcmClusterForAuthTests();

            var sslOptions = new SSLOptions()
                             .SetRemoteCertValidationCallback((s, cert, chain, policyErrors) =>
            {
                if (policyErrors == SslPolicyErrors.RemoteCertificateChainErrors &&
                    chain.ChainStatus.Length == 1 &&
                    chain.ChainStatus[0].Status == X509ChainStatusFlags.UntrustedRoot)
                {
                    //self issued
                    return(true);
                }
                return(policyErrors == SslPolicyErrors.None);
            });

            using (var cluster = Cluster
                                 .Builder()
                                 .AddContactPoint(testCluster.InitialContactPoint)
                                 .WithCredentials("cassandra", "cassandra")
                                 .WithSSL(sslOptions)
                                 .Build())
            {
                var session = cluster.Connect();
                var rs      = session.Execute("SELECT * FROM system.schema_keyspaces");
                Assert.Greater(rs.Count(), 0);
            }
        }
        private CcmCluster GetTestCcmClusterForAuthTests()
        {
            CcmCluster customTestCluster = (CcmCluster)TestClusterManager.GetNonShareableTestCluster(1, DefaultMaxClusterCreateRetries, false);

            customTestCluster.CcmBridge.ExecuteCcm("updateconf \"authenticator: PasswordAuthenticator\"", 3000, true);
            customTestCluster.CcmBridge.Start();
            return(customTestCluster);
        }
Example #3
0
        public void Parallel_Insert_And_Select_Sync_With_Nodes_Failing()
        {
            var originalTraceLevel = Diagnostics.CassandraTraceSwitch.Level;

            Diagnostics.CassandraTraceSwitch.Level = TraceLevel.Warning;
            Cluster.Builder()
            .WithRetryPolicy(DowngradingConsistencyRetryPolicy.Instance);
            CcmCluster ccmCluster   = (CcmCluster)TestClusterManager.GetTestCluster(3);
            var        session      = ccmCluster.Session;
            string     uniqueKsName = "keyspace_" + Randomm.RandomAlphaNum(10);

            session.Execute(@"CREATE KEYSPACE " + uniqueKsName +
                            " WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};");
            TestUtils.WaitForSchemaAgreement(ccmCluster.Cluster);
            session.ChangeKeyspace(uniqueKsName);

            string tableName = "table_" + Guid.NewGuid().ToString("N").ToLower();

            session.Execute(String.Format(TestUtils.CREATE_TABLE_TIME_SERIES, tableName));
            TestUtils.WaitForSchemaAgreement(ccmCluster.Cluster);

            var insertQuery         = String.Format("INSERT INTO {0} (id, event_time, text_sample) VALUES (?, ?, ?)", tableName);
            var insertQueryPrepared = session.Prepare(insertQuery);
            var selectQuery         = String.Format("SELECT * FROM {0} LIMIT 10000", tableName);

            const int rowsPerId            = 100;
            object    insertQueryStatement = new SimpleStatement(insertQuery);

            if (CassandraVersion.Major < 2)
            {
                //Use prepared statements all the way as it is not possible to bind on a simple statement with C* 1.2
                insertQueryStatement = session.Prepare(insertQuery);
            }
            var actionInsert         = GetInsertAction(session, insertQueryStatement, ConsistencyLevel.Quorum, rowsPerId);
            var actionInsertPrepared = GetInsertAction(session, insertQueryPrepared, ConsistencyLevel.Quorum, rowsPerId);
            var actionSelect         = GetSelectAction(session, selectQuery, ConsistencyLevel.Quorum, 10);

            //Execute insert sync to have some records
            actionInsert();
            //Execute select sync to assert that everything is going OK
            actionSelect();

            var actions = new List <Action>();

            for (var i = 0; i < 10; i++)
            {
                //Add 10 actions to execute
                actions.AddRange(new[] { actionInsert, actionSelect, actionInsertPrepared });
                actions.AddRange(new[] { actionSelect, actionInsert, actionInsertPrepared, actionInsert });
                actions.AddRange(new[] { actionInsertPrepared, actionInsertPrepared, actionSelect });
            }

            actions.Insert(8, () =>
            {
                Thread.Sleep(300);
                ccmCluster.CcmBridge.StopForce(2);
            });

            //Execute in parallel more than 100 actions
            var parallelOptions = new ParallelOptions();

            parallelOptions.TaskScheduler          = new ThreadPerTaskScheduler();
            parallelOptions.MaxDegreeOfParallelism = 1000;
            Parallel.Invoke(parallelOptions, actions.ToArray());
            Diagnostics.CassandraTraceSwitch.Level = originalTraceLevel;
        }