/* * 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.stat; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.stat.DruidStatService; import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.druid.util.JdbcUtils; import junit.framework.TestCase; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Collections; import java.util.List; import java.util.Map; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; /** * Multiple data source test case. */ public class DruidStatServiceTest2 extends TestCase { private DruidDataSource dataSource; private DruidDataSource dataSource2; // every test, two data source initialized. public void setUp() throws Exception { // DruidStatService is singleton, reset all for other testcase. DruidStatService.getInstance().service("/reset-all.json"); // mock datasource1 dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:xxx"); dataSource.setFilters("stat"); dataSource.setTestOnBorrow(false); dataSource.init(); // mock datasource2 dataSource2 = new DruidDataSource(); dataSource2.setUrl("jdbc:mock:xxx2"); dataSource2.setFilters("stat"); dataSource2.setTestOnBorrow(false); dataSource2.init(); } public void tearDown() throws Exception { JdbcUtils.close(dataSource); JdbcUtils.close(dataSource2); } public void test_statService_getSqlList() throws Exception { String sql = "select 1"; Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); rs.next(); Thread.sleep(1); rs.close(); stmt.close(); conn.close(); // second data source String sql2 = "select 1,1"; conn = dataSource2.getConnection(); stmt = conn.prepareStatement(sql2); rs = stmt.executeQuery(); rs.next(); Thread.sleep(1); rs.close(); stmt.close(); conn.close(); String result = DruidStatService.getInstance().service("/sql.json"); Map<String, Object> resultMap = (Map<String, Object>) JSONUtils.parse(result); List<Map<String, Object>> sqlList = (List<Map<String, Object>>) resultMap.get("Content"); assertThat(sqlList.size(), equalTo(2)); for (Map<String, Object> sqlStat : sqlList) { assertThat((Integer) sqlStat.get("RunningCount"), equalTo(0)); assertThat((Integer) sqlStat.get("ExecuteCount"), equalTo(1)); assertThat((Integer) sqlStat.get("FetchRowCount"), equalTo(1)); assertThat((Integer) sqlStat.get("EffectedRowCount"), equalTo(0)); } } public void test_statService_getSqlById() throws Exception { String sql = "select 1"; Connection conn = dataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); rs.next(); rs.close(); stmt.close(); conn.close(); // second data source String sql2 = "select 2"; conn = dataSource2.getConnection(); stmt = conn.prepareStatement(sql2); rs = stmt.executeQuery(); rs.next(); rs.close(); stmt.close(); conn.close(); long id = dataSource.getSqlStatMap().values().iterator().next().getId(); String result = DruidStatService.getInstance().service("/sql-" + id + ".json"); Map<String, Object> resultMap = (Map<String, Object>) JSONUtils.parse(result); Map<String, Object> sqlStat = (Map<String, Object>) resultMap.get("Content"); assertThat((Integer) sqlStat.get("RunningCount"), equalTo(0)); assertThat((Integer) sqlStat.get("ExecuteCount"), equalTo(1)); assertThat((Integer) sqlStat.get("FetchRowCount"), equalTo(1)); assertThat((Integer) sqlStat.get("EffectedRowCount"), equalTo(0)); assertThat((String) sqlStat.get("SQL"), equalTo(sql)); id = dataSource2.getSqlStatMap().values().iterator().next().getId(); result = DruidStatService.getInstance().service("/sql-" + id + ".json"); resultMap = (Map<String, Object>) JSONUtils.parse(result); sqlStat = (Map<String, Object>) resultMap.get("Content"); assertThat((Integer) sqlStat.get("RunningCount"), equalTo(0)); assertThat((Integer) sqlStat.get("ExecuteCount"), equalTo(1)); assertThat((Integer) sqlStat.get("FetchRowCount"), equalTo(1)); assertThat((Integer) sqlStat.get("EffectedRowCount"), equalTo(0)); assertThat((String) sqlStat.get("SQL"), equalTo(sql2)); String result2 = DruidStatService.getInstance().service("/sql-" + Integer.MAX_VALUE + ".json"); resultMap = (Map<String, Object>) JSONUtils.parse(result2); assertThat(resultMap.get("Content"), is(nullValue())); } public void test_statService_getDataSourceList() throws Exception { DruidStatService.getInstance().service("/reset-all.json"); String result = DruidStatService.getInstance().service("/datasource.json"); Map<String, Object> resultMap = (Map<String, Object>) JSONUtils.parse(result); List<Map<String, Object>> dataSourceList = (List<Map<String, Object>>) resultMap.get("Content"); assertThat(dataSourceList.size(), equalTo(2)); Map<String, Object> dataSourceStat = dataSourceList.get(0); assertThat((Integer) dataSourceStat.get("PoolingCount"), equalTo(0)); assertThat((Integer) dataSourceStat.get("ActiveCount"), equalTo(0)); } public void test_getWallStatMap() throws Exception { DruidStatService.getInstance().getWallStatMap(Collections.<String, String>emptyMap()); } }