diff options
author | liamfallon <liam.fallon@est.tech> | 2018-12-19 17:48:47 +0000 |
---|---|---|
committer | Liam Fallon <liam.fallon@est.tech> | 2019-01-07 15:37:03 +0000 |
commit | b60f265ae3fc2246a77a9f66836f6d45dfc5dfd2 (patch) | |
tree | 20f2e7d5ad0107ba814bc5b0a2f7e455007dcf8c | |
parent | 43037b6e94c063d8be0d3ebaa8bc729b30334ff1 (diff) |
Add example policy for HTTPS
Added an example of how to configure HTTPS for an Apex policy.
Issue-ID: POLICY-1222
Change-Id: Iea8a8accac32f6d25c64a8324e202ad5e6221c7a
Signed-off-by: liamfallon <liam.fallon@est.tech>
(cherry picked from commit 1dff5ebe27cbe79de8f9d798e256d41ecccdaa8c)
9 files changed, 191 insertions, 23 deletions
diff --git a/examples/examples-decisionmaker/pom.xml b/examples/examples-decisionmaker/pom.xml index 1fcddbf22..60e63724d 100644 --- a/examples/examples-decisionmaker/pom.xml +++ b/examples/examples-decisionmaker/pom.xml @@ -30,7 +30,8 @@ <description>Specific code for the APEX Decision Maker Example</description> <properties> - <policymodel.name>DecisionMakerPolicyModel</policymodel.name> + <policymodel.decisionmaker.name>DecisionMakerPolicyModel</policymodel.decisionmaker.name> + <policymodel.healthcheck.name>HealthCheckPolicyModel</policymodel.healthcheck.name> <apex-domains-decisionmaker-dir>${project.basedir}/src</apex-domains-decisionmaker-dir> </properties> @@ -50,7 +51,7 @@ <artifactId>exec-maven-plugin</artifactId> <executions> <execution> - <id>generate-policy</id> + <id>generate-decisionmaker-policy</id> <phase>compile</phase> <goals> <goal>java</goal> @@ -59,9 +60,26 @@ <mainClass>org.onap.policy.apex.auth.clieditor.ApexCommandLineEditorMain</mainClass> <classpathScope>compile</classpathScope> <arguments> - <argument>--command-file=${project.basedir}/src/main/resources/policy/${policymodel.name}.apex</argument> - <argument>--output-model-file=${project.build.directory}/classes/${policymodel.name}.json</argument> - <argument>--log-file=${project.build.directory}/${policymodel.name}_policygeneration.log</argument> + <argument>--command-file=${project.basedir}/src/main/resources/policy/${policymodel.decisionmaker.name}.apex</argument> + <argument>--output-model-file=${project.build.directory}/classes/${policymodel.decisionmaker.name}.json</argument> + <argument>--log-file=${project.build.directory}/${policymodel.decisionmaker.name}_policygeneration.log</argument> + <argument>--working-dir=${project.basedir}</argument> + </arguments> + </configuration> + </execution> + <execution> + <id>generate-healthcheck-policy</id> + <phase>compile</phase> + <goals> + <goal>java</goal> + </goals> + <configuration> + <mainClass>org.onap.policy.apex.auth.clieditor.ApexCommandLineEditorMain</mainClass> + <classpathScope>compile</classpathScope> + <arguments> + <argument>--command-file=${project.basedir}/src/main/resources/policy/${policymodel.healthcheck.name}.apex</argument> + <argument>--output-model-file=${project.build.directory}/classes/${policymodel.healthcheck.name}.json</argument> + <argument>--log-file=${project.build.directory}/${policymodel.healthcheck.name}_policygeneration.log</argument> <argument>--working-dir=${project.basedir}</argument> </arguments> </configuration> diff --git a/examples/examples-decisionmaker/src/main/resources/examples/config/DecisionMaker/ApexConfigHealthCheckRESTClient.json b/examples/examples-decisionmaker/src/main/resources/examples/config/DecisionMaker/ApexConfigHealthCheckRESTClient.json new file mode 100644 index 000000000..ec7391afe --- /dev/null +++ b/examples/examples-decisionmaker/src/main/resources/examples/config/DecisionMaker/ApexConfigHealthCheckRESTClient.json @@ -0,0 +1,57 @@ +{ + "javaProperties" : [ + ["javax.net.ssl.trustStore", "/home/liam/tmp/distribution/etc/ssl/policy-truststore"], + ["javax.net.ssl.trustStorePassword", "UG9sMWN5XzBuYXA="] + ], + "engineServiceParameters": { + "name": "MyApexEngine", + "version": "0.0.1", + "id": 45, + "instanceCount": 4, + "deploymentPort": 12345, + "policyModelFileName": "/home/liam/git/onap/policy/apex-pdp/examples/examples-decisionmaker/target/classes/HealthCheckPolicyModel.json", + "engineParameters": { + "executorParameters": { + "JAVASCRIPT": { + "parameterClassName": "org.onap.policy.apex.plugins.executor.javascript.JavascriptExecutorParameters" + } + } + } + }, + "eventInputParameters": { + "HealthCheckConsumer": { + "carrierTechnologyParameters": { + "carrierTechnology": "RESTCLIENT", + "parameterClassName": "org.onap.policy.apex.plugins.event.carrier.restclient.RestClientCarrierTechnologyParameters", + "parameters": { + "url": "https://policy:6969/healthcheck", + "httpHeaders" : [ + ["Authorization", "Basic aGVhbHRoY2hlY2s6emIhWHp0RzM0"] + ] + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON", + "parameters": { + "nameAlias": "none", + "versionAlias": "version", + "sourceAlias": "from" + } + }, + "eventName": "HealthCheckEvent" + } + }, + "eventOutputParameters": { + "logProducer": { + "carrierTechnologyParameters": { + "carrierTechnology": "FILE", + "parameters": { + "fileName": "/tmp/EventsOut.json" + } + }, + "eventProtocolParameters": { + "eventProtocol": "JSON" + } + } + } +} diff --git a/examples/examples-decisionmaker/src/main/resources/logic/HealthCheckTask.js b/examples/examples-decisionmaker/src/main/resources/logic/HealthCheckTask.js new file mode 100644 index 000000000..ebc0e6387 --- /dev/null +++ b/examples/examples-decisionmaker/src/main/resources/logic/HealthCheckTask.js @@ -0,0 +1,26 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2016-2018 Ericsson. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +executor.logger.info(executor.subject.id); +executor.logger.info(executor.inFields); + +executor.logger.info(executor.outFields); + +var returnValue = executor.isTrue; diff --git a/examples/examples-decisionmaker/src/main/resources/policy/HealthCheckPolicyModel.apex b/examples/examples-decisionmaker/src/main/resources/policy/HealthCheckPolicyModel.apex new file mode 100644 index 000000000..c799a8f37 --- /dev/null +++ b/examples/examples-decisionmaker/src/main/resources/policy/HealthCheckPolicyModel.apex @@ -0,0 +1,58 @@ +#------------------------------------------------------------------------------- +# ============LICENSE_START======================================================= +# Copyright (C) 2016-2018 Ericsson. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +#------------------------------------------------------------------------------- + +model create name=HealthCheckPolicyModel + +schema create name=SimpleStringType flavour=Java schema=java.lang.String +schema create name=SimpleIntegerType flavour=Java schema=java.lang.Integer +schema create name=SimpleBooleanType flavour=Java schema=java.lang.Boolean + +event create name=HealthCheckEvent nameSpace=org.onap.policy.apex.domains.HealthCheck source=Distribution target=Apex +event parameter create name=HealthCheckEvent parName=name schemaName=SimpleStringType +event parameter create name=HealthCheckEvent parName=url schemaName=SimpleStringType +event parameter create name=HealthCheckEvent parName=healthy schemaName=SimpleBooleanType +event parameter create name=HealthCheckEvent parName=code schemaName=SimpleIntegerType +event parameter create name=HealthCheckEvent parName=message schemaName=SimpleStringType + +task create name=HealthCheckTask +task inputfield create name=HealthCheckTask fieldName=name schemaName=SimpleStringType +task inputfield create name=HealthCheckTask fieldName=url schemaName=SimpleStringType +task inputfield create name=HealthCheckTask fieldName=healthy schemaName=SimpleBooleanType +task inputfield create name=HealthCheckTask fieldName=code schemaName=SimpleIntegerType +task inputfield create name=HealthCheckTask fieldName=message schemaName=SimpleStringType + +task outputfield create name=HealthCheckTask fieldName=name schemaName=SimpleStringType +task outputfield create name=HealthCheckTask fieldName=url schemaName=SimpleStringType +task outputfield create name=HealthCheckTask fieldName=healthy schemaName=SimpleBooleanType +task outputfield create name=HealthCheckTask fieldName=code schemaName=SimpleIntegerType +task outputfield create name=HealthCheckTask fieldName=message schemaName=SimpleStringType + +task logic create name=HealthCheckTask logicFlavour=JAVASCRIPT logic=LS +#MACROFILE:"src/main/resources/logic/HealthCheckTask.js" +LE + +policy create name=HealthCheckPolicy template=freestyle firstState=HealthCheckState + +policy state create name=HealthCheckPolicy stateName=HealthCheckState triggerName=HealthCheckEvent defaultTaskName=HealthCheckTask +policy state output create name=HealthCheckPolicy stateName=HealthCheckState outputName=HealthCheckOutput eventName=HealthCheckEvent +policy state taskref create name=HealthCheckPolicy stateName=HealthCheckState taskName=HealthCheckTask outputType=DIRECT outputName=HealthCheckOutput + +validate + diff --git a/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java b/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java index 1bdf39317..4c8bd1384 100644 --- a/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java +++ b/model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java @@ -70,8 +70,9 @@ public class ClassBuilder { return new ClassBuilder(Class.forName("java.lang." + className)); } catch (Exception classFindException) { LOGGER.warn("class not found", classFindException); - throw new IllegalArgumentException("Class '" + className - + "' not found. Also looked for a class called 'java.lang." + className + "'", e); + throw new IllegalArgumentException( + "Class '" + className + "' not found. Also looked for a class called 'java.lang." + className + "'", + e); } } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConsumer.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConsumer.java index 04397d688..5591777eb 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConsumer.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConsumer.java @@ -202,7 +202,7 @@ public class ApexRestClientConsumer implements ApexEventConsumer, Runnable { public void run() { try { final Response response = client.target(restConsumerProperties.getUrl()).request("application/json") - .get(); + .headers(restConsumerProperties.getHttpHeadersAsMultivaluedMap()).get(); // Check that the event request worked if (response.getStatus() != Response.Status.OK.getStatusCode()) { diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducer.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducer.java index a7e0ddd52..4113cea4b 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducer.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducer.java @@ -183,9 +183,11 @@ public class ApexRestClientProducer implements ApexEventProducer { private Response sendEventAsRestRequest(final String event) { // We have already checked that it is a PUT or POST request if (RestClientCarrierTechnologyParameters.HttpMethod.POST.equals(restProducerProperties.getHttpMethod())) { - return client.target(restProducerProperties.getUrl()).request("application/json").post(Entity.json(event)); + return client.target(restProducerProperties.getUrl()).request("application/json") + .headers(restProducerProperties.getHttpHeadersAsMultivaluedMap()).post(Entity.json(event)); } else { - return client.target(restProducerProperties.getUrl()).request("application/json").put(Entity.json(event)); + return client.target(restProducerProperties.getUrl()).request("application/json") + .headers(restProducerProperties.getHttpHeadersAsMultivaluedMap()).put(Entity.json(event)); } } diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConusmerTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConusmerTest.java index 1498678e9..ae75dd7e5 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConusmerTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConusmerTest.java @@ -147,7 +147,7 @@ public class ApexRestClientConusmerTest { consumerParameters.setCarrierTechnologyParameters(rcctp); rcctp.setUrl("http://some.place.that.does.not/exist"); SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver(); - + try { arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver); assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod()); @@ -163,6 +163,7 @@ public class ApexRestClientConusmerTest { Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus(); Mockito.doReturn(responseMock).when(builderMock).get(); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcc.setClient(httpClientMock); @@ -182,7 +183,7 @@ public class ApexRestClientConusmerTest { final String outString = outContent.toString(); System.setOut(stdout); - + assertTrue(outString.contains( "reception of event from URL \"http://some.place.that.does.not/exist\" failed with status code 400")); } @@ -215,6 +216,7 @@ public class ApexRestClientConusmerTest { Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus(); Mockito.doReturn(responseMock).when(builderMock).get(); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcc.setClient(httpClientMock); @@ -231,12 +233,11 @@ public class ApexRestClientConusmerTest { } catch (Exception e) { fail("test should not throw an exception"); } - + final String outString = outContent.toString(); System.setOut(stdout); - - assertTrue(outString.contains( - "received an empty event from URL \"http://some.place.that.does.not/exist\"")); + + assertTrue(outString.contains("received an empty event from URL \"http://some.place.that.does.not/exist\"")); } @Test @@ -268,6 +269,7 @@ public class ApexRestClientConusmerTest { Mockito.doReturn("").when(responseMock).readEntity(String.class); Mockito.doReturn(responseMock).when(builderMock).get(); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcc.setClient(httpClientMock); @@ -284,12 +286,11 @@ public class ApexRestClientConusmerTest { } catch (Exception e) { fail("test should not throw an exception"); } - + final String outString = outContent.toString(); System.setOut(stdout); - - assertTrue(outString.contains( - "received an empty event from URL \"http://some.place.that.does.not/exist\"")); + + assertTrue(outString.contains("received an empty event from URL \"http://some.place.that.does.not/exist\"")); } @Test @@ -321,6 +322,7 @@ public class ApexRestClientConusmerTest { Mockito.doReturn("This is an event").when(responseMock).readEntity(String.class); Mockito.doReturn(responseMock).when(builderMock).get(); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcc.setClient(httpClientMock); diff --git a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducerTest.java b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducerTest.java index 3ef172427..8f0e0940b 100644 --- a/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducerTest.java +++ b/plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducerTest.java @@ -161,13 +161,14 @@ public class ApexRestClientProducerTest { Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus(); Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any()); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcp.setClient(httpClientMock); try { arcp.sendEvent(123, "EventName", "This is an Event"); arcp.stop(); - } catch (Exception e) { + } catch (Exception ex) { fail("test should not throw an exception"); } } @@ -197,6 +198,7 @@ public class ApexRestClientProducerTest { Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus(); Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any()); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcp.setClient(httpClientMock); @@ -239,6 +241,7 @@ public class ApexRestClientProducerTest { Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus(); Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any()); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcp.setClient(httpClientMock); @@ -250,14 +253,13 @@ public class ApexRestClientProducerTest { } } - @Test public void testApexRestClientProducerPostEventCacheTrace() { MockitoAnnotations.initMocks(this); ch.qos.logback.classic.Logger classicLogger = (ch.qos.logback.classic.Logger) LOGGER; classicLogger.setLevel(Level.TRACE); - + ApexRestClientProducer arcp = new ApexRestClientProducer(); assertNotNull(arcp); @@ -285,6 +287,7 @@ public class ApexRestClientProducerTest { Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus(); Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any()); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcp.setClient(httpClientMock); @@ -321,6 +324,7 @@ public class ApexRestClientProducerTest { Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus(); Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any()); Mockito.doReturn(builderMock).when(targetMock).request("application/json"); + Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any()); Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl()); arcp.setClient(httpClientMock); |