2 * Copyright 2017 ZTE Corporation.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openo.holmes.common.utils;
19 import static org.easymock.EasyMock.anyObject;
20 import static org.easymock.EasyMock.expect;
21 import static org.hamcrest.core.IsEqual.equalTo;
22 import static org.junit.Assert.assertThat;
24 import io.dropwizard.db.DataSourceFactory;
25 import io.dropwizard.jdbi.DBIFactory;
26 import io.dropwizard.setup.Environment;
27 import org.easymock.EasyMock;
28 import org.junit.Before;
29 import org.junit.Rule;
30 import org.junit.Test;
31 import org.junit.rules.ExpectedException;
32 import org.powermock.api.easymock.PowerMock;
33 import org.powermock.modules.junit4.rule.PowerMockRule;
34 import org.powermock.reflect.Whitebox;
35 import org.skife.jdbi.v2.DBI;
36 import org.skife.jdbi.v2.Handle;
38 public class DbDaoUtilTest {
41 public PowerMockRule powerMockRule = new PowerMockRule();
43 public ExpectedException thrown = ExpectedException.none();
47 private Environment environmentProvider;
49 private DataSourceFactory dataSourceFactoryProvider;
51 private DbDaoUtil dbDaoUtil;
53 private DBIFactory factory;
56 public void before() throws Exception {
57 dbDaoUtil = new DbDaoUtil();
59 jdbi = PowerMock.createMock(DBI.class);
60 environmentProvider = PowerMock.createMock(Environment.class);
61 dataSourceFactoryProvider = PowerMock.createMock(DataSourceFactory.class);
62 factory = PowerMock.createMock(DBIFactory.class);
64 Whitebox.setInternalState(dbDaoUtil, "environmentProvider", environmentProvider);
65 Whitebox.setInternalState(dbDaoUtil, "dataSourceFactoryProvider",
66 dataSourceFactoryProvider);
67 Whitebox.setInternalState(dbDaoUtil, "factory", factory);
73 public void init() throws Exception {
74 DBI jdbi = PowerMock.createMock(DBI.class);
76 expect(factory.build(anyObject(Environment.class), anyObject(DataSourceFactory.class),
77 anyObject(String.class))).andReturn(jdbi);
79 PowerMock.replayAll();
83 PowerMock.verifyAll();
87 public void getDao_normal() throws Exception {
88 Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
89 expect(jdbi.open(anyObject(Class.class))).andReturn(Class.class);
91 PowerMock.replayAll();
93 dbDaoUtil.getDao(String.class);
95 PowerMock.verifyAll();
99 public void getDao_exception() throws Exception {
100 Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
102 expect(jdbi.open(anyObject(Class.class))).andThrow(new RuntimeException(""));
104 PowerMock.replayAll();
106 Object o = dbDaoUtil.getDao(String.class);
108 PowerMock.verifyAll();
110 assertThat(o, equalTo(null));
114 public void getHandle_normal() throws Exception {
115 Handle handle = PowerMock.createMock(Handle.class);
117 Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
118 expect(jdbi.open()).andReturn(handle);
120 PowerMock.replayAll();
122 dbDaoUtil.getHandle();
124 PowerMock.verifyAll();
127 public void getHandle_exception() throws Exception {
128 Handle handle = PowerMock.createMock(Handle.class);
130 Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
131 expect(jdbi.open()).andThrow(new RuntimeException(""));
133 PowerMock.replayAll();
135 Handle handle1 = dbDaoUtil.getHandle();
137 PowerMock.verifyAll();
139 assertThat(handle1, equalTo(null));
143 public void close_normal() throws Exception {
144 Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
145 jdbi.close(anyObject());
147 PowerMock.replayAll();
149 dbDaoUtil.close(new Object());
151 PowerMock.verifyAll();
155 public void close_exception() throws Exception {
156 Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
157 jdbi.close(anyObject());
158 EasyMock.expectLastCall().andThrow(new RuntimeException(""));
159 PowerMock.replayAll();
161 dbDaoUtil.close(new Object());
163 PowerMock.verifyAll();
166 public void testGetJdbiDaoByOnDemand() throws Exception {
167 Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
168 expect(jdbi.onDemand(anyObject(Class.class))).andReturn(Class.class);
170 PowerMock.replayAll();
172 dbDaoUtil.getJdbiDaoByOnDemand(String.class);
174 PowerMock.verifyAll();
178 public void testGetJdbiDaoByOpen() throws Exception {
179 Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
180 expect(jdbi.open(anyObject(Class.class))).andReturn(Class.class);
182 PowerMock.replayAll();
184 dbDaoUtil.getJdbiDaoByOpen(String.class);
186 PowerMock.verifyAll();