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