enable merge sdc client part into Distribution release image
[multicloud/framework.git] / artifactbroker / plugins / forwarding-plugins / src / test / java / org / onap / policy / distribution / forwarding / k8s / engine / K8sArtifactForwarderTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2018 Ericsson. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  * 
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  * 
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  * 
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.distribution.forwarding.k8.engine;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.fail;
25 import static org.mockito.Matchers.anyObject;
26 import static org.mockito.Matchers.argThat;
27 import static org.mockito.Matchers.eq;
28 import static org.mockito.Mockito.mock;
29 import static org.mockito.Mockito.times;
30 import static org.mockito.Mockito.verify;
31 import static org.mockito.Mockito.when;
32
33 import com.google.gson.Gson;
34 import com.google.gson.reflect.TypeToken;
35
36 import java.io.ByteArrayInputStream;
37 import java.io.IOException;
38 import java.lang.reflect.Field;
39 import java.lang.reflect.Modifier;
40 import java.lang.reflect.Type;
41 import java.nio.file.Files;
42 import java.nio.file.Paths;
43 import java.security.KeyManagementException;
44 import java.security.NoSuchAlgorithmException;
45 import java.util.ArrayList;
46 import java.util.Collection;
47 import java.util.HashMap;
48 import java.util.List;
49 import javax.ws.rs.client.Entity;
50 import javax.ws.rs.core.Response;
51
52 import org.apache.http.HttpEntity;
53 import org.apache.http.HttpStatus;
54 import org.apache.http.HttpVersion;
55 import org.apache.http.client.methods.CloseableHttpResponse;
56 import org.apache.http.client.methods.HttpPost;
57 import org.apache.http.impl.client.CloseableHttpClient;
58 import org.apache.http.message.BasicStatusLine;
59 import org.hamcrest.BaseMatcher;
60 import org.hamcrest.Description;
61 import org.junit.BeforeClass;
62 import org.junit.Test;
63
64 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
65 import org.onap.policy.common.parameters.ParameterGroup;
66 import org.onap.policy.common.parameters.ParameterService;
67 import org.onap.policy.distribution.forwarding.k8s.K8sArtifactForwarder;
68 import org.onap.policy.distribution.forwarding.k8s.K8sArtifactForwarderParameterGroup.K8sArtifactForwarderParameterGroupBuilder;
69 import org.onap.policy.distribution.main.PolicyDistributionException;
70 import org.onap.policy.distribution.model.CloudArtifact;
71 import org.onap.policy.distribution.model.GsonUtil;
72 import org.onap.policy.distribution.model.Policy;
73 import org.onap.policy.distribution.model.VfModuleModel;
74
75 import org.onap.sdc.api.notification.IArtifactInfo;
76
77 public class K8sArtifactForwarderTest {
78
79     private static final BusTopicParams BUS_TOPIC_PARAMS = BusTopicParams.builder().useHttps(false).hostname("myHost")
80             .port(1234).userName("myUser").password("myPassword").managed(true).build();
81     private static final String CLIENT_AUTH = "ClientAuth";
82     private static final String CLIENT_AUTH_VALUE = "myClientAuth";
83     private static final String PDP_GROUP_VALUE = "myPdpGroup";
84     private HashMap<String, Object> headers = new HashMap<>();
85     private BusTopicParamsMatcher matcher = new BusTopicParamsMatcher(BUS_TOPIC_PARAMS);
86
87     /**
88      * Set up.
89      */
90     @BeforeClass
91     public static void setUp() {
92         ParameterGroup parameterGroup = new K8sArtifactForwarderParameterGroupBuilder()
93                 .setUseHttps(BUS_TOPIC_PARAMS.isUseHttps()).setHostname(BUS_TOPIC_PARAMS.getHostname())
94                 .setPort(BUS_TOPIC_PARAMS.getPort()).setUserName(BUS_TOPIC_PARAMS.getUserName())
95                 .setPassword(BUS_TOPIC_PARAMS.getPassword()).setClientAuth(CLIENT_AUTH_VALUE)
96                 .setIsManaged(BUS_TOPIC_PARAMS.isManaged()).setPdpGroup(PDP_GROUP_VALUE).build();
97         parameterGroup.setName("xacmlPdpConfiguration");
98         ParameterService.register(parameterGroup);
99     }
100
101     @Test
102     public void testForwardPolicy()
103             throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException,SecurityException,
104             IllegalArgumentException, IllegalAccessException, IOException, ClassNotFoundException {
105
106         CloseableHttpClient httpClientMock = mock(CloseableHttpClient.class);
107         headers.put(CLIENT_AUTH, CLIENT_AUTH_VALUE);
108         //when(httpClientMock.execute(any(HttpPost.class))).thenReturn(Response.ok().build());
109         //when(httpClientMock.execute(anyObject())).thenReturn(CloseableHttpResponse.ok().build());
110         CloseableHttpResponse response = mock(CloseableHttpResponse.class);
111         HttpEntity entity = mock(HttpEntity.class);
112         when(response.getStatusLine()).thenReturn(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "FINE!"));
113         //when(entity.getContent()).thenReturn(getClass().getClassLoader().getResourceAsStream("result.txt"));
114         //when(entity.getContent()).thenReturn("result of content");
115         when(entity.getContent()).thenReturn(new ByteArrayInputStream( "{foo : 'bar'}".getBytes()));
116         when(response.getEntity()).thenReturn(entity);
117
118         when(httpClientMock.execute(anyObject())).thenReturn(response);
119
120         K8sArtifactForwarder forwarder = new K8sArtifactForwarder();
121         forwarder.configure("xacmlPdpConfiguration");
122
123
124         ArrayList<VfModuleModel> vfModuleModels = new ArrayList<VfModuleModel>();
125         try {
126             // Read the parameters from JSON using Gson
127
128             String data = new String(Files.readAllBytes(Paths.get("src/test/resource/modules.json")));
129             Type type = new TypeToken<ArrayList<VfModuleModel>>() {}.getType();
130             Gson gson = new Gson();
131             vfModuleModels = gson.fromJson(data, type);
132                 
133             //vfModuleModels= GsonUtil.parseJsonArrayWithGson(data, VfModuleModel.class);
134             assertEquals(4, vfModuleModels.size());
135         } catch (final Exception e) {
136             fail("test should not thrown an exception here: " + e.getMessage());
137         }
138
139         HashMap<String, IArtifactInfo> artifactHashMap = new HashMap<>();
140         artifactHashMap.put("4d4a37ef-6a1f-4cb2-b3c9-b380a5940431",new ArtifactInfoImpl());
141         artifactHashMap.put("0a38b7ef-93b9-4d48-856d-efb56d53aab8",new ArtifactInfoImpl());
142
143         CloudArtifact cloudArtifact = new CloudArtifact(vfModuleModels,artifactHashMap);
144
145         forwarder.forward(cloudArtifact);
146
147     }
148
149     class BusTopicParamsMatcher extends BaseMatcher<BusTopicParams> {
150
151         private BusTopicParams busTopicParams;
152
153         BusTopicParamsMatcher(final BusTopicParams busTopicParams) {
154             this.busTopicParams = busTopicParams;
155         }
156
157         @Override
158         public boolean matches(Object arg0) {
159             if (arg0 instanceof BusTopicParams) {
160                 BusTopicParams toCompareTo = (BusTopicParams) arg0;
161                 return toCompareTo.isUseHttps() == busTopicParams.isUseHttps()
162                         && toCompareTo.getHostname().equals(busTopicParams.getHostname())
163                         && toCompareTo.getPort() == busTopicParams.getPort()
164                         && toCompareTo.getUserName().equals(busTopicParams.getUserName())
165                         && toCompareTo.getPassword().equals(busTopicParams.getPassword())
166                         && toCompareTo.isManaged() == busTopicParams.isManaged();
167             }
168             return false;
169         }
170
171         @Override
172         public void describeTo(Description arg0) {}
173     }
174
175     class ArtifactInfoImpl implements IArtifactInfo {
176
177         private String artifactName;
178         private String artifactType;
179         private String artifactURL;
180         private String artifactChecksum;
181         private String artifactDescription;
182         private Integer artifactTimeout;
183         private String artifactVersion;
184         private String artifactUUID;
185         private String generatedFromUUID;
186         private IArtifactInfo generatedArtifact;
187         private List<String> relatedArtifacts;
188         private List<IArtifactInfo> relatedArtifactsInfo;
189
190         ArtifactInfoImpl(){}
191         
192         private ArtifactInfoImpl(IArtifactInfo iArtifactInfo){
193             artifactName = iArtifactInfo.getArtifactName();
194             artifactType = iArtifactInfo.getArtifactType(); 
195             artifactURL = iArtifactInfo.getArtifactURL();
196             artifactChecksum = iArtifactInfo.getArtifactChecksum();
197             artifactDescription = iArtifactInfo.getArtifactDescription();
198             artifactTimeout = iArtifactInfo.getArtifactTimeout();
199             artifactVersion = iArtifactInfo.getArtifactVersion();
200             artifactUUID = iArtifactInfo.getArtifactUUID();
201             generatedArtifact = iArtifactInfo.getGeneratedArtifact();
202             relatedArtifactsInfo = iArtifactInfo.getRelatedArtifacts();
203             relatedArtifacts = fillRelatedArtifactsUUID(relatedArtifactsInfo);
204             
205         }
206         
207         
208         private List<String> fillRelatedArtifactsUUID(List<IArtifactInfo> relatedArtifactsInfo) {
209             List<String> relatedArtifactsUUID = null;
210             if ( relatedArtifactsInfo != null && !relatedArtifactsInfo.isEmpty()) {
211                 relatedArtifactsUUID = new ArrayList<>();
212                 for (IArtifactInfo curr: relatedArtifactsInfo) {
213                     relatedArtifactsUUID.add(curr.getArtifactUUID());
214                 }
215             }
216             return relatedArtifactsUUID;
217         }
218     
219         public String getArtifactName() {
220             return artifactName;
221         }
222     
223         public void setArtifactName(String artifactName) {
224             this.artifactName = artifactName;
225         }
226     
227         public String getArtifactType() {
228             return artifactType;
229         }
230     
231         public void setArtifactType(String artifactType) {
232             this.artifactType = artifactType;
233         }
234     
235         public String getArtifactURL() {
236             return artifactURL;
237         }
238     
239         public void setArtifactURL(String artifactURL) {
240             this.artifactURL = artifactURL;
241         }
242     
243         public String getArtifactChecksum() {
244             return artifactChecksum;
245         }
246     
247         public void setArtifactChecksum(String artifactChecksum) {
248             this.artifactChecksum = artifactChecksum;
249         }
250     
251         public String getArtifactDescription() {
252             return artifactDescription;
253         }
254     
255         public void setArtifactDescription(String artifactDescription) {
256             this.artifactDescription = artifactDescription;
257         }
258     
259         public Integer getArtifactTimeout() {
260             return artifactTimeout;
261         }
262     
263         public void setArtifactTimeout(Integer artifactTimeout) {
264             this.artifactTimeout = artifactTimeout;
265         }
266     
267         @Override
268         public String toString() {
269             return "BaseArtifactInfoImpl [artifactName=" + artifactName
270                     + ", artifactType=" + artifactType + ", artifactURL="
271                     + artifactURL + ", artifactChecksum=" + artifactChecksum
272                     + ", artifactDescription=" + artifactDescription
273                     + ", artifactVersion=" + artifactVersion
274                     + ", artifactUUID=" + artifactUUID
275                     + ", artifactTimeout=" + artifactTimeout + "]";
276         }
277     
278         public String getArtifactVersion() {
279             return artifactVersion;
280         }
281     
282         public void setArtifactVersion(String artifactVersion) {
283             this.artifactVersion = artifactVersion;
284         }
285     
286         public String getArtifactUUID() {
287             return artifactUUID;
288         }
289     
290         public void setArtifactUUID(String artifactUUID) {
291             this.artifactUUID = artifactUUID;
292         }
293     
294         public String getGeneratedFromUUID() {
295             return generatedFromUUID;
296         }
297     
298         public void setGeneratedFromUUID(String generatedFromUUID) {
299             this.generatedFromUUID = generatedFromUUID;
300         }
301         
302         public IArtifactInfo getGeneratedArtifact() {
303             return generatedArtifact;
304         }
305     
306         public void setGeneratedArtifact(IArtifactInfo generatedArtifact) {
307             this.generatedArtifact = generatedArtifact;
308         }
309         
310         public List<IArtifactInfo> getRelatedArtifacts(){
311             List<IArtifactInfo> temp = new ArrayList<IArtifactInfo>();
312             if( relatedArtifactsInfo != null ){
313                 temp.addAll(relatedArtifactsInfo);
314             }
315             return temp;
316         }
317         
318         public void setRelatedArtifacts(List<String> relatedArtifacts) {
319             this.relatedArtifacts = relatedArtifacts;
320         }
321     
322         public void setRelatedArtifactsInfo(List<IArtifactInfo> relatedArtifactsInfo) {
323             this.relatedArtifactsInfo = relatedArtifactsInfo;
324         }
325         
326         public List<String> getRelatedArtifactsUUID(){
327             return relatedArtifacts;
328         }
329     
330     }
331
332
333 }