/**
* Copyright (c) 2009-2011 VMware, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.springsource.insight.plugin.cassandra;
import com.datastax.driver.core.*;
import com.datastax.driver.core.querybuilder.Insert;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.springsource.insight.collection.OperationCollectionAspectSupport;
import com.springsource.insight.collection.test.OperationCollectionAspectTestSupport;
import com.springsource.insight.intercept.operation.Operation;
import com.springsource.insight.intercept.operation.OperationMap;
import org.junit.Test;
import java.nio.ByteBuffer;
import java.util.Date;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
public class CassandraSessionExecuteOperationCollectionAspectTest extends OperationCollectionAspectTestSupport {
@Test
public void testExecuteQuery() {
Session session = new MockSession();
String cqlQuery = "SELECT * FROM keyspace.table";
session.execute(cqlQuery);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", cqlQuery, cql);
assertEquals("keyspace", session.getLoggedKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE,String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME,String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Test
public void testExecuteQueryWithArgs() {
Session session = new MockSession();
String cqlQuery = "SELECT * FROM keyspace.table";
session.execute(cqlQuery,"arg1", new Date(), UUID.randomUUID());
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", cqlQuery, cql);
assertEquals("keyspace", session.getLoggedKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
OperationMap params = operation.get(CassandraOperationFinalizer.PARAMS_VALUES, OperationMap.class);
assertNotNull(params);
assertEquals("params", params.size(), 3);
}
@Test
public void testExecuteBoundStatement() {
Session session = new MockSession();
PreparedStatement preparedStatement = new MockPreparedStatement();
BoundStatement boundStatement = preparedStatement.bind();
session.execute(boundStatement);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", preparedStatement.getQueryString(), cql);
assertEquals("keyspace", boundStatement.getKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Test
public void testExecuteSimpleStatement() {
Session session = new MockSession();
String queryString = "SELECT * FROM keyspace.table;";
SimpleStatement simple = new SimpleStatement(queryString);
simple.setKeyspace("LoggedKeyspace");
session.execute(simple);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", queryString, cql);
assertEquals("keyspace", simple.getKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Test
public void testExecuteBatchStatement() {
Session session = new MockSession();
String queryString1 = "SELECT * FROM keyspace1.table1;";
SimpleStatement simple1 = new SimpleStatement(queryString1);
String queryString2 = "SELECT * FROM keyspace1.table2;";
SimpleStatement simple2 = new SimpleStatement(queryString2);
BatchStatement batch = new BatchStatement();
batch.add(simple1);
batch.add(simple2);
session.execute(batch);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", CassandraOperationFinalizer.UNKNOWN_CQL + " BATCH ", cql);
assertEquals("keyspace", session.getLoggedKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Test
public void testExecuteRegularStatement() {
Session session = new MockSession();
TestRegularStatement regularStatement = new TestRegularStatement();
session.execute(regularStatement);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", regularStatement.getQueryString(), cql);
assertEquals("keyspace", regularStatement.getKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Test
public void testExecuteBuiltStatement() {
Session session = new MockSession();
Insert insert = QueryBuilder.insertInto("keyspace", "table")
.ifNotExists().value("foo", "bar");
session.execute(insert);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", insert.getQueryString(), cql);
assertEquals("keyspace", insert.getKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Test
public void testExecuteAsyncQuery() {
Session session = new MockSession();
String cqlQuery = "SELECT * FROM keyspace.table";
session.executeAsync(cqlQuery);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", cqlQuery, cql);
assertEquals("keyspace", session.getLoggedKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE,String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME,String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Test
public void testExecuteAsyncQueryWithArgs() {
Session session = new MockSession();
String cqlQuery = "SELECT * FROM keyspace.table";
session.executeAsync(cqlQuery, "arg1", new Date(), UUID.randomUUID());
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", cqlQuery, cql);
assertEquals("keyspace", session.getLoggedKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
OperationMap params = operation.get(CassandraOperationFinalizer.PARAMS_VALUES, OperationMap.class);
assertNotNull(params);
assertEquals("params", params.size(), 3);
}
@Test
public void testExecuteAsyncBoundStatement() {
Session session = new MockSession();
PreparedStatement preparedStatement = new MockPreparedStatement();
BoundStatement boundStatement = preparedStatement.bind();
session.executeAsync(boundStatement);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", preparedStatement.getQueryString(), cql);
assertEquals("keyspace", boundStatement.getKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Test
public void testExecuteAsyncBuiltStatement() {
Session session = new MockSession();
Insert insert = QueryBuilder.insertInto("keyspace", "table")
.ifNotExists().value("foo", "bar");
session.executeAsync(insert);
assertEquals(0,CassandraOperationFinalizer.storage.size());
Operation operation = getLastEntered();
assertNotNull(operation);
assertNotNull(operation.getLabel());
assertEquals("OperationType", CassandraExternalResourceAnalyzer.TYPE, operation.getType());
String cql = operation.get("cql", String.class);
assertEquals("cql", insert.getQueryString(), cql);
assertEquals("keyspace", insert.getKeyspace(), operation.get(CassandraOperationFinalizer.KEYSPACE, String.class));
assertEquals("clustername", session.getCluster().getMetadata().getClusterName(), operation.get(CassandraOperationFinalizer.CLUSTER_NAME, String.class));
assertEquals("port", session.getCluster().getConfiguration().getProtocolOptions().getPort(), operation.getInt(CassandraOperationFinalizer.PORT, -1));
}
@Override
public OperationCollectionAspectSupport getAspect() {
return CassandraSessionExecuteOperationCollectionAspect.aspectOf();
}
private static class TestRegularStatement extends RegularStatement {
@Override
public String getQueryString() {
return "SELECT * from keyspace.table;";
}
@Override
public ByteBuffer[] getValues() {
return new ByteBuffer[0];
}
@Override
public ByteBuffer getRoutingKey() {
return null;
}
@Override
public String getKeyspace() {
return "Keyspace";
}
}
}