62ffdb4fddd3c1f52be21846835cd3a06bb98184
[vfc/nfvo/driver/vnfm/svnfm.git] /
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 package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc;
17
18 import org.apache.http.HttpHeaders;
19 import org.apache.http.client.methods.HttpGet;
20 import org.junit.Assert;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.mockito.Mock;
24 import org.mockito.Mockito;
25 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.IpMappingProvider;
26 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.TestUtil;
27 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.TestBase;
28 import org.onap.vfccatalog.ApiException;
29 import org.onap.vfccatalog.model.VnfPkgDetailInfo;
30 import org.onap.vfccatalog.model.VnfPkgInfo;
31
32 import java.io.ByteArrayInputStream;
33 import java.io.IOException;
34
35 import static junit.framework.TestCase.assertEquals;
36 import static junit.framework.TestCase.fail;
37 import static org.mockito.Mockito.verify;
38 import static org.mockito.Mockito.when;
39 import static org.springframework.test.util.ReflectionTestUtils.setField;
40
41 public class TestVfcPackageProvider extends TestBase {
42
43     private static final String CSAR_ID = "csarId";
44     private static final String CBAM_VNFD_ID = "CBAM_VNFD_ID";
45     @Mock
46     private IpMappingProvider ipMappingProvider;
47
48     @Mock
49     private VfcPackageProvider vfcPackageProvider;
50
51
52     @Before
53     public void initMocks() throws Exception {
54         setField(VfcPackageProvider.class, "logger", logger);
55         vfcPackageProvider = new VfcPackageProvider(vfcRestApiProvider, ipMappingProvider);
56     }
57
58     /**
59      * query CBAM VNFD identifier from VF-C catalog
60      */
61     @Test
62     public void testGetCbamVnfd() throws Exception {
63         VnfPkgDetailInfo vnfPackageDetails = new VnfPkgDetailInfo();
64         vnfPackageDetails.setCsarId(CSAR_ID);
65         vnfPackageDetails.setPackageInfo(new VnfPkgInfo());
66         vnfPackageDetails.getPackageInfo().setVnfdModel("{ \"metadata\" : { \"resourceVendorModelNumber\" : \"" + CBAM_VNFD_ID + "\" }}");
67         vnfPackageDetails.getPackageInfo().setDownloadUrl("http://127.0.0.1/a.csar");
68         when(vfcCatalogApi.queryVnfPackage(CSAR_ID)).thenReturn(vnfPackageDetails);
69         //when
70         String cbamVnfdId = vfcPackageProvider.getCbamVnfdId(CSAR_ID);
71         //verify
72         assertEquals(CBAM_VNFD_ID, cbamVnfdId);
73     }
74
75     /**
76      * download ONAP VNFD from VF-C catalog
77      */
78     @Test
79     public void testDownload() throws Exception {
80         VnfPkgDetailInfo vnfPackageDetails = new VnfPkgDetailInfo();
81         vnfPackageDetails.setCsarId(CSAR_ID);
82         vnfPackageDetails.setPackageInfo(new VnfPkgInfo());
83         vnfPackageDetails.getPackageInfo().setVnfdModel("{ \"metadata\" : { \"resourceVendorModelNumber\" : \"" + CBAM_VNFD_ID + "\" }}");
84         vnfPackageDetails.getPackageInfo().setDownloadUrl("http://127.0.0.1/a.csar");
85         when(vfcCatalogApi.queryVnfPackage(CSAR_ID)).thenReturn(vnfPackageDetails);
86         byte[] onapPackageContent = TestUtil.loadFile("unittests/TestCbamCatalogManager.sample.csar");
87         when(ipMappingProvider.mapPrivateIpToPublicIp("127.0.0.1")).thenReturn("1.2.3.4");
88         when(entity.getContent()).thenReturn(new ByteArrayInputStream(onapPackageContent));
89         //when
90         byte[] actualContent = vfcPackageProvider.getPackage(CSAR_ID);
91         //verify
92         Assert.assertArrayEquals(onapPackageContent, actualContent);
93         assertEquals(HttpGet.class, request.getValue().getClass());
94         assertEquals("http://1.2.3.4/a.csar", request.getValue().getURI().toString());
95         assertEquals("application/octet-stream", request.getValue().getFirstHeader(HttpHeaders.ACCEPT).getValue());
96     }
97
98     /**
99      * failure to query package from VF-C is propagated
100      */
101     @Test
102     public void unableToGetCbamVnfdFromCatalog() throws Exception {
103         ApiException expectedException = new ApiException();
104         when(vfcCatalogApi.queryVnfPackage(CSAR_ID)).thenThrow(expectedException);
105         //when
106         try {
107             vfcPackageProvider.getCbamVnfdId(CSAR_ID);
108             fail();
109         } catch (Exception e) {
110             verify(logger).error("Unable to query VNF package with csarId from VF-C", expectedException);
111             assertEquals(expectedException, e.getCause());
112         }
113     }
114
115     /**
116      * failure to download package from VF-C is propagated
117      */
118     @Test
119     public void unableToDownloadFromCatalog() throws Exception {
120         VnfPkgDetailInfo vnfPackageDetails = new VnfPkgDetailInfo();
121         vnfPackageDetails.setCsarId(CSAR_ID);
122         vnfPackageDetails.setPackageInfo(new VnfPkgInfo());
123         vnfPackageDetails.getPackageInfo().setVnfdModel("{ \"metadata\" : { \"resourceVendorModelNumber\" : \"" + CBAM_VNFD_ID + "\" }}");
124         vnfPackageDetails.getPackageInfo().setDownloadUrl("http://127.0.0.1/a.csar");
125         when(vfcCatalogApi.queryVnfPackage(CSAR_ID)).thenReturn(vnfPackageDetails);
126         byte[] onapPackageContent = TestUtil.loadFile("unittests/TestCbamCatalogManager.sample.csar");
127         when(ipMappingProvider.mapPrivateIpToPublicIp("127.0.0.1")).thenReturn("1.2.3.4");
128         IOException expectedException = new IOException();
129         when(httpClient.execute(Mockito.any())).thenThrow(expectedException);
130         //when
131         try {
132             vfcPackageProvider.getPackage(CSAR_ID);
133             fail();
134         } catch (Exception e) {
135             verify(logger).error("Unable to download package from http://1.2.3.4/a.csar from VF-C", expectedException);
136             assertEquals(expectedException, e.getCause());
137         }
138     }
139
140     /**
141      * failure to query package for download package from VF-C is propagated
142      */
143     @Test
144     public void unableToQueryPackageForDownloadFromCatalog() throws Exception {
145         ApiException expectedException = new ApiException();
146         when(vfcCatalogApi.queryVnfPackage(CSAR_ID)).thenThrow(expectedException);
147         //when
148         try {
149             vfcPackageProvider.getPackage(CSAR_ID);
150             fail();
151         } catch (Exception e) {
152             verify(logger).error("Unable to query VNF package with csarId from VF-C", expectedException);
153             assertEquals(expectedException, e.getCause());
154         }
155     }
156 }