/**
* 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.jdbc;
import org.junit.Test;
import com.springsource.insight.collection.test.AbstractCollectionTestSupport;
import com.springsource.insight.intercept.operation.Operation;
import com.springsource.insight.intercept.operation.OperationList;
import com.springsource.insight.intercept.operation.OperationMap;
import com.springsource.insight.intercept.operation.SourceCodeLocation;
public class JdbcOperationFinalizerTest extends AbstractCollectionTestSupport {
public JdbcOperationFinalizerTest() {
super();
}
@Test
public void testSetParameterInSequence() {
Operation operation = getTestOperation("testSetParameterInSequence");
JdbcOperationFinalizer.addParam(operation, 1, "a"); // this is 1-based index
JdbcOperationFinalizer.addParam(operation, 2, "b"); // this is 1-based index
JdbcOperationFinalizer.finalize(operation);
OperationList params = operation.get(JdbcOperationFinalizer.PARAMS_VALUES, OperationList.class);
assertNotNull("Missing parameters list", params);
assertEquals("Mismatched number of parameters", 2, params.size());
assertEquals("Mismatched 1st parameter", "a", params.get(0));
assertEquals("Mismatched 2nd parameter", "b", params.get(1));
}
@Test
public void testSetParameterOutOfSequence() {
Operation operation = getTestOperation("testSetParameterOutOfSequence");
JdbcOperationFinalizer.addParam(operation, 2, "b"); // this is 1-based index
JdbcOperationFinalizer.addParam(operation, 1, "a"); // this is 1-based index
JdbcOperationFinalizer.finalize(operation);
OperationList params = operation.get(JdbcOperationFinalizer.PARAMS_VALUES, OperationList.class);
assertNotNull("Missing parameters list", params);
assertEquals("Mismatched number of parameters", 2, params.size());
assertEquals("Mismatched 1st parameter", "a", params.get(0));
assertEquals("Mismatched 2nd parameter", "b", params.get(1));
}
@Test
public void testSetMappedParameter() {
Operation operation = getTestOperation("testSetMappedParameter");
JdbcOperationFinalizer.addParam(operation, "key1", "value1");
JdbcOperationFinalizer.addParam(operation, "key2", "value2");
JdbcOperationFinalizer.finalize(operation);
OperationMap params = operation.get(JdbcOperationFinalizer.PARAMS_VALUES, OperationMap.class);
assertNotNull("Missing parameters map", params);
assertEquals("Mismatched mapped params size", 2, params.size());
assertEquals("Mismatched 1st key value", "value1", params.get("key1"));
assertEquals("Mismatched 2nd key value", "value2", params.get("key2"));
}
@Test
public void testMappedParamsValuesClearedBetweenSuccessiveInvocations() {
Operation operation = getTestOperation("testMappedParamsValuesClearedBetweenSuccessiveInvocations");
JdbcOperationFinalizer.addParam(operation, "key1", "value1");
JdbcOperationFinalizer.addParam(operation, "key2", "value2");
JdbcOperationFinalizer.finalize(operation);
OperationMap params = operation.get(JdbcOperationFinalizer.PARAMS_VALUES, OperationMap.class);
assertNotNull("Missing parameters map", params);
JdbcOperationFinalizer.finalize(operation);
assertNullValue("Unexpected parameters map", operation.get(JdbcOperationFinalizer.PARAMS_VALUES));
}
@Test
public void testIndexedParamsValuesClearedBetweenSuccessiveInvocations() {
Operation operation = getTestOperation("testIndexedParamsValuesClearedBetweenSuccessiveInvocations");
JdbcOperationFinalizer.addParam(operation, 1, "a"); // this is 1-based index
JdbcOperationFinalizer.addParam(operation, 2, "b"); // this is 1-based index
JdbcOperationFinalizer.finalize(operation);
OperationList params = operation.get(JdbcOperationFinalizer.PARAMS_VALUES, OperationList.class);
assertNotNull("Missing parameters list", params);
JdbcOperationFinalizer.finalize(operation);
assertNullValue("Unexpected parameters list", operation.get(JdbcOperationFinalizer.PARAMS_VALUES));
}
@Test
public void testCreateLabelSelect() {
assertEquals("JDBC SELECT (TABLE)", JdbcOperationFinalizer.createLabel("select * from table"));
assertEquals("JDBC SELECT (TABLE)", JdbcOperationFinalizer.createLabel("select * from table t"));
assertEquals("JDBC SELECT (TABLE)", JdbcOperationFinalizer.createLabel("select * from table t where x"));
assertEquals("JDBC SELECT", JdbcOperationFinalizer.createLabel("SELECT * FROM"));
}
@Test
public void testCreateLabelInsert() {
assertEquals("JDBC INSERT (TABLE)", JdbcOperationFinalizer.createLabel("insert into table values ..."));
assertEquals("JDBC INSERT (TABLE)", JdbcOperationFinalizer.createLabel("insert into table"));
assertEquals("JDBC INSERT", JdbcOperationFinalizer.createLabel("INSERT INTO"));
}
@Test
public void testCreateLabelDelete() {
assertEquals("JDBC DELETE (TABLE)", JdbcOperationFinalizer.createLabel("delete from table where ..."));
assertEquals("JDBC DELETE (TABLE)", JdbcOperationFinalizer.createLabel("delete from table"));
assertEquals("JDBC DELETE", JdbcOperationFinalizer.createLabel("DELETE FROM"));
}
@Test
public void testCreateLabelUpdate() {
assertEquals("JDBC UPDATE (TABLE)", JdbcOperationFinalizer.createLabel("update table set ..."));
assertEquals("JDBC UPDATE (TABLE)", JdbcOperationFinalizer.createLabel("update table"));
assertEquals("JDBC UPDATE", JdbcOperationFinalizer.createLabel("UPDATE"));
}
@Test
public void testCreateLabelCall() {
assertEquals("JDBC CALL (FUNC)", JdbcOperationFinalizer.createLabel("CALL func args"));
assertEquals("JDBC CALL (FUNC)", JdbcOperationFinalizer.createLabel("CALL func"));
assertEquals("JDBC CALL", JdbcOperationFinalizer.createLabel("CALL"));
}
@Test
public void testCreateLabelCheckpoint() {
assertEquals("JDBC CHECKPOINT", JdbcOperationFinalizer.createLabel("CHECKPOINT"));
assertEquals("JDBC CHECKPOINT", JdbcOperationFinalizer.createLabel("CHECKPOINT FUBAR"));
}
@Test
public void testCreateLabelCreateTable() {
assertEquals("JDBC CREATE TABLE (FUBAR)", JdbcOperationFinalizer.createLabel("CREATE TABLE FUBAR(BAZ)"));
assertEquals("JDBC CREATE TABLE", JdbcOperationFinalizer.createLabel("CREATE TABLE"));
}
@Test
public void testCreateLabelAlterTable() {
assertEquals("JDBC ALTER TABLE (FUBAR)", JdbcOperationFinalizer.createLabel("alter table fubar modify column x"));
assertEquals("JDBC ALTER TABLE", JdbcOperationFinalizer.createLabel("ALTER TABLE"));
}
@Test
public void testCreateLabelDropTable() {
assertEquals("JDBC DROP TABLE (FUBAR)", JdbcOperationFinalizer.createLabel("drop table fubar purge erase"));
assertEquals("JDBC DROP TABLE", JdbcOperationFinalizer.createLabel("drop table"));
}
@Test
public void testCreateLabelCreateIndex() {
assertEquals("JDBC CREATE INDEX (FUBAR)", JdbcOperationFinalizer.createLabel("create index fubar(baz)"));
assertEquals("JDBC CREATE INDEX", JdbcOperationFinalizer.createLabel("CREATE INDEX"));
assertEquals("JDBC CREATE UNIQUE INDEX (BARFO)", JdbcOperationFinalizer.createLabel("create unique index barfo(blah)"));
assertEquals("JDBC CREATE UNIQUE INDEX", JdbcOperationFinalizer.createLabel("CREATE UNIQUE INDEX"));
}
@Test
public void testCreateLabelDml() {
assertEquals("JDBC DML", JdbcOperationFinalizer.createLabel("CREATE INMEMORY TABLE FUBAR(BAZ)"));
assertEquals("JDBC DML", JdbcOperationFinalizer.createLabel("CREATE USER BARFO"));
}
@Test
public void testCreateLabelStatement() {
assertEquals("JDBC STATEMENT", JdbcOperationFinalizer.createLabel("ALTER MY DRESS"));
}
private Operation getTestOperation(String methodName) {
return new Operation()
.type(JdbcOperationExternalResourceAnalyzer.TYPE)
.label(methodName)
.sourceCodeLocation(new SourceCodeLocation(getClass().getName(), methodName, -1))
;
}
}