/mq-biz/src/test/java/com/ppdai/infrastructure/mq/biz/service/impl/DbNodeServiceImplTest.java

https://github.com/ppdaicorp/pmq · Java · 339 lines · 292 code · 42 blank · 5 comment · 10 complexity · ffe50934e7f6dd130980e0657f4610d7 MD5 · raw file

  1. package com.ppdai.infrastructure.mq.biz.service.impl;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.mockito.Mockito.doThrow;
  4. import static org.mockito.Mockito.mock;
  5. import static org.mockito.Mockito.reset;
  6. import static org.mockito.Mockito.when;
  7. import java.sql.SQLException;
  8. import java.util.Arrays;
  9. import java.util.HashMap;
  10. import java.util.Map;
  11. import javax.sql.DataSource;
  12. import org.junit.Before;
  13. import org.junit.Test;
  14. import org.junit.runner.RunWith;
  15. import org.junit.runners.JUnit4;
  16. import org.springframework.test.util.ReflectionTestUtils;
  17. import com.alibaba.druid.pool.DruidDataSource;
  18. import com.ppdai.infrastructure.mq.biz.AbstractTest;
  19. import com.ppdai.infrastructure.mq.biz.dal.meta.DbNodeRepository;
  20. import com.ppdai.infrastructure.mq.biz.entity.DbNodeEntity;
  21. import com.ppdai.infrastructure.mq.biz.entity.LastUpdateEntity;
  22. @RunWith(JUnit4.class)
  23. public class DbNodeServiceImplTest extends AbstractTest {
  24. private DbNodeRepository dbNodeRepository;
  25. private DbNodeServiceImpl dbNodeServiceImpl;
  26. @Before
  27. public void init() {
  28. dbNodeServiceImpl = new DbNodeServiceImpl();
  29. object = dbNodeServiceImpl;
  30. dbNodeRepository = mockAndSet(DbNodeRepository.class);
  31. super.init();
  32. ReflectionTestUtils.setField(object, "soaConfig", soaConfig);
  33. dbNodeServiceImpl.init();
  34. }
  35. @Test
  36. public void updateDbPropertiesTest() {
  37. Map<String, DataSource> dbCacheMap = new HashMap<String, DataSource>();
  38. dbCacheMap.put("test", new DruidDataSource());
  39. dbNodeServiceImpl.cacheDataMap.set(dbCacheMap);
  40. setProperty("mq.db.initCount", "11");
  41. setProperty("mq.db.maxCount", "200");
  42. dbNodeServiceImpl.updateDbProperties();
  43. setProperty("mq.db.initCount", "12");
  44. dbNodeServiceImpl.updateDbProperties();
  45. setProperty("mq.db.maxCount", "201");
  46. dbNodeServiceImpl.updateDbProperties();
  47. }
  48. @Test
  49. public void checkChangedTest() {
  50. assertEquals(true, dbNodeServiceImpl.checkChanged());
  51. LastUpdateEntity lastUpdateEntity = new LastUpdateEntity();
  52. lastUpdateEntity.setCount(1);
  53. lastUpdateEntity.setMaxId(2L);
  54. when(dbNodeRepository.getLastUpdate()).thenReturn(lastUpdateEntity);
  55. assertEquals(true, dbNodeServiceImpl.checkChanged());
  56. lastUpdateEntity = new LastUpdateEntity();
  57. lastUpdateEntity.setCount(11);
  58. lastUpdateEntity.setMaxId(2L);
  59. dbNodeServiceImpl.lastUpdateEntity = lastUpdateEntity;
  60. assertEquals(true, dbNodeServiceImpl.checkChanged());
  61. doThrow(new RuntimeException("test")).when(dbNodeRepository).getLastUpdate();
  62. assertEquals(true, dbNodeServiceImpl.checkChanged());
  63. }
  64. @Test
  65. public void stopTest() {
  66. dbNodeServiceImpl.stop();
  67. assertEquals(false, dbNodeServiceImpl.isRunning);
  68. }
  69. @Test
  70. public void checkDataSourceTest() throws SQLException {
  71. DruidDataSource dataSource = mock(DruidDataSource.class);
  72. DbNodeServiceImpl.DataSourceFactory dataSourceFactory = new DbNodeServiceImpl.DataSourceFactory() {
  73. @Override
  74. public DruidDataSource createDataSource() {
  75. // TODO Auto-generated method stub
  76. return dataSource;
  77. }
  78. };
  79. dbNodeServiceImpl.setDataSourceFactory(dataSourceFactory);
  80. DbNodeEntity dbNodeEntity = new DbNodeEntity();
  81. boolean flag = false;
  82. try {
  83. dbNodeServiceImpl.checkDataSource(dbNodeEntity);
  84. } catch (Exception e) {
  85. flag = true;
  86. }
  87. assertEquals(false, flag);
  88. doThrow(new SQLException("tet")).when(dataSource).init();
  89. flag = false;
  90. try {
  91. dbNodeServiceImpl.checkDataSource(dbNodeEntity);
  92. } catch (Exception e) {
  93. flag = true;
  94. }
  95. assertEquals(true, flag);
  96. }
  97. @Test
  98. public void checkSlaveTest() throws SQLException {
  99. DruidDataSource dataSource = mock(DruidDataSource.class);
  100. DbNodeServiceImpl.DataSourceFactory dataSourceFactory = new DbNodeServiceImpl.DataSourceFactory() {
  101. @Override
  102. public DruidDataSource createDataSource() {
  103. // TODO Auto-generated method stub
  104. return dataSource;
  105. }
  106. };
  107. dbNodeServiceImpl.setDataSourceFactory(dataSourceFactory);
  108. DbNodeEntity dbNodeEntity = new DbNodeEntity();
  109. dbNodeEntity.setIpBak("faf");
  110. dbNodeEntity.setDbUserNameBak("fa");
  111. dbNodeEntity.setDbPassBak("faf");
  112. dbNodeEntity.setPortBak(3);
  113. doThrow(new SQLException("tet")).when(dataSource).init();
  114. boolean flag = false;
  115. try {
  116. dbNodeServiceImpl.checkSlave(dbNodeEntity);
  117. } catch (Exception e) {
  118. flag = true;
  119. }
  120. assertEquals(true, flag);
  121. flag = false;
  122. reset(dataSource);
  123. try {
  124. dbNodeServiceImpl.checkSlave(dbNodeEntity);
  125. } catch (Exception e) {
  126. flag = true;
  127. }
  128. assertEquals(false, flag);
  129. flag = false;
  130. dbNodeEntity.setDbPassBak("");
  131. try {
  132. dbNodeServiceImpl.checkSlave(dbNodeEntity);
  133. } catch (Exception e) {
  134. flag = true;
  135. }
  136. assertEquals(false, flag);
  137. }
  138. @Test
  139. public void createDataSourceTest() throws SQLException {
  140. DruidDataSource dataSource = mock(DruidDataSource.class);
  141. DbNodeServiceImpl.DataSourceFactory dataSourceFactory = new DbNodeServiceImpl.DataSourceFactory() {
  142. @Override
  143. public DruidDataSource createDataSource() {
  144. // TODO Auto-generated method stub
  145. return dataSource;
  146. }
  147. };
  148. dbNodeServiceImpl.setDataSourceFactory(dataSourceFactory);
  149. DbNodeEntity dbNodeEntity = new DbNodeEntity();
  150. dbNodeEntity.setIp("fasaf");
  151. dbNodeEntity.setDbUserName("faf");
  152. dbNodeEntity.setDbPass("aff");
  153. dbNodeEntity.setPort(2342);
  154. dbNodeEntity.setIpBak("faf");
  155. dbNodeEntity.setDbUserNameBak("fa");
  156. dbNodeEntity.setDbPassBak("faf");
  157. dbNodeEntity.setPortBak(3);
  158. dbNodeServiceImpl.createDataSource(dbNodeEntity);
  159. dbNodeServiceImpl.createDataSource(dbNodeEntity);
  160. assertEquals(true, dbNodeServiceImpl.cacheDataMap.get().size() == 2);
  161. doThrow(new SQLException()).when(dataSource).init();
  162. dbNodeServiceImpl.dbCreated.clear();
  163. dbNodeServiceImpl.cacheDataMap.set(new HashMap<String, DataSource>());
  164. dbNodeServiceImpl.createDataSource(dbNodeEntity);
  165. assertEquals(true, dbNodeServiceImpl.cacheDataMap.get().size() == 0);
  166. }
  167. @Test
  168. public void otherTest() {
  169. dbNodeServiceImpl.stopPortal();
  170. dbNodeServiceImpl.startPortal();
  171. dbNodeServiceImpl.info();
  172. dbNodeServiceImpl.getCacheJson();
  173. dbNodeServiceImpl.getDataSource();
  174. dbNodeServiceImpl.getCacheByIp();
  175. dbNodeServiceImpl.getCache();
  176. }
  177. @Test
  178. public void getDataSourceTest() {
  179. //dbNodeServiceImpl.isPortal = true;
  180. setProperty("mq.db.ip.cat", "1");
  181. Map<Long, DbNodeEntity> data = new HashMap<Long, DbNodeEntity>(); // cacheNodeMap.get();
  182. DbNodeEntity dbNodeEntity = new DbNodeEntity();
  183. dbNodeEntity.setIp("fasaf");
  184. dbNodeEntity.setDbUserName("faf");
  185. dbNodeEntity.setDbPass("aff");
  186. dbNodeEntity.setPort(2342);
  187. dbNodeEntity.setIpBak("faf");
  188. dbNodeEntity.setDbUserNameBak("fa");
  189. dbNodeEntity.setDbPassBak("faf");
  190. dbNodeEntity.setPortBak(3);
  191. dbNodeEntity.setId(1);
  192. data.put(1L, dbNodeEntity);
  193. Map<String, DataSource> datasourceMap = new HashMap<String, DataSource>();
  194. datasourceMap.put(dbNodeServiceImpl.getConKey(dbNodeEntity, true), new DruidDataSource());
  195. datasourceMap.put(dbNodeServiceImpl.getConKey(dbNodeEntity, false), new DruidDataSource());
  196. dbNodeServiceImpl.cacheDataMap.set(datasourceMap);
  197. dbNodeServiceImpl.cacheNodeMap.set(data);
  198. assertEquals(true, dbNodeServiceImpl.getDataSource(1, true) != null);
  199. assertEquals(true, dbNodeServiceImpl.getDataSource(1, false) != null);
  200. }
  201. @Test
  202. public void getDataSource1Test() {
  203. dbNodeServiceImpl.isPortal = true;
  204. setProperty("mq.db.ip.cat", "1");
  205. Map<Long, DbNodeEntity> data = new HashMap<Long, DbNodeEntity>(); // cacheNodeMap.get();
  206. DbNodeEntity dbNodeEntity = new DbNodeEntity();
  207. dbNodeEntity.setIp("fasaf");
  208. dbNodeEntity.setDbUserName("faf");
  209. dbNodeEntity.setDbPass("aff");
  210. dbNodeEntity.setPort(2342);
  211. dbNodeEntity.setId(1);
  212. data.put(1L, dbNodeEntity);
  213. Map<String, DataSource> datasourceMap = new HashMap<String, DataSource>();
  214. datasourceMap.put(dbNodeServiceImpl.getConKey(dbNodeEntity, true), new DruidDataSource());
  215. datasourceMap.put(dbNodeServiceImpl.getConKey(dbNodeEntity, false), new DruidDataSource());
  216. dbNodeServiceImpl.cacheDataMap.set(datasourceMap);
  217. dbNodeServiceImpl.cacheNodeMap.set(data);
  218. assertEquals(true, dbNodeServiceImpl.getDataSource(1, true) != null);
  219. assertEquals(true, dbNodeServiceImpl.getDataSource(1, false) != null);
  220. }
  221. @Test
  222. public void getDataSource2Test() {
  223. dbNodeServiceImpl.isPortal = true;
  224. setProperty("mq.db.ip.cat", "1");
  225. Map<Long, DbNodeEntity> data = new HashMap<Long, DbNodeEntity>(); // cacheNodeMap.get();
  226. DbNodeEntity dbNodeEntity = new DbNodeEntity();
  227. dbNodeEntity.setIp("fasaf");
  228. dbNodeEntity.setDbUserName("faf");
  229. dbNodeEntity.setDbPass("aff");
  230. dbNodeEntity.setPort(2342);
  231. dbNodeEntity.setId(1);
  232. data.put(1L, dbNodeEntity);
  233. Map<String, DataSource> datasourceMap = new HashMap<String, DataSource>();
  234. datasourceMap.put(dbNodeServiceImpl.getConKey(dbNodeEntity, true), new DruidDataSource());
  235. datasourceMap.put(dbNodeServiceImpl.getConKey(dbNodeEntity, false), new DruidDataSource());
  236. assertEquals(true, dbNodeServiceImpl.getDataSource(1, true) == null);
  237. assertEquals(true, dbNodeServiceImpl.getDataSource(1, false) == null);
  238. }
  239. @Test
  240. public void getDataSourc3eTest() {
  241. dbNodeServiceImpl.isPortal = true;
  242. setProperty("mq.db.ip.cat", "1");
  243. Map<Long, DbNodeEntity> data = new HashMap<Long, DbNodeEntity>(); // cacheNodeMap.get();
  244. DbNodeEntity dbNodeEntity = new DbNodeEntity();
  245. dbNodeEntity.setIp("fasaf");
  246. dbNodeEntity.setDbUserName("faf");
  247. dbNodeEntity.setDbPass("aff");
  248. dbNodeEntity.setPort(2342);
  249. dbNodeEntity.setIpBak("faf");
  250. dbNodeEntity.setDbUserNameBak("fa");
  251. dbNodeEntity.setDbPassBak("faf");
  252. dbNodeEntity.setPortBak(3);
  253. dbNodeEntity.setId(1);
  254. data.put(1L, dbNodeEntity);
  255. Map<String, DataSource> datasourceMap = new HashMap<String, DataSource>();
  256. datasourceMap.put(dbNodeServiceImpl.getConKey(dbNodeEntity, true), new DruidDataSource());
  257. datasourceMap.put(dbNodeServiceImpl.getConKey(dbNodeEntity, false)+"2", new DruidDataSource());
  258. dbNodeServiceImpl.cacheDataMap.set(datasourceMap);
  259. dbNodeServiceImpl.cacheNodeMap.set(data);
  260. assertEquals(true, dbNodeServiceImpl.getDataSource(1, true) != null);
  261. assertEquals(true, dbNodeServiceImpl.getDataSource(1, false) != null);
  262. }
  263. @Test
  264. public void forceUpdateCacheTest() {
  265. DruidDataSource dataSource = mock(DruidDataSource.class);
  266. DbNodeServiceImpl.DataSourceFactory dataSourceFactory = new DbNodeServiceImpl.DataSourceFactory() {
  267. @Override
  268. public DruidDataSource createDataSource() {
  269. // TODO Auto-generated method stub
  270. return dataSource;
  271. }
  272. };
  273. dbNodeServiceImpl.setDataSourceFactory(dataSourceFactory);
  274. DbNodeEntity dbNodeEntity = new DbNodeEntity();
  275. dbNodeEntity.setIp("fasaf");
  276. dbNodeEntity.setDbUserName("faf");
  277. dbNodeEntity.setDbPass("aff");
  278. dbNodeEntity.setPort(2342);
  279. dbNodeEntity.setIpBak("faf");
  280. dbNodeEntity.setDbUserNameBak("fa");
  281. dbNodeEntity.setDbPassBak("faf");
  282. dbNodeEntity.setPortBak(3);
  283. dbNodeEntity.setId(1);
  284. DbNodeEntity dbNodeEntity1 = new DbNodeEntity();
  285. dbNodeEntity1.setIp("fasaf");
  286. dbNodeEntity1.setDbUserName("fa34f");
  287. dbNodeEntity1.setDbPass("af234f");
  288. dbNodeEntity1.setPort(2342);
  289. dbNodeEntity1.setIpBak("faf");
  290. dbNodeEntity1.setDbUserNameBak("f234a");
  291. dbNodeEntity1.setDbPassBak("fa234f");
  292. dbNodeEntity1.setPortBak(3);
  293. dbNodeEntity1.setId(2);
  294. when(dbNodeRepository.getAll()).thenReturn(Arrays.asList(dbNodeEntity));
  295. dbNodeServiceImpl.forceUpdateCache();
  296. }
  297. }