/*
* Copyright 1999-2017 Alibaba Group Holding Ltd.
*
* 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.alibaba.druid.bvt.proxy;
import junit.framework.TestCase;
import org.apache.commons.logging.impl.Log4JLogger;
import org.apache.log4j.Priority;
import org.junit.Assert;
import com.alibaba.druid.filter.logging.CommonsLogFilter;
import com.alibaba.druid.filter.logging.LogFilter;
import com.alibaba.druid.proxy.DruidDriver;
import com.alibaba.druid.stat.JdbcStatManager;
public class CommonsLogFilterTest extends TestCase {
protected void tearDown() throws Exception {
DruidDriver.getProxyDataSources().clear();
Assert.assertEquals(0, JdbcStatManager.getInstance().getSqlList().size());
}
public void test_logger() throws Exception {
CommonsLogFilter filter = new CommonsLogFilter();
filter.setDataSourceLoggerName("_datasource_name_");
filter.setConnectionLoggerName("_connection_name_");
filter.setStatementLoggerName("_statement_name_");
filter.setResultSetLoggerName("_resultset_name_");
Assert.assertEquals(filter.getDataSourceLoggerName(), "_datasource_name_");
Assert.assertEquals(filter.getConnectionLoggerName(), "_connection_name_");
Assert.assertEquals(filter.getStatementLoggerName(), "_statement_name_");
Assert.assertEquals(filter.getResultSetLoggerName(), "_resultset_name_");
filter.setDataSourceLogger(new FakeLogger("_datasoure_", true));
filter.setConnectionLogger(new FakeLogger("_connection_", true));
filter.setStatementLogger(new FakeLogger("_statement_", true));
filter.setResultSetLogger(new FakeLogger("_resultset_", true));
Assert.assertEquals(filter.getDataSourceLoggerName(), "_datasoure_");
Assert.assertEquals(filter.getConnectionLoggerName(), "_connection_");
Assert.assertEquals(filter.getStatementLoggerName(), "_statement_");
Assert.assertEquals(filter.getResultSetLoggerName(), "_resultset_");
setLogEnableAll(filter, true);
Assert.assertTrue(filter.isDataSourceLogEnabled());
Assert.assertTrue(filter.isConnectionLogEnabled());
Assert.assertTrue(filter.isConnectionLogErrorEnabled());
Assert.assertTrue(filter.isConnectionConnectBeforeLogEnabled());
Assert.assertTrue(filter.isConnectionConnectAfterLogEnabled());
Assert.assertTrue(filter.isConnectionCloseAfterLogEnabled());
Assert.assertTrue(filter.isConnectionCommitAfterLogEnabled());
Assert.assertTrue(filter.isConnectionRollbackAfterLogEnabled());
Assert.assertTrue(filter.isStatementLogEnabled());
Assert.assertTrue(filter.isStatementLogErrorEnabled());
Assert.assertTrue(filter.isStatementCreateAfterLogEnabled());
Assert.assertTrue(filter.isStatementCloseAfterLogEnabled());
Assert.assertTrue(filter.isStatementExecuteAfterLogEnabled());
Assert.assertTrue(filter.isStatementExecuteBatchAfterLogEnabled());
Assert.assertTrue(filter.isStatementExecuteQueryAfterLogEnabled());
Assert.assertTrue(filter.isStatementExecuteUpdateAfterLogEnabled());
Assert.assertTrue(filter.isStatementLogErrorEnabled());
Assert.assertTrue(filter.isStatementParameterSetLogEnabled());
Assert.assertTrue(filter.isStatementPrepareAfterLogEnabled());
Assert.assertTrue(filter.isStatementPrepareCallAfterLogEnabled());
Assert.assertTrue(filter.isResultSetLogEnabled());
Assert.assertTrue(filter.isResultSetLogErrorEnabled());
Assert.assertTrue(filter.isResultSetCloseAfterLogEnabled());
Assert.assertTrue(filter.isResultSetNextAfterLogEnabled());
Assert.assertTrue(filter.isResultSetOpenAfterLogEnabled());
// ////
filter.setDataSourceLogger(new FakeLogger("_datasoure_", false));
filter.setConnectionLogger(new FakeLogger("_connection_", false));
filter.setStatementLogger(new FakeLogger("_statement_", false));
filter.setResultSetLogger(new FakeLogger("_resultset_", false));
Assert.assertFalse(filter.isDataSourceLogEnabled());
Assert.assertFalse(filter.isConnectionLogEnabled());
Assert.assertFalse(filter.isConnectionLogErrorEnabled());
Assert.assertFalse(filter.isConnectionConnectBeforeLogEnabled());
Assert.assertFalse(filter.isConnectionConnectAfterLogEnabled());
Assert.assertFalse(filter.isConnectionCloseAfterLogEnabled());
Assert.assertFalse(filter.isConnectionCommitAfterLogEnabled());
Assert.assertFalse(filter.isConnectionRollbackAfterLogEnabled());
Assert.assertFalse(filter.isStatementLogEnabled());
Assert.assertFalse(filter.isStatementLogErrorEnabled());
Assert.assertFalse(filter.isStatementCreateAfterLogEnabled());
Assert.assertFalse(filter.isStatementCloseAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteBatchAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteQueryAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteUpdateAfterLogEnabled());
Assert.assertFalse(filter.isStatementLogErrorEnabled());
Assert.assertFalse(filter.isStatementParameterSetLogEnabled());
Assert.assertFalse(filter.isStatementPrepareAfterLogEnabled());
Assert.assertFalse(filter.isStatementPrepareCallAfterLogEnabled());
Assert.assertFalse(filter.isResultSetLogEnabled());
Assert.assertFalse(filter.isResultSetLogErrorEnabled());
Assert.assertFalse(filter.isResultSetCloseAfterLogEnabled());
Assert.assertFalse(filter.isResultSetNextAfterLogEnabled());
Assert.assertFalse(filter.isResultSetOpenAfterLogEnabled());
// ////////////////////////////////////////
// ////////////////////////////////////////
// ////////////////////////////////////////
setLogEnableAll(filter, false);
// ////
filter.setDataSourceLogger(null);
filter.setConnectionLogger(null);
filter.setStatementLogger(null);
filter.setResultSetLogger(null);
filter.setDataSourceLogger(new FakeLogger("_datasoure_", false));
filter.setConnectionLogger(new FakeLogger("_connection_", false));
filter.setStatementLogger(new FakeLogger("_statement_", false));
filter.setResultSetLogger(new FakeLogger("_resultset_", false));
filter.setStatementLogErrorEnabled(true);
Assert.assertFalse(filter.isStatementLogErrorEnabled());
filter.setStatementLogErrorEnabled(false);
Assert.assertFalse(filter.isStatementLogErrorEnabled());
Assert.assertFalse(filter.isDataSourceLogEnabled());
Assert.assertFalse(filter.isConnectionLogEnabled());
Assert.assertFalse(filter.isConnectionLogErrorEnabled());
Assert.assertFalse(filter.isConnectionConnectBeforeLogEnabled());
Assert.assertFalse(filter.isConnectionConnectAfterLogEnabled());
Assert.assertFalse(filter.isConnectionCloseAfterLogEnabled());
Assert.assertFalse(filter.isConnectionCommitAfterLogEnabled());
Assert.assertFalse(filter.isConnectionRollbackAfterLogEnabled());
Assert.assertFalse(filter.isStatementLogEnabled());
Assert.assertFalse(filter.isStatementLogErrorEnabled());
Assert.assertFalse(filter.isStatementCreateAfterLogEnabled());
Assert.assertFalse(filter.isStatementCloseAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteBatchAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteQueryAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteUpdateAfterLogEnabled());
Assert.assertFalse(filter.isStatementLogErrorEnabled());
Assert.assertFalse(filter.isStatementParameterSetLogEnabled());
Assert.assertFalse(filter.isStatementPrepareAfterLogEnabled());
Assert.assertFalse(filter.isStatementPrepareCallAfterLogEnabled());
Assert.assertFalse(filter.isResultSetLogEnabled());
Assert.assertFalse(filter.isResultSetLogErrorEnabled());
Assert.assertFalse(filter.isResultSetCloseAfterLogEnabled());
Assert.assertFalse(filter.isResultSetNextAfterLogEnabled());
Assert.assertFalse(filter.isResultSetOpenAfterLogEnabled());
// //
// ////
filter.setDataSourceLogger(new FakeLogger("_datasoure_", true));
filter.setConnectionLogger(new FakeLogger("_connection_", true));
filter.setStatementLogger(new FakeLogger("_statement_", true));
filter.setResultSetLogger(new FakeLogger("_resultset_", true));
Assert.assertFalse(filter.isConnectionLogEnabled());
Assert.assertFalse(filter.isStatementLogEnabled());
Assert.assertFalse(filter.isResultSetLogEnabled());
Assert.assertFalse(filter.isStatementLogErrorEnabled());
filter.setStatementLogErrorEnabled(true);
Assert.assertTrue(filter.isStatementLogErrorEnabled());
filter.setStatementLogErrorEnabled(false);
filter.setConnectionLogEnabled(true);
filter.setStatementLogEnabled(true);
filter.setResultSetLogEnabled(true);
Assert.assertFalse(filter.isDataSourceLogEnabled());
Assert.assertFalse(filter.isConnectionLogErrorEnabled());
Assert.assertFalse(filter.isConnectionConnectBeforeLogEnabled());
Assert.assertFalse(filter.isConnectionConnectAfterLogEnabled());
Assert.assertFalse(filter.isConnectionCloseAfterLogEnabled());
Assert.assertFalse(filter.isConnectionCommitAfterLogEnabled());
Assert.assertFalse(filter.isConnectionRollbackAfterLogEnabled());
Assert.assertFalse(filter.isStatementLogErrorEnabled());
Assert.assertFalse(filter.isStatementCreateAfterLogEnabled());
Assert.assertFalse(filter.isStatementCloseAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteBatchAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteQueryAfterLogEnabled());
Assert.assertFalse(filter.isStatementExecuteUpdateAfterLogEnabled());
Assert.assertFalse(filter.isStatementLogErrorEnabled());
Assert.assertFalse(filter.isStatementParameterSetLogEnabled());
Assert.assertFalse(filter.isStatementPrepareAfterLogEnabled());
Assert.assertFalse(filter.isStatementPrepareCallAfterLogEnabled());
Assert.assertFalse(filter.isResultSetLogErrorEnabled());
Assert.assertFalse(filter.isResultSetCloseAfterLogEnabled());
Assert.assertFalse(filter.isResultSetNextAfterLogEnabled());
Assert.assertFalse(filter.isResultSetOpenAfterLogEnabled());
}
@SuppressWarnings("serial")
public static class FakeLogger extends Log4JLogger {
private boolean enable;
public FakeLogger(String name, boolean enable){
super(name);
this.enable = enable;
}
public boolean isDebugEnabled() {
return this.enable;
}
public boolean isErrorEnabled() {
return this.enable;
}
public boolean isEnabledFor(Priority level) {
return this.enable;
}
}
private void setLogEnableAll(LogFilter logFilter, boolean enable) {
logFilter.setDataSourceLogEnabled(enable);
logFilter.setConnectionLogEnabled(enable);
logFilter.setConnectionLogErrorEnabled(enable);
logFilter.setConnectionRollbackAfterLogEnabled(enable);
logFilter.setConnectionConnectBeforeLogEnabled(enable);
logFilter.setConnectionConnectAfterLogEnabled(enable);
logFilter.setConnectionCommitAfterLogEnabled(enable);
logFilter.setConnectionCloseAfterLogEnabled(enable);
logFilter.setStatementLogEnabled(enable);
logFilter.setStatementLogErrorEnabled(enable);
logFilter.setStatementCreateAfterLogEnabled(enable);
logFilter.setStatementExecuteAfterLogEnabled(enable);
logFilter.setStatementExecuteBatchAfterLogEnabled(enable);
logFilter.setStatementExecuteQueryAfterLogEnabled(enable);
logFilter.setStatementExecuteUpdateAfterLogEnabled(enable);
logFilter.setStatementPrepareCallAfterLogEnabled(enable);
logFilter.setStatementPrepareAfterLogEnabled(enable);
logFilter.setStatementCloseAfterLogEnabled(enable);
logFilter.setStatementParameterSetLogEnabled(enable);
logFilter.setResultSetLogEnabled(enable);
logFilter.setResultSetOpenAfterLogEnabled(enable);
logFilter.setResultSetNextAfterLogEnabled(enable);
logFilter.setResultSetLogErrorEnabled(enable);
logFilter.setResultSetCloseAfterLogEnabled(enable);
}
}