Fix sonar issues
[vfc/nfvo/driver/vnfm/svnfm.git] / nokiav2 / driver / src / test / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / nokia / vnfm / TestCbamRestApiProvider.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.vnfm;
18
19 import com.nokia.cbam.catalog.v1.api.DefaultApi;
20 import com.nokia.cbam.lcm.v32.ApiClient;
21 import com.nokia.cbam.lcm.v32.api.OperationExecutionsApi;
22 import com.nokia.cbam.lcm.v32.api.VnfsApi;
23 import com.nokia.cbam.lcn.v32.api.SubscriptionsApi;
24 import java.util.ArrayList;
25 import java.util.Map;
26 import javax.net.ssl.HostnameVerifier;
27 import javax.net.ssl.SSLSocketFactory;
28 import okhttp3.Interceptor;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.mockito.Mock;
32 import org.mockito.Mockito;
33 import org.mockito.invocation.InvocationOnMock;
34 import org.mockito.stubbing.Answer;
35 import org.onap.msb.model.MicroServiceFullInfo;
36 import org.onap.msb.model.NodeInfo;
37 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.GenericExternalSystemInfoProvider;
38 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.IpMappingProvider;
39 import org.onap.vnfmdriver.model.VnfmInfo;
40 import org.springframework.core.env.Environment;
41
42 import static junit.framework.TestCase.assertEquals;
43 import static junit.framework.TestCase.assertNotNull;
44 import static org.mockito.Mockito.*;
45 import static org.springframework.test.util.ReflectionTestUtils.setField;
46
47 class ResultCaptor<T> implements Answer {
48     private T result = null;
49
50     public T getResult() {
51         return result;
52     }
53
54     @Override
55     public T answer(InvocationOnMock invocationOnMock) throws Throwable {
56         result = (T) invocationOnMock.callRealMethod();
57         return result;
58     }
59 }
60
61 public class TestCbamRestApiProvider extends TestBase {
62     @Mock
63     private Environment environment;
64     @Mock
65     private CbamTokenProvider cbamTokenProvider;
66     @Mock
67     private MicroServiceFullInfo microServiceInfo = new MicroServiceFullInfo();
68     @Mock
69     private Interceptor interceptor;
70     @Mock
71     private HostnameVerifier hostnameVerifier;
72     private java.util.List<NodeInfo> nodes = new ArrayList<>();
73
74     private CbamRestApiProvider cbamRestApiProvider;
75     private CbamSecurityProvider cbamSecurityProvider ;
76
77     @Before
78     public void init() {
79         CbamSecurityProvider real = new CbamSecurityProvider();
80         setFieldWithPropertyAnnotation(real, "${skipCertificateVerification}", true);
81         setFieldWithPropertyAnnotation(real, "${skipHostnameVerification}", true);
82         cbamSecurityProvider = spy(real);
83         microServiceInfo.setNodes(nodes);
84         cbamRestApiProvider = new CbamRestApiProvider(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
85         when(environment.getProperty(IpMappingProvider.IP_MAP, String.class, "")).thenReturn("");
86         when(environment.getProperty(GenericExternalSystemInfoProvider.VNFM_INFO_CACHE_EVICTION_IN_MS, Long.class, Long.valueOf(10 * 60 * 1000))).thenReturn(10 * 60 * 1000L);
87     }
88
89     /**
90      * test CBAM LCM API
91      */
92     @Test
93     public void testCbamLcmApi() throws Exception {
94         VnfmInfo expectedVnfmInfo = new VnfmInfo();
95         when(vnfmInfoProvider.getVnfmInfo(VNFM_ID)).thenReturn(expectedVnfmInfo);
96         expectedVnfmInfo.setUrl("https://cbamurl:123/d/");
97         ResultCaptor<SSLSocketFactory> sslSocketFactoryResultCaptor = new ResultCaptor<>();
98         doAnswer(sslSocketFactoryResultCaptor).when(cbamSecurityProvider).buildSSLSocketFactory();
99         when(cbamSecurityProvider.buildHostnameVerifier()).thenReturn(hostnameVerifier);
100         when(cbamTokenProvider.getToken(VNFM_ID)).thenReturn(interceptor);
101         //when
102         ApiClient cbamLcmApi = cbamRestApiProvider.buildLcmApiClient(VNFM_ID);
103         //verify
104         assertEquals("https://cbamurl:123/d/", cbamLcmApi.getAdapterBuilder().build().baseUrl().toString());
105         assertEquals(sslSocketFactoryResultCaptor.getResult(), cbamLcmApi.getOkBuilder().build().sslSocketFactory());
106         Map<String, Interceptor> apiAuthorizations = cbamLcmApi.getApiAuthorizations();
107         assertEquals(1, apiAuthorizations.size());
108         assertEquals(interceptor, apiAuthorizations.values().iterator().next());
109         assertEquals(hostnameVerifier, cbamLcmApi.getOkBuilder().build().hostnameVerifier());
110     }
111
112     /**
113      * test CBAM catalog API
114      */
115     @Test
116     public void testCbamCatalogApi() throws Exception {
117         ResultCaptor<SSLSocketFactory> sslSocketFactoryResultCaptor = new ResultCaptor<>();
118         doAnswer(sslSocketFactoryResultCaptor).when(cbamSecurityProvider).buildSSLSocketFactory();
119         when(cbamSecurityProvider.buildHostnameVerifier()).thenReturn(hostnameVerifier);
120         when(cbamTokenProvider.getToken(VNFM_ID)).thenReturn(interceptor);
121         when(driverProperties.getCbamCatalogUrl()).thenReturn("https://cbamurl:123/d/");
122         //when
123         com.nokia.cbam.catalog.v1.ApiClient cbamLcmApi = cbamRestApiProvider.buildCatalogApiClient(VNFM_ID);
124         //verify
125         String actual = cbamLcmApi.getAdapterBuilder().build().baseUrl().toString();
126         assertEquals("https://cbamurl:123/d/", actual);
127         assertEquals(sslSocketFactoryResultCaptor.getResult(), cbamLcmApi.getOkBuilder().build().sslSocketFactory());
128         Map<String, Interceptor> apiAuthorizations = cbamLcmApi.getApiAuthorizations();
129         assertEquals(1, apiAuthorizations.size());
130         assertEquals(interceptor, apiAuthorizations.values().iterator().next());
131         assertEquals(hostnameVerifier, cbamLcmApi.getOkBuilder().build().hostnameVerifier());
132     }
133
134     /**
135      * test CBAM LCN API
136      */
137     @Test
138     public void testCbamLcnApi() throws Exception {
139         ResultCaptor<SSLSocketFactory> sslSocketFactoryResultCaptor = new ResultCaptor<>();
140         doAnswer(sslSocketFactoryResultCaptor).when(cbamSecurityProvider).buildSSLSocketFactory();
141         when(cbamSecurityProvider.buildHostnameVerifier()).thenReturn(hostnameVerifier);
142         when(cbamTokenProvider.getToken(VNFM_ID)).thenReturn(interceptor);
143         when(driverProperties.getCbamLcnUrl()).thenReturn("https://cbamurl:123/d/");
144         //when
145         com.nokia.cbam.lcn.v32.ApiClient cbamLcmApi = cbamRestApiProvider.buildLcnApiClient(VNFM_ID);
146         //verify
147         String actual = cbamLcmApi.getAdapterBuilder().build().baseUrl().toString();
148         assertEquals("https://cbamurl:123/d/", actual);
149         assertEquals(sslSocketFactoryResultCaptor.getResult(), cbamLcmApi.getOkBuilder().build().sslSocketFactory());
150         Map<String, Interceptor> apiAuthorizations = cbamLcmApi.getApiAuthorizations();
151         assertEquals(1, apiAuthorizations.size());
152         assertEquals(interceptor, apiAuthorizations.values().iterator().next());
153         assertEquals(hostnameVerifier, cbamLcmApi.getOkBuilder().build().hostnameVerifier());
154     }
155
156     /**
157      * Test API wrapping for Catalog
158      * (questionable benefit [ this is more less ensured by Java type safety) ]
159      */
160     @Test
161     @Useless
162     public void testCatalogAPiWrapping() {
163         com.nokia.cbam.catalog.v1.ApiClient c = Mockito.mock(com.nokia.cbam.catalog.v1.ApiClient.class);
164         class TestClasss extends CbamRestApiProvider {
165             public TestClasss() {
166                 super(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
167             }
168
169             @Override
170             com.nokia.cbam.catalog.v1.ApiClient buildCatalogApiClient(String vnfmId) {
171                 return c;
172             }
173         }
174         DefaultApi defaultApi = Mockito.mock(DefaultApi.class);
175         //when
176         when(c.createService(DefaultApi.class)).thenReturn(defaultApi);
177         //verify
178         TestClasss testInstnace = new TestClasss();
179         assertNotNull(testInstnace.getCbamCatalogApi(VNFM_ID));
180         assertEquals(defaultApi, testInstnace.getCbamCatalogApi(VNFM_ID));
181     }
182
183     /**
184      * Test API wrapping for LCN
185      * (questionable benefit [ this is more less ensured by Java type safety) ]
186      */
187     @Test
188     @Useless
189     public void testLcmAPiWrapping() {
190         com.nokia.cbam.lcn.v32.ApiClient c = Mockito.mock(com.nokia.cbam.lcn.v32.ApiClient.class);
191         class TestClasss extends CbamRestApiProvider {
192             public TestClasss() {
193                 super(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
194             }
195
196             @Override
197             com.nokia.cbam.lcn.v32.ApiClient buildLcnApiClient(String vnfmId) {
198                 return c;
199             }
200         }
201         SubscriptionsApi defaultApi = Mockito.mock(SubscriptionsApi.class);
202         //when
203         when(c.createService(SubscriptionsApi.class)).thenReturn(defaultApi);
204         //verify
205         TestClasss testInstnace = new TestClasss();
206         assertNotNull(testInstnace.getCbamLcnApi(VNFM_ID));
207         assertEquals(defaultApi, testInstnace.getCbamLcnApi(VNFM_ID));
208     }
209
210     /**
211      * Test API wrapping for LCM
212      * (questionable benefit [ this is more less ensured by Java type safety) ]
213      */
214     @Test
215     @Useless
216     public void testLcnAPiWrapping() {
217         com.nokia.cbam.lcm.v32.ApiClient c = Mockito.mock(com.nokia.cbam.lcm.v32.ApiClient.class);
218         class TestClasss extends CbamRestApiProvider {
219             public TestClasss() {
220                 super(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
221             }
222
223             @Override
224             ApiClient buildLcmApiClient(String vnfmId) {
225                 return c;
226             }
227         }
228         VnfsApi defaultApi = Mockito.mock(VnfsApi.class);
229         //when
230         when(c.createService(VnfsApi.class)).thenReturn(defaultApi);
231         //verify
232         TestClasss testInstnace = new TestClasss();
233         assertNotNull(testInstnace.getCbamLcmApi(VNFM_ID));
234         assertEquals(defaultApi, testInstnace.getCbamLcmApi(VNFM_ID));
235     }
236
237     /**
238      * Test API wrapping for LCM
239      * (questionable benefit [ this is more less ensured by Java type safety) ]
240      */
241     @Test
242     @Useless
243     public void testOperationExecutionsApiAPiWrapping() {
244         com.nokia.cbam.lcm.v32.ApiClient c = Mockito.mock(com.nokia.cbam.lcm.v32.ApiClient.class);
245         class TestClasss extends CbamRestApiProvider {
246             public TestClasss() {
247                 super(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
248             }
249
250             @Override
251             ApiClient buildLcmApiClient(String vnfmId) {
252                 return c;
253             }
254         }
255         OperationExecutionsApi defaultApi = Mockito.mock(OperationExecutionsApi.class);
256         //when
257         when(c.createService(OperationExecutionsApi.class)).thenReturn(defaultApi);
258         //verify
259         TestClasss testInstnace = new TestClasss();
260         assertNotNull(testInstnace.getCbamOperationExecutionApi(VNFM_ID));
261         assertEquals(defaultApi, testInstnace.getCbamOperationExecutionApi(VNFM_ID));
262     }
263 }