Add license header for java files
[msb/apigateway.git] / apiroute / apiroute-service / src / test / java / org / onap / msb / apiroute / wrapper / MicroServiceWrapperTest.java
1 /*******************************************************************************
2  * Copyright 2016-2017 ZTE, Inc. and others.
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 package org.onap.msb.apiroute.wrapper;
17
18 import java.lang.reflect.InvocationHandler;
19 import java.lang.reflect.Method;
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.Comparator;
23 import java.util.HashSet;
24 import java.util.List;
25 import java.util.Set;
26
27 import org.junit.Assert;
28 import org.junit.Before;
29 import org.junit.BeforeClass;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.onap.msb.apiroute.api.MicroServiceFullInfo;
33 import org.onap.msb.apiroute.api.Node;
34 import org.onap.msb.apiroute.api.exception.ExtendedNotFoundException;
35 import org.onap.msb.apiroute.api.exception.UnprocessableEntityException;
36 import org.onap.msb.apiroute.wrapper.MicroServiceWrapper;
37 import org.onap.msb.apiroute.wrapper.dao.RedisAccessWrapper;
38 import org.onap.msb.apiroute.wrapper.util.JedisUtil;
39 import org.powermock.api.mockito.PowerMockito;
40 import org.powermock.core.classloader.annotations.PowerMockIgnore;
41 import org.powermock.core.classloader.annotations.PrepareForTest;
42 import org.powermock.modules.junit4.PowerMockRunner;
43
44 import redis.clients.jedis.JedisPool;
45 import redis.clients.jedis.JedisPoolConfig;
46
47 import com.fiftyonred.mock_jedis.MockJedisPool;
48
49
50 @RunWith(PowerMockRunner.class)
51 @PrepareForTest({JedisUtil.class,RedisAccessWrapper.class})
52 @PowerMockIgnore( {"javax.management.*"})
53 public class MicroServiceWrapperTest {
54   private static MicroServiceWrapper microServiceWrapper;
55   private static Comparator<MicroServiceFullInfo> microServiceComparator = null;
56
57   
58   @BeforeClass
59   public static void setUpBeforeClass() throws Exception {
60     microServiceWrapper=MicroServiceWrapper.getInstance();
61     microServiceComparator = new Comparator<MicroServiceFullInfo>() {
62       @Override
63       public int compare(MicroServiceFullInfo o1, MicroServiceFullInfo o2) {
64           if (!o1.getServiceName().equals(o2.getServiceName()))
65               return (o1.getServiceName()).compareTo(o2.getServiceName());            
66           return 0;
67       }
68   };
69   }
70   
71   @Before
72   public void setUpBeforeTest() throws Exception {
73       final JedisPool mockJedisPool = new MockJedisPool(new JedisPoolConfig(), "localhost");
74       PowerMockito.mockStatic(JedisUtil.class);
75       JedisUtil jedisUtil=PowerMockito.mock(JedisUtil.class);
76       PowerMockito.when(jedisUtil.borrowJedisInstance()).thenReturn(mockJedisPool.getResource());
77
78       PowerMockito.replace(PowerMockito.method(RedisAccessWrapper.class, "filterKeys")).with(new InvocationHandler() {
79           @Override
80           public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
81               return mockJedisPool.getResource().keys((String) args[0]);
82           }
83       });
84   }
85   
86   @Test
87   public void test_getMicroServiceFullInfo_not_exist(){
88     try {     
89       microServiceWrapper.getMicroServiceInstance("testForJunit","v1");
90       Assert.fail("should not process to here.");          
91       } 
92       catch(Exception e){
93           Assert.assertTrue(e instanceof ExtendedNotFoundException);
94          
95       }
96      
97   }
98   
99   @Test
100   public void test_getMicroServiceFullInfo(){
101             
102     MicroServiceFullInfo microServiceFullInfo = buildMicroServiceFullInfo();
103         try {
104           microServiceWrapper.saveMicroServiceInstance(microServiceFullInfo, false, "", "");
105           MicroServiceFullInfo dbMicroServiceFullInfo=microServiceWrapper.getMicroServiceInstance("testService", "v1");
106             Assert.assertEquals(microServiceFullInfo,dbMicroServiceFullInfo );
107         } catch (Exception e) {
108             assert false:"throw exception means error occured!"+e.getMessage();
109         }
110      
111   }
112   
113   @Test
114   public void test_getAllMicroServiceInstances(){
115     MicroServiceFullInfo microService = buildMicroServiceFullInfo();
116     MicroServiceFullInfo microService2 = buildMicroServiceFullInfo2();
117     List<MicroServiceFullInfo> expected = new ArrayList<>();
118     expected.add(microService);
119     expected.add(microService2);
120     Collections.sort(expected, microServiceComparator);
121     
122     try {
123       microServiceWrapper.saveMicroServiceInstance(microService, false, "", "");
124       microServiceWrapper.saveMicroServiceInstance(microService2, false, "", "");
125       
126       List<MicroServiceFullInfo> microServiceList=microServiceWrapper.getAllMicroServiceInstances();
127       Collections.sort(microServiceList, microServiceComparator);
128       
129       Assert.assertEquals(expected,microServiceList);
130       
131     } catch (Exception e) {
132       Assert.fail("throw exception means error occured!" + e.getMessage());
133     }
134     
135   }
136   
137   @Test
138   public void test_updateMicroServiceStatus(){
139     MicroServiceFullInfo microService = buildMicroServiceFullInfo();
140
141     try {
142       microServiceWrapper.saveMicroServiceInstance(microService, false, "", "");
143       MicroServiceFullInfo dbMicroServiceFullInfo=microServiceWrapper.getMicroServiceInstance("testService", "v1");
144         Assert.assertEquals("1",dbMicroServiceFullInfo.getStatus() );
145         microServiceWrapper.updateMicroServiceStatus("testService","v1","0");
146         dbMicroServiceFullInfo=microServiceWrapper.getMicroServiceInstance("testService", "v1");
147         Assert.assertEquals("0",dbMicroServiceFullInfo.getStatus() );
148     } catch (Exception e) {
149       Assert.fail("throw exception means error occured!" + e.getMessage());
150     }
151     
152   }
153   
154  
155   
156   @Test
157   public void test_deleteMicroService(){
158     MicroServiceFullInfo microService = buildMicroServiceFullInfo2();
159     try {
160         microServiceWrapper.saveMicroServiceInstance(microService, false, "", "");
161         MicroServiceFullInfo dbMicroServiceFullInfo=microServiceWrapper.getMicroServiceInstance("testService2", "v1");
162         Assert.assertNotNull(dbMicroServiceFullInfo);          
163         
164     } catch (Exception e) {
165       Assert.fail("throw exception means error occured!" + e.getMessage());
166     }
167     try {
168       microServiceWrapper.deleteMicroService("testService2","v1");
169       microServiceWrapper.getMicroServiceInstance("testService2", "v1");
170     }
171     catch(Exception e){
172       Assert.assertTrue(e instanceof ExtendedNotFoundException);       
173     }
174   }
175   
176   @Test
177   public void test_deleteMicroServiceInstance(){
178     
179   
180     //添加多版本服务
181     MicroServiceFullInfo microService4v2 = buildMicroServiceFullInfo4version2();
182     try {
183         microServiceWrapper.saveMicroServiceInstance(microService4v2, false, "", "");       
184     } catch (Exception e) {
185       Assert.fail("throw exception means error occured!" + e.getMessage());
186     }
187     
188     //删除不存在实例
189     try {
190       microServiceWrapper.deleteMicroServiceInstance("testService","v2","127.0.0.1","8989");
191     }
192     catch(Exception e){
193       Assert.assertTrue(e instanceof ExtendedNotFoundException);       
194     }
195     
196     try {
197       //删除其中一个实例
198       microServiceWrapper.deleteMicroServiceInstance("testService","v2","10.74.148.87","8080");
199       MicroServiceFullInfo microService =microServiceWrapper.getMicroServiceInstance("testService", "v2");
200       
201       Set<Node> nodeSet=new HashSet<Node>();
202       nodeSet.add(new Node("10.74.148.86","8080"));
203       Assert.assertEquals(nodeSet, microService.getNodes());
204       
205       //删除服务
206       microServiceWrapper.deleteMicroServiceInstance("testService","v2","10.74.148.86","8080");
207     }
208     catch(Exception e){
209       Assert.fail("throw exception means error occured!" + e.getMessage());     
210     }
211     
212     try {     
213       microServiceWrapper.getMicroServiceInstance("testService","v2");
214       Assert.fail("should not process to here.");          
215       } 
216       catch(Exception e){
217           Assert.assertTrue(e instanceof ExtendedNotFoundException);
218          
219       }
220   }
221   
222   @Test
223   public void test_getAllVersion(){
224     try {
225       microServiceWrapper.saveMicroServiceInstance(buildMicroServiceFullInfo(), false, "", "");       
226       microServiceWrapper.saveMicroServiceInstance(buildMicroServiceFullInfo4version2(), false, "", "");
227       Set<String> versionSet=new HashSet<String>();
228       versionSet.add("v1");
229       versionSet.add("v2");
230       Assert.assertEquals(versionSet,microServiceWrapper.getAllVersion("testService"));
231       
232     
233     } catch (Exception e) {
234     Assert.fail("throw exception means error occured!" + e.getMessage());
235     }
236     try {     
237       microServiceWrapper.deleteMicroService4AllVersion("testService");
238       Assert.assertEquals(0,microServiceWrapper.getAllVersion("testService").size());         
239       } 
240       catch(Exception e){
241           Assert.assertTrue(e instanceof ExtendedNotFoundException);
242          
243       }
244     
245   }
246
247   @Test
248   public void test_getAllMicroServiceKey(){
249     microServiceWrapper.saveMicroServiceInstance(buildMicroServiceFullInfo(), false, "", ""); 
250     microServiceWrapper.saveMicroServiceInstance(buildMicroServiceFullInfo2(), false, "", ""); 
251    Set<String> builder = new HashSet<String>();
252     builder.add("testService");
253     builder.add("testService2");
254     Assert.assertEquals(builder,microServiceWrapper.getAllMicroServiceKey());
255
256    
257   }
258   
259   private MicroServiceFullInfo buildMicroServiceFullInfo(){
260     MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
261     microServiceFullInfo.setServiceName("testService");
262     microServiceFullInfo.setVersion("v1");
263     microServiceFullInfo.setStatus("1");
264     microServiceFullInfo.setUrl("/testService/v1");
265     microServiceFullInfo.setVisualRange("0");
266     microServiceFullInfo.setProtocol("HTTP");
267     microServiceFullInfo.setEnable_ssl(false);
268     Set<Node> nodeSet = new HashSet<>();
269     nodeSet.add(new Node("10.74.148.88","8080"));
270     microServiceFullInfo.setNodes(nodeSet);
271     
272     return microServiceFullInfo;
273   }
274   
275   private MicroServiceFullInfo buildMicroServiceFullInfo4version2(){
276     MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
277     microServiceFullInfo.setServiceName("testService");
278     microServiceFullInfo.setVersion("v2");
279     microServiceFullInfo.setStatus("1");
280     microServiceFullInfo.setUrl("/testService/v1");
281     microServiceFullInfo.setVisualRange("0");
282     microServiceFullInfo.setProtocol("HTTP");
283     microServiceFullInfo.setEnable_ssl(false);
284     Set<Node> nodeSet = new HashSet<>();
285     nodeSet.add(new Node("10.74.148.87","8080"));
286     nodeSet.add(new Node("10.74.148.86","8080"));
287     microServiceFullInfo.setNodes(nodeSet);
288     
289     return microServiceFullInfo;
290   }
291   
292   private MicroServiceFullInfo buildMicroServiceFullInfo2(){
293     MicroServiceFullInfo microServiceFullInfo = new MicroServiceFullInfo();
294     microServiceFullInfo.setServiceName("testService2");
295     microServiceFullInfo.setVersion("v1");
296     microServiceFullInfo.setStatus("1");
297     microServiceFullInfo.setUrl("/api/testService/v1");
298     microServiceFullInfo.setVisualRange("1");
299     microServiceFullInfo.setProtocol("REST");
300     microServiceFullInfo.setEnable_ssl(true);
301     Set<Node> nodeSet = new HashSet<>();
302     nodeSet.add(new Node("10.74.148.89","8080"));
303     microServiceFullInfo.setNodes(nodeSet);
304     
305     return microServiceFullInfo;
306   }
307   
308   
309 }