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