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.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;
33 import com.google.gson.Gson;
34 import com.google.gson.reflect.TypeToken;
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;
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;
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.xacml.pdp.XacmlPdpArtifactForwarder;
68 import org.onap.policy.distribution.forwarding.xacml.pdp.XacmlPdpArtifactForwarderParameterGroup.XacmlPdpArtifactForwarderParameterGroupBuilder;
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;
75 import org.onap.sdc.api.notification.IArtifactInfo;
77 public class XacmlPdpArtifactForwarderTest {
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);
91 public static void setUp() {
92 ParameterGroup parameterGroup = new XacmlPdpArtifactForwarderParameterGroupBuilder()
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);
102 public void testForwardPolicy()
103 throws KeyManagementException, NoSuchAlgorithmException, NoSuchFieldException,SecurityException,
104 IllegalArgumentException, IllegalAccessException, IOException, ClassNotFoundException {
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);
118 when(httpClientMock.execute(anyObject())).thenReturn(response);
120 XacmlPdpArtifactForwarder forwarder = new XacmlPdpArtifactForwarder();
121 forwarder.configure("xacmlPdpConfiguration");
124 ArrayList<VfModuleModel> vfModuleModels = new ArrayList<VfModuleModel>();
126 // Read the parameters from JSON using Gson
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);
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());
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());
143 CloudArtifact cloudArtifact = new CloudArtifact(vfModuleModels,artifactHashMap);
145 forwarder.forward(cloudArtifact);
149 class BusTopicParamsMatcher extends BaseMatcher<BusTopicParams> {
151 private BusTopicParams busTopicParams;
153 BusTopicParamsMatcher(final BusTopicParams busTopicParams) {
154 this.busTopicParams = busTopicParams;
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();
172 public void describeTo(Description arg0) {}
175 class ArtifactInfoImpl implements IArtifactInfo {
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;
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;