/*
* Copyright 2015 NAVER Corp.
*
* 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.navercorp.pinpoint.plugin.mybatis;
import static com.navercorp.pinpoint.bootstrap.plugin.test.Expectations.event;
import java.lang.reflect.Method;
import org.apache.ibatis.executor.result.DefaultResultHandler;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import com.navercorp.pinpoint.bootstrap.plugin.test.Expectations;
import com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifier;
import com.navercorp.pinpoint.bootstrap.plugin.test.PluginTestVerifierHolder;
/**
* @author HyunGil Jeong
*/
public abstract class SqlSessionTestBase {
protected abstract SqlSession getSqlSession();
protected final void testAndVerifyInsertWithNullParameter() throws Exception {
// Given
SqlSession sqlSession = getSqlSession();
// When
sqlSession.insert(null);
// Then
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
Method insert = sqlSession.getClass().getDeclaredMethod("insert", String.class);
verifier.verifyTrace(event("MYBATIS", insert));
}
protected final void testAndVerifySelect() throws Exception {
// Given
final String selectId = "selectId";
SqlSession sqlSession = getSqlSession();
// When
sqlSession.select(selectId, new DefaultResultHandler());
sqlSession.select(selectId, new Object(), new DefaultResultHandler());
sqlSession.select(selectId, new Object(), RowBounds.DEFAULT, new DefaultResultHandler());
// Then
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
Method select1 = sqlSession.getClass().getDeclaredMethod("select", String.class, ResultHandler.class);
verifier.verifyTrace(event("MYBATIS", select1, Expectations.cachedArgs(selectId)));
Method select2 = sqlSession.getClass().getDeclaredMethod("select", String.class, Object.class,
ResultHandler.class);
verifier.verifyTrace(event("MYBATIS", select2, Expectations.cachedArgs(selectId)));
Method select3 = sqlSession.getClass().getDeclaredMethod("select", String.class, Object.class, RowBounds.class,
ResultHandler.class);
verifier.verifyTrace(event("MYBATIS", select3, Expectations.cachedArgs(selectId)));
}
protected final void testAndVerifySelectOne() throws Exception {
// Given
final String selectOneId = "selectOneId";
SqlSession sqlSession = getSqlSession();
// When
sqlSession.selectOne(selectOneId);
sqlSession.selectOne(selectOneId, new Object());
// Then
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
Method selectOne1 = sqlSession.getClass().getDeclaredMethod("selectOne", String.class);
Method selectOne2 = sqlSession.getClass().getDeclaredMethod("selectOne", String.class, Object.class);
verifier.verifyTrace(event("MYBATIS", selectOne1, Expectations.cachedArgs(selectOneId)));
verifier.verifyTrace(event("MYBATIS", selectOne2, Expectations.cachedArgs(selectOneId)));
}
protected final void testAndVerifySelectList() throws Exception {
// Given
final String selectListId = "selectListId";
SqlSession sqlSession = getSqlSession();
// When
sqlSession.selectList(selectListId);
sqlSession.selectList(selectListId, new Object());
sqlSession.selectList(selectListId, new Object(), RowBounds.DEFAULT);
// Then
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
Method selectList1 = sqlSession.getClass().getDeclaredMethod("selectList", String.class);
Method selectList2 = sqlSession.getClass().getDeclaredMethod("selectList", String.class, Object.class);
Method selectList3 = sqlSession.getClass().getDeclaredMethod("selectList", String.class, Object.class,
RowBounds.class);
verifier.verifyTrace(event("MYBATIS", selectList1, Expectations.cachedArgs(selectListId)));
verifier.verifyTrace(event("MYBATIS", selectList2, Expectations.cachedArgs(selectListId)));
verifier.verifyTrace(event("MYBATIS", selectList3, Expectations.cachedArgs(selectListId)));
}
protected final void testAndVerifySelectMap() throws Exception {
// Given
final String selectMapId = "selectListId";
SqlSession sqlSession = getSqlSession();
// When
sqlSession.selectMap(selectMapId, "key");
sqlSession.selectMap(selectMapId, new Object(), "key");
sqlSession.selectMap(selectMapId, new Object(), "key", RowBounds.DEFAULT);
// Then
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
Method selectMap1 = sqlSession.getClass().getDeclaredMethod("selectMap", String.class, String.class);
Method selectMap2 = sqlSession.getClass().getDeclaredMethod("selectMap", String.class, Object.class,
String.class);
Method selectMap3 = sqlSession.getClass().getDeclaredMethod("selectMap", String.class, Object.class,
String.class, RowBounds.class);
verifier.verifyTrace(event("MYBATIS", selectMap1, Expectations.cachedArgs(selectMapId)));
verifier.verifyTrace(event("MYBATIS", selectMap2, Expectations.cachedArgs(selectMapId)));
verifier.verifyTrace(event("MYBATIS", selectMap3, Expectations.cachedArgs(selectMapId)));
}
protected final void testAndVerifyInsert() throws Exception {
// Given
final String insertId = "insertId";
SqlSession sqlSession = getSqlSession();
// When
sqlSession.insert(insertId);
sqlSession.insert(insertId, new Object());
// Then
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
Method insert1 = sqlSession.getClass().getDeclaredMethod("insert", String.class);
Method insert2 = sqlSession.getClass().getDeclaredMethod("insert", String.class, Object.class);
verifier.verifyTrace(event("MYBATIS", insert1, Expectations.cachedArgs(insertId)));
verifier.verifyTrace(event("MYBATIS", insert2, Expectations.cachedArgs(insertId)));
}
protected final void testAndVerifyUpdate() throws Exception {
// Given
final String updateId = "updateId";
SqlSession sqlSession = getSqlSession();
// When
sqlSession.update(updateId);
sqlSession.update(updateId, new Object());
// Then
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
Method update1 = sqlSession.getClass().getDeclaredMethod("update", String.class);
Method update2 = sqlSession.getClass().getDeclaredMethod("update", String.class, Object.class);
verifier.verifyTrace(event("MYBATIS", update1, Expectations.cachedArgs(updateId)));
verifier.verifyTrace(event("MYBATIS", update2, Expectations.cachedArgs(updateId)));
}
protected final void testAndVerifyDelete() throws Exception {
// Given
final String deleteId = "deleteId";
SqlSession sqlSession = getSqlSession();
// When
sqlSession.delete(deleteId);
sqlSession.delete(deleteId, new Object());
// Then
PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
Method delete1 = sqlSession.getClass().getDeclaredMethod("delete", String.class);
Method delete2 = sqlSession.getClass().getDeclaredMethod("delete", String.class, Object.class);
verifier.verifyTrace(event("MYBATIS", delete1, Expectations.cachedArgs(deleteId)));
verifier.verifyTrace(event("MYBATIS", delete2, Expectations.cachedArgs(deleteId)));
}
}