e6d8ebb4c7a2ef702fb2779ef1a950354b5bbb15
[vfc/nfvo/driver/vnfm/svnfm.git] / nokiav2 / driver / src / test / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / nokia / onap / core / TestMsbApiProvider.java
1 /*
2  * Copyright 2016-2017, Nokia 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.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core;
18
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.onap.msb.sdk.discovery.common.RouteException;
23 import org.onap.msb.sdk.discovery.entity.MicroServiceFullInfo;
24 import org.onap.msb.sdk.discovery.entity.NodeInfo;
25 import org.onap.msb.sdk.httpclient.msb.MSBServiceClient;
26 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamTokenProvider;
27 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.TestBase;
28 import org.springframework.core.env.Environment;
29
30 import java.util.HashSet;
31 import java.util.Set;
32
33 import static junit.framework.TestCase.assertEquals;
34 import static junit.framework.TestCase.fail;
35 import static org.mockito.Mockito.verify;
36 import static org.mockito.Mockito.when;
37 import static org.springframework.test.util.ReflectionTestUtils.setField;
38
39 public class TestMsbApiProvider extends TestBase {
40     @Mock
41     private Environment environment;
42     @Mock
43     private CbamTokenProvider cbamTokenProvider;
44     private MicroServiceFullInfo microServiceInfo = new MicroServiceFullInfo();
45     private Set<NodeInfo> nodes = new HashSet<>();
46     private MsbApiProvider msbApiProvider;
47
48     @Before
49     public void init() {
50         setField(MsbApiProvider.class, "logger", logger);
51         msbApiProvider = new MsbApiProvider(environment);
52         microServiceInfo.setNodes(nodes);
53     }
54
55     /**
56      * test MSB client is created based on driver properties
57      */
58     @Test
59     public void testMsbClient() {
60         setFieldWithPropertyAnnotation(msbApiProvider, "${messageBusIp}", "mymessageBusIp");
61         setFieldWithPropertyAnnotation(msbApiProvider, "${messageBusPort}", "123");
62         //when
63         MSBServiceClient msbClient = msbApiProvider.getMsbClient();
64         //verify
65         assertEquals("mymessageBusIp:123", msbClient.getMsbSvrAddress());
66     }
67
68     /**
69      * error is propagated if no suitable micro service endpoint is found
70      */
71     @Test
72     public void testNoSuitableMicroService() throws Exception {
73         NodeInfo dockerAccessPoint = new NodeInfo();
74         dockerAccessPoint.setIp("172.1.2.3");
75         microServiceInfo.setServiceName("serviceName");
76         microServiceInfo.setVersion("v1");
77         microServiceInfo.setUrl("/lead/nslcm/v1");
78         when(environment.getProperty(IpMappingProvider.IP_MAP, String.class, "")).thenReturn("");
79         nodes.add(dockerAccessPoint);
80         msbApiProvider = new MsbApiProvider(environment) {
81             @Override
82             public MSBServiceClient getMsbClient() {
83                 return msbClient;
84             }
85         };
86         when(msbClient.queryMicroServiceInfo("serviceName", "v1")).thenReturn(microServiceInfo);
87         //when
88         try {
89             msbApiProvider.getMicroServiceUrl("serviceName", "v1");
90             fail();
91         } catch (Exception e) {
92             assertEquals("The serviceName service with v1 does not have any valid nodes[172.1.2.3:null  ttl:]", e.getMessage());
93             verify(logger).error("The serviceName service with v1 does not have any valid nodes[172.1.2.3:null  ttl:]");
94         }
95     }
96
97     /**
98      * non Docker endpoint is selected
99      */
100     @Test
101     public void testExistingValidEndpoint() throws Exception {
102         NodeInfo nonDocker = new NodeInfo();
103         nonDocker.setIp("173.1.2.3");
104         nonDocker.setPort("234");
105         microServiceInfo.setServiceName("serviceName");
106         microServiceInfo.setVersion("v1");
107         microServiceInfo.setUrl("/lead/nslcm/v1");
108         when(environment.getProperty(IpMappingProvider.IP_MAP, String.class, "")).thenReturn("173.1.2.3->1.2.3.4");
109         nodes.add(nonDocker);
110         msbApiProvider = new MsbApiProvider(environment) {
111             @Override
112             public MSBServiceClient getMsbClient() {
113                 return msbClient;
114             }
115         };
116         when(msbClient.queryMicroServiceInfo("serviceName", "v1")).thenReturn(microServiceInfo);
117         msbApiProvider.afterPropertiesSet();
118         //when
119         assertEquals("http://1.2.3.4:234/lead/nslcm/v1", msbApiProvider.getMicroServiceUrl("serviceName", "v1"));
120     }
121
122     /**
123      * if unable to get micro service info the error is propagated
124      */
125     @Test
126     public void testUnableQueryMicroserviInfo() throws Exception {
127         msbApiProvider = new MsbApiProvider(environment) {
128             @Override
129             public MSBServiceClient getMsbClient() {
130                 return msbClient;
131             }
132         };
133         RouteException expectedException = new RouteException();
134         when(msbClient.queryMicroServiceInfo("serviceName", "v1")).thenThrow(expectedException);
135
136         //when
137         try {
138             msbApiProvider.getMicroServiceUrl("serviceName", "v1");
139             fail();
140         } catch (Exception e) {
141             assertEquals("Unable to get micro service URL for serviceName with version v1", e.getMessage());
142             verify(logger).error("Unable to get micro service URL for serviceName with version v1", expectedException);
143         }
144     }
145
146 }