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 = spy(new CbamSecurityProvider());
79 microServiceInfo.setNodes(nodes);
80 setField(cbamSecurityProvider, "skipCertificateVerification", true);
81 setField(cbamSecurityProvider, "skipHostnameVerification", true);
82 cbamRestApiProvider = new CbamRestApiProvider(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
83 when(environment.getProperty(IpMappingProvider.IP_MAP, String.class, "")).thenReturn("");
84 when(environment.getProperty(GenericExternalSystemInfoProvider.VNFM_INFO_CACHE_EVICTION_IN_MS, Long.class, Long.valueOf(10 * 60 * 1000))).thenReturn(10 * 60 * 1000L);
91 public void testCbamLcmApi() throws Exception {
92 VnfmInfo expectedVnfmInfo = new VnfmInfo();
93 when(vnfmInfoProvider.getVnfmInfo(VNFM_ID)).thenReturn(expectedVnfmInfo);
94 expectedVnfmInfo.setUrl("https://cbamurl:123/d/");
95 ResultCaptor<SSLSocketFactory> sslSocketFactoryResultCaptor = new ResultCaptor<>();
96 doAnswer(sslSocketFactoryResultCaptor).when(cbamSecurityProvider).buildSSLSocketFactory();
97 when(cbamSecurityProvider.buildHostnameVerifier()).thenReturn(hostnameVerifier);
98 when(cbamTokenProvider.getToken(VNFM_ID)).thenReturn(interceptor);
100 ApiClient cbamLcmApi = cbamRestApiProvider.buildLcmApiClient(VNFM_ID);
102 assertEquals("https://cbamurl:123/d/", cbamLcmApi.getAdapterBuilder().build().baseUrl().toString());
103 assertEquals(sslSocketFactoryResultCaptor.getResult(), cbamLcmApi.getOkBuilder().build().sslSocketFactory());
104 Map<String, Interceptor> apiAuthorizations = cbamLcmApi.getApiAuthorizations();
105 assertEquals(1, apiAuthorizations.size());
106 assertEquals(interceptor, apiAuthorizations.values().iterator().next());
107 assertEquals(hostnameVerifier, cbamLcmApi.getOkBuilder().build().hostnameVerifier());
111 * test CBAM catalog API
114 public void testCbamCatalogApi() throws Exception {
115 ResultCaptor<SSLSocketFactory> sslSocketFactoryResultCaptor = new ResultCaptor<>();
116 doAnswer(sslSocketFactoryResultCaptor).when(cbamSecurityProvider).buildSSLSocketFactory();
117 when(cbamSecurityProvider.buildHostnameVerifier()).thenReturn(hostnameVerifier);
118 when(cbamTokenProvider.getToken(VNFM_ID)).thenReturn(interceptor);
119 when(driverProperties.getCbamCatalogUrl()).thenReturn("https://cbamurl:123/d/");
121 com.nokia.cbam.catalog.v1.ApiClient cbamLcmApi = cbamRestApiProvider.buildCatalogApiClient(VNFM_ID);
123 String actual = cbamLcmApi.getAdapterBuilder().build().baseUrl().toString();
124 assertEquals("https://cbamurl:123/d/", actual);
125 assertEquals(sslSocketFactoryResultCaptor.getResult(), cbamLcmApi.getOkBuilder().build().sslSocketFactory());
126 Map<String, Interceptor> apiAuthorizations = cbamLcmApi.getApiAuthorizations();
127 assertEquals(1, apiAuthorizations.size());
128 assertEquals(interceptor, apiAuthorizations.values().iterator().next());
129 assertEquals(hostnameVerifier, cbamLcmApi.getOkBuilder().build().hostnameVerifier());
136 public void testCbamLcnApi() throws Exception {
137 ResultCaptor<SSLSocketFactory> sslSocketFactoryResultCaptor = new ResultCaptor<>();
138 doAnswer(sslSocketFactoryResultCaptor).when(cbamSecurityProvider).buildSSLSocketFactory();
139 when(cbamSecurityProvider.buildHostnameVerifier()).thenReturn(hostnameVerifier);
140 when(cbamTokenProvider.getToken(VNFM_ID)).thenReturn(interceptor);
141 when(driverProperties.getCbamLcnUrl()).thenReturn("https://cbamurl:123/d/");
143 com.nokia.cbam.lcn.v32.ApiClient cbamLcmApi = cbamRestApiProvider.buildLcnApiClient(VNFM_ID);
145 String actual = cbamLcmApi.getAdapterBuilder().build().baseUrl().toString();
146 assertEquals("https://cbamurl:123/d/", actual);
147 assertEquals(sslSocketFactoryResultCaptor.getResult(), cbamLcmApi.getOkBuilder().build().sslSocketFactory());
148 Map<String, Interceptor> apiAuthorizations = cbamLcmApi.getApiAuthorizations();
149 assertEquals(1, apiAuthorizations.size());
150 assertEquals(interceptor, apiAuthorizations.values().iterator().next());
151 assertEquals(hostnameVerifier, cbamLcmApi.getOkBuilder().build().hostnameVerifier());
155 * Test API wrapping for Catalog
156 * (questionable benefit [ this is more less ensured by Java type safety) ]
159 public void testCatalogAPiWrapping() {
160 com.nokia.cbam.catalog.v1.ApiClient c = Mockito.mock(com.nokia.cbam.catalog.v1.ApiClient.class);
161 class TestClasss extends CbamRestApiProvider {
162 public TestClasss() {
163 super(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
167 com.nokia.cbam.catalog.v1.ApiClient buildCatalogApiClient(String vnfmId) {
171 DefaultApi defaultApi = Mockito.mock(DefaultApi.class);
172 when(c.createService(DefaultApi.class)).thenReturn(defaultApi);
174 TestClasss testInstnace = new TestClasss();
175 assertNotNull(testInstnace.getCbamCatalogApi(VNFM_ID));
176 assertEquals(defaultApi, testInstnace.getCbamCatalogApi(VNFM_ID));
180 * Test API wrapping for LCN
181 * (questionable benefit [ this is more less ensured by Java type safety) ]
184 public void testLcmAPiWrapping() {
185 com.nokia.cbam.lcn.v32.ApiClient c = Mockito.mock(com.nokia.cbam.lcn.v32.ApiClient.class);
186 class TestClasss extends CbamRestApiProvider {
187 public TestClasss() {
188 super(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
192 com.nokia.cbam.lcn.v32.ApiClient buildLcnApiClient(String vnfmId) {
196 SubscriptionsApi defaultApi = Mockito.mock(SubscriptionsApi.class);
197 when(c.createService(SubscriptionsApi.class)).thenReturn(defaultApi);
199 TestClasss testInstnace = new TestClasss();
200 assertNotNull(testInstnace.getCbamLcnApi(VNFM_ID));
201 assertEquals(defaultApi, testInstnace.getCbamLcnApi(VNFM_ID));
205 * Test API wrapping for LCM
206 * (questionable benefit [ this is more less ensured by Java type safety) ]
209 public void testLcnAPiWrapping() {
210 com.nokia.cbam.lcm.v32.ApiClient c = Mockito.mock(com.nokia.cbam.lcm.v32.ApiClient.class);
211 class TestClasss extends CbamRestApiProvider {
212 public TestClasss() {
213 super(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
217 ApiClient buildLcmApiClient(String vnfmId) {
221 VnfsApi defaultApi = Mockito.mock(VnfsApi.class);
222 when(c.createService(VnfsApi.class)).thenReturn(defaultApi);
224 TestClasss testInstnace = new TestClasss();
225 assertNotNull(testInstnace.getCbamLcmApi(VNFM_ID));
226 assertEquals(defaultApi, testInstnace.getCbamLcmApi(VNFM_ID));
230 * Test API wrapping for LCM
231 * (questionable benefit [ this is more less ensured by Java type safety) ]
234 public void testOperationExecutionsApiAPiWrapping() {
235 com.nokia.cbam.lcm.v32.ApiClient c = Mockito.mock(com.nokia.cbam.lcm.v32.ApiClient.class);
236 class TestClasss extends CbamRestApiProvider {
237 public TestClasss() {
238 super(driverProperties, cbamTokenProvider, vnfmInfoProvider, cbamSecurityProvider);
242 ApiClient buildLcmApiClient(String vnfmId) {
246 OperationExecutionsApi defaultApi = Mockito.mock(OperationExecutionsApi.class);
247 when(c.createService(OperationExecutionsApi.class)).thenReturn(defaultApi);
249 TestClasss testInstnace = new TestClasss();
250 assertNotNull(testInstnace.getCbamOperationExecutionApi(VNFM_ID));
251 assertEquals(defaultApi, testInstnace.getCbamOperationExecutionApi(VNFM_ID));