Fix sonnar obstruction
[holmes/common.git] / holmes-actions / src / test / java / org / openo / holmes / common / utils / DbDaoUtilTest.java
1 /**
2  * Copyright 2017 ZTE Corporation.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.openo.holmes.common.utils;
18
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;
23
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;
37
38 public class DbDaoUtilTest {
39
40     @Rule
41     public PowerMockRule powerMockRule = new PowerMockRule();
42     @Rule
43     public ExpectedException thrown = ExpectedException.none();
44
45     private DBI jdbi;
46
47     private Environment environmentProvider;
48
49     private DataSourceFactory dataSourceFactoryProvider;
50
51     private DbDaoUtil dbDaoUtil;
52
53     private DBIFactory factory;
54
55     @Before
56     public void before() throws Exception {
57         dbDaoUtil = new DbDaoUtil();
58
59         jdbi = PowerMock.createMock(DBI.class);
60         environmentProvider = PowerMock.createMock(Environment.class);
61         dataSourceFactoryProvider = PowerMock.createMock(DataSourceFactory.class);
62         factory = PowerMock.createMock(DBIFactory.class);
63
64         Whitebox.setInternalState(dbDaoUtil, "environmentProvider", environmentProvider);
65         Whitebox.setInternalState(dbDaoUtil, "dataSourceFactoryProvider",
66                 dataSourceFactoryProvider);
67         Whitebox.setInternalState(dbDaoUtil, "factory", factory);
68
69         PowerMock.resetAll();
70     }
71
72     @Test
73     public void init() throws Exception {
74         DBI jdbi = PowerMock.createMock(DBI.class);
75
76         expect(factory.build(anyObject(Environment.class), anyObject(DataSourceFactory.class),
77                 anyObject(String.class))).andReturn(jdbi);
78
79         PowerMock.replayAll();
80
81         dbDaoUtil.init();
82
83         PowerMock.verifyAll();
84     }
85
86     @Test
87     public void getDao_normal() throws Exception {
88         Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
89         expect(jdbi.open(anyObject(Class.class))).andReturn(Class.class);
90
91         PowerMock.replayAll();
92
93         dbDaoUtil.getDao(String.class);
94
95         PowerMock.verifyAll();
96     }
97
98     @Test
99     public void getDao_exception() throws Exception {
100         Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
101
102         expect(jdbi.open(anyObject(Class.class))).andThrow(new RuntimeException(""));
103
104         PowerMock.replayAll();
105
106         Object o = dbDaoUtil.getDao(String.class);
107
108         PowerMock.verifyAll();
109
110         assertThat(o, equalTo(null));
111     }
112
113     @Test
114     public void getHandle_normal() throws Exception {
115         Handle handle = PowerMock.createMock(Handle.class);
116
117         Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
118         expect(jdbi.open()).andReturn(handle);
119
120         PowerMock.replayAll();
121
122         dbDaoUtil.getHandle();
123
124         PowerMock.verifyAll();
125     }
126     @Test
127     public void getHandle_exception() throws Exception {
128         Handle handle = PowerMock.createMock(Handle.class);
129
130         Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
131         expect(jdbi.open()).andThrow(new RuntimeException(""));
132
133         PowerMock.replayAll();
134
135         Handle handle1 = dbDaoUtil.getHandle();
136
137         PowerMock.verifyAll();
138
139         assertThat(handle1, equalTo(null));
140     }
141
142     @Test
143     public void close_normal() throws Exception {
144         Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
145         jdbi.close(anyObject());
146
147         PowerMock.replayAll();
148
149         dbDaoUtil.close(new Object());
150
151         PowerMock.verifyAll();
152     }
153
154     @Test
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();
160
161         dbDaoUtil.close(new Object());
162
163         PowerMock.verifyAll();
164     }
165     @Test
166     public void testGetJdbiDaoByOnDemand() throws Exception {
167         Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
168         expect(jdbi.onDemand(anyObject(Class.class))).andReturn(Class.class);
169
170         PowerMock.replayAll();
171
172         dbDaoUtil.getJdbiDaoByOnDemand(String.class);
173
174         PowerMock.verifyAll();
175     }
176
177     @Test
178     public void testGetJdbiDaoByOpen() throws Exception {
179         Whitebox.setInternalState(dbDaoUtil, "jdbi", jdbi);
180         expect(jdbi.open(anyObject(Class.class))).andReturn(Class.class);
181
182         PowerMock.replayAll();
183
184         dbDaoUtil.getJdbiDaoByOpen(String.class);
185
186         PowerMock.verifyAll();
187     }
188 }