2 * Copyright 2016-2017, Nokia Corporation
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm;
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;
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;
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;
47 class ResultCaptor<T> implements Answer {
48 private T result = null;
50 public T getResult() {
55 public T answer(InvocationOnMock invocationOnMock) throws Throwable {
56 result = (T) invocationOnMock.callRealMethod();
61 public class TestCbamRestApiProvider extends TestBase {
63 private Environment environment;
65 private CbamTokenProvider cbamTokenProvider;
67 private MicroServiceFullInfo microServiceInfo = new MicroServiceFullInfo();
69 private Interceptor interceptor;
71 private HostnameVerifier hostnameVerifier;
72 private java.util.List<NodeInfo> nodes = new ArrayList<>();
74 private CbamRestApiProvider cbamRestApiProvider;
75 private CbamSecurityProvider cbamSecurityProvider ;
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);
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);
102 ApiClient cbamLcmApi = cbamRestApiProvider.buildLcmApiClient(VNFM_ID);
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());
113 * test CBAM catalog API
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/");
123 com.nokia.cbam.catalog.v1.ApiClient cbamLcmApi = cbamRestApiProvider.buildCatalogApiClient(VNFM_ID);
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());
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/");
145 com.nokia.cbam.lcn.v32.ApiClient cbamLcmApi = cbamRestApiProvider.buildLcnApiClient(VNFM_ID);
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());
157 * Test API wrapping for Catalog
158 * (questionable benefit [ this is more less ensured by Java type safety) ]
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);
170 com.nokia.cbam.catalog.v1.ApiClient buildCatalogApiClient(String vnfmId) {
174 DefaultApi defaultApi = Mockito.mock(DefaultApi.class);
176 when(c.createService(DefaultApi.class)).thenReturn(defaultApi);
178 TestClasss testInstnace = new TestClasss();
179 assertNotNull(testInstnace.getCbamCatalogApi(VNFM_ID));
180 assertEquals(defaultApi, testInstnace.getCbamCatalogApi(VNFM_ID));
184 * Test API wrapping for LCN
185 * (questionable benefit [ this is more less ensured by Java type safety) ]
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);
197 com.nokia.cbam.lcn.v32.ApiClient buildLcnApiClient(String vnfmId) {
201 SubscriptionsApi defaultApi = Mockito.mock(SubscriptionsApi.class);
203 when(c.createService(SubscriptionsApi.class)).thenReturn(defaultApi);
205 TestClasss testInstnace = new TestClasss();
206 assertNotNull(testInstnace.getCbamLcnApi(VNFM_ID));
207 assertEquals(defaultApi, testInstnace.getCbamLcnApi(VNFM_ID));
211 * Test API wrapping for LCM
212 * (questionable benefit [ this is more less ensured by Java type safety) ]
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);
224 ApiClient buildLcmApiClient(String vnfmId) {
228 VnfsApi defaultApi = Mockito.mock(VnfsApi.class);
230 when(c.createService(VnfsApi.class)).thenReturn(defaultApi);
232 TestClasss testInstnace = new TestClasss();
233 assertNotNull(testInstnace.getCbamLcmApi(VNFM_ID));
234 assertEquals(defaultApi, testInstnace.getCbamLcmApi(VNFM_ID));
238 * Test API wrapping for LCM
239 * (questionable benefit [ this is more less ensured by Java type safety) ]
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);
251 ApiClient buildLcmApiClient(String vnfmId) {
255 OperationExecutionsApi defaultApi = Mockito.mock(OperationExecutionsApi.class);
257 when(c.createService(OperationExecutionsApi.class)).thenReturn(defaultApi);
259 TestClasss testInstnace = new TestClasss();
260 assertNotNull(testInstnace.getCbamOperationExecutionApi(VNFM_ID));
261 assertEquals(defaultApi, testInstnace.getCbamOperationExecutionApi(VNFM_ID));