add subplug for k8s to invoke Artifact forward support
[multicloud/framework.git] / artifactbroker / plugins / forwarding-plugins / src / test / java / org / onap / policy / distribution / forwarding / xacml / pdp / engine / XacmlPdpArtifactForwarderTest.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.xacml.pdp.engine;
22
23 import static org.mockito.Matchers.anyObject;
24 import static org.mockito.Matchers.argThat;
25 import static org.mockito.Matchers.eq;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.times;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.when;
30
31 import static org.junit.Assert.assertEquals;
32 import static org.junit.Assert.fail;
33
34 import com.google.gson.Gson;
35 import com.google.gson.reflect.TypeToken;
36
37 import java.io.IOException;
38 import java.io.ByteArrayInputStream;
39 import java.lang.reflect.Field;
40 import java.lang.reflect.Modifier;
41 import java.lang.reflect.Type;
42 import java.nio.file.Files;
43 import java.nio.file.Paths;
44 import java.security.KeyManagementException;
45 import java.security.NoSuchAlgorithmException;
46 import java.util.ArrayList;
47 import java.util.Collection;
48 import java.util.HashMap;
49 import java.util.List;
50 import javax.ws.rs.client.Entity;
51 import javax.ws.rs.core.Response;
52 import org.hamcrest.BaseMatcher;
53 import org.hamcrest.Description;
54 import org.junit.BeforeClass;
55 import org.junit.Test;
56
57 import org.apache.http.HttpStatus;
58 import org.apache.http.HttpVersion;
59 import org.apache.http.HttpEntity;
60 import org.apache.http.client.methods.HttpPost;
61 import org.apache.http.impl.client.CloseableHttpClient;
62 import org.apache.http.client.methods.CloseableHttpResponse;
63 import org.apache.http.message.BasicStatusLine;
64
65 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
66 import org.onap.policy.common.parameters.ParameterGroup;
67 import org.onap.policy.common.parameters.ParameterService;
68 import org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpArtifactForwarder;
69 import org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpArtifactForwarderParameterGroup.XacmlPdpArtifactForwarderParameterGroupBuilder;
70 import org.onap.policy.distribution.main.PolicyDistributionException;
71 import org.onap.policy.distribution.model.GsonUtil;
72 import org.onap.policy.distribution.model.Policy;
73 import org.onap.policy.distribution.model.CloudArtifact;
74 import org.onap.policy.distribution.model.VfModuleModel;
75
76 import org.onap.sdc.api.notification.IArtifactInfo;
77
78 public class XacmlPdpArtifactForwarderTest {
79
80     private static final BusTopicParams BUS_TOPIC_PARAMS = BusTopicParams.builder().useHttps(false).hostname("myHost")
81             .port(1234).userName("myUser").password("myPassword").managed(true).build();
82     private static final String CLIENT_AUTH = "ClientAuth";
83     private static final String CLIENT_AUTH_VALUE = "myClientAuth";
84     private static final String PDP_GROUP_VALUE = "myPdpGroup";
85     private HashMap<String, Object> headers = new HashMap<>();
86     private BusTopicParamsMatcher matcher = new BusTopicParamsMatcher(BUS_TOPIC_PARAMS);
87
88     /**
89      * Set up.
90      */
91     @BeforeClass
92     public static void setUp() {
93         ParameterGroup parameterGroup = new XacmlPdpArtifactForwarderParameterGroupBuilder()
94                 .setUseHttps(BUS_TOPIC_PARAMS.isUseHttps()).setHostname(BUS_TOPIC_PARAMS.getHostname())
95                 .setPort(BUS_TOPIC_PARAMS.getPort()).setUserName(BUS_TOPIC_PARAMS.getUserName())
96                 .setPassword(BUS_TOPIC_PARAMS.getPassword()).setClientAuth(CLIENT_AUTH_VALUE)
97                 .setIsManaged(BUS_TOPIC_PARAMS.isManaged()).setPdpGroup(PDP_GROUP_VALUE).build();
98         parameterGroup.setName("xacmlPdpConfiguration");
99         ParameterService.register(parameterGroup);
100     }
101
102     @Test
103     public void testForwardPolicy()
104             throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException,SecurityException,
105             IllegalArgumentException, IllegalAccessException, IOException, ClassNotFoundException {
106
107         CloseableHttpClient httpClientMock = mock(CloseableHttpClient.class);
108         headers.put(CLIENT_AUTH, CLIENT_AUTH_VALUE);
109         //when(httpClientMock.execute(any(HttpPost.class))).thenReturn(Response.ok().build());
110         //when(httpClientMock.execute(anyObject())).thenReturn(CloseableHttpResponse.ok().build());
111         CloseableHttpResponse response = mock(CloseableHttpResponse.class);
112         HttpEntity entity = mock(HttpEntity.class);
113         when(response.getStatusLine()).thenReturn(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "FINE!"));
114         //when(entity.getContent()).thenReturn(getClass().getClassLoader().getResourceAsStream("result.txt"));
115         //when(entity.getContent()).thenReturn("result of content");
116         when(entity.getContent()).thenReturn(new ByteArrayInputStream( "{foo : 'bar'}".getBytes()));
117         when(response.getEntity()).thenReturn(entity);
118
119         when(httpClientMock.execute(anyObject())).thenReturn(response);
120
121         XacmlPdpArtifactForwarder forwarder = new XacmlPdpArtifactForwarder();
122         forwarder.configure("xacmlPdpConfiguration");
123
124
125         ArrayList<VfModuleModel> vfModuleModels = new ArrayList<VfModuleModel>();
126         try {
127             // Read the parameters from JSON using Gson
128
129             String data = new String(Files.readAllBytes(Paths.get("src/test/resource/modules.json")));
130             Type type = new TypeToken<ArrayList<VfModuleModel>>() {}.getType();
131             Gson gson = new Gson();
132             vfModuleModels= gson.fromJson(data, type);
133                 
134             //vfModuleModels= GsonUtil.parseJsonArrayWithGson(data, VfModuleModel.class);
135             assertEquals(4, vfModuleModels.size());
136         } catch (final Exception e) {
137             fail("test should not thrown an exception here: " + e.getMessage());
138         }
139
140         HashMap<String, IArtifactInfo> artifactHashMap = new HashMap<>();
141         artifactHashMap.put("4d4a37ef-6a1f-4cb2-b3c9-b380a5940431",new ArtifactInfoImpl());
142         artifactHashMap.put("0a38b7ef-93b9-4d48-856d-efb56d53aab8",new ArtifactInfoImpl());
143
144         CloudArtifact cloudArtifact = new CloudArtifact(vfModuleModels,artifactHashMap);
145
146         forwarder.forward(cloudArtifact);
147
148     }
149
150     class BusTopicParamsMatcher extends BaseMatcher<BusTopicParams> {
151
152         private BusTopicParams busTopicParams;
153
154         BusTopicParamsMatcher(final BusTopicParams busTopicParams) {
155             this.busTopicParams = busTopicParams;
156         }
157
158         @Override
159         public boolean matches(Object arg0) {
160             if (arg0 instanceof BusTopicParams) {
161                 BusTopicParams toCompareTo = (BusTopicParams) arg0;
162                 return toCompareTo.isUseHttps() == busTopicParams.isUseHttps()
163                         && toCompareTo.getHostname().equals(busTopicParams.getHostname())
164                         && toCompareTo.getPort() == busTopicParams.getPort()
165                         && toCompareTo.getUserName().equals(busTopicParams.getUserName())
166                         && toCompareTo.getPassword().equals(busTopicParams.getPassword())
167                         && toCompareTo.isManaged() == busTopicParams.isManaged();
168             }
169             return false;
170         }
171
172         @Override
173         public void describeTo(Description arg0) {}
174     }
175
176     class ArtifactInfoImpl implements IArtifactInfo {
177
178         private String artifactName;
179         private String artifactType;
180         private String artifactURL;
181         private String artifactChecksum;
182         private String artifactDescription;
183         private Integer artifactTimeout;
184         private String artifactVersion;
185         private String artifactUUID;
186         private String generatedFromUUID;
187         private IArtifactInfo generatedArtifact;
188         private List<String> relatedArtifacts;
189         private List<IArtifactInfo> relatedArtifactsInfo;
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 }