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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.distribution.forwarding.xacml.pdp.engine;
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;
31 import static org.junit.Assert.assertEquals;
32 import static org.junit.Assert.fail;
34 import com.google.gson.Gson;
35 import com.google.gson.reflect.TypeToken;
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;
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;
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;
76 import org.onap.sdc.api.notification.IArtifactInfo;
78 public class XacmlPdpArtifactForwarderTest {
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);
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);
103 public void testForwardPolicy()
104 throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException,SecurityException,
105 IllegalArgumentException, IllegalAccessException, IOException, ClassNotFoundException {
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);
119 when(httpClientMock.execute(anyObject())).thenReturn(response);
121 XacmlPdpArtifactForwarder forwarder = new XacmlPdpArtifactForwarder();
122 forwarder.configure("xacmlPdpConfiguration");
125 ArrayList<VfModuleModel> vfModuleModels = new ArrayList<VfModuleModel>();
127 // Read the parameters from JSON using Gson
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);
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());
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());
144 CloudArtifact cloudArtifact = new CloudArtifact(vfModuleModels,artifactHashMap);
146 forwarder.forward(cloudArtifact);
150 class BusTopicParamsMatcher extends BaseMatcher<BusTopicParams> {
152 private BusTopicParams busTopicParams;
154 BusTopicParamsMatcher(final BusTopicParams busTopicParams) {
155 this.busTopicParams = busTopicParams;
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();
173 public void describeTo(Description arg0) {}
176 class ArtifactInfoImpl implements IArtifactInfo {
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;
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);
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());
216 return relatedArtifactsUUID;
219 public String getArtifactName() {
223 public void setArtifactName(String artifactName) {
224 this.artifactName = artifactName;
227 public String getArtifactType() {
231 public void setArtifactType(String artifactType) {
232 this.artifactType = artifactType;
235 public String getArtifactURL() {
239 public void setArtifactURL(String artifactURL) {
240 this.artifactURL = artifactURL;
243 public String getArtifactChecksum() {
244 return artifactChecksum;
247 public void setArtifactChecksum(String artifactChecksum) {
248 this.artifactChecksum = artifactChecksum;
251 public String getArtifactDescription() {
252 return artifactDescription;
255 public void setArtifactDescription(String artifactDescription) {
256 this.artifactDescription = artifactDescription;
259 public Integer getArtifactTimeout() {
260 return artifactTimeout;
263 public void setArtifactTimeout(Integer artifactTimeout) {
264 this.artifactTimeout = artifactTimeout;
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 + "]";
278 public String getArtifactVersion() {
279 return artifactVersion;
282 public void setArtifactVersion(String artifactVersion) {
283 this.artifactVersion = artifactVersion;
286 public String getArtifactUUID() {
290 public void setArtifactUUID(String artifactUUID) {
291 this.artifactUUID = artifactUUID;
294 public String getGeneratedFromUUID() {
295 return generatedFromUUID;
298 public void setGeneratedFromUUID(String generatedFromUUID) {
299 this.generatedFromUUID = generatedFromUUID;
302 public IArtifactInfo getGeneratedArtifact() {
303 return generatedArtifact;
306 public void setGeneratedArtifact(IArtifactInfo generatedArtifact) {
307 this.generatedArtifact = generatedArtifact;
310 public List<IArtifactInfo> getRelatedArtifacts(){
311 List<IArtifactInfo> temp = new ArrayList<IArtifactInfo>();
312 if( relatedArtifactsInfo != null ){
313 temp.addAll(relatedArtifactsInfo);
318 public void setRelatedArtifacts(List<String> relatedArtifacts) {
319 this.relatedArtifacts = relatedArtifacts;
322 public void setRelatedArtifactsInfo(List<IArtifactInfo> relatedArtifactsInfo) {
323 this.relatedArtifactsInfo = relatedArtifactsInfo;
326 public List<String> getRelatedArtifactsUUID(){
327 return relatedArtifacts;