Add example policy for HTTPS 31/74931/1
authorliamfallon <liam.fallon@est.tech>
Wed, 19 Dec 2018 17:48:47 +0000 (17:48 +0000)
committerliamfallon <liam.fallon@est.tech>
Wed, 19 Dec 2018 17:48:53 +0000 (17:48 +0000)
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>
examples/examples-decisionmaker/pom.xml
examples/examples-decisionmaker/src/main/resources/examples/config/DecisionMaker/ApexConfigHealthCheckRESTClient.json [new file with mode: 0644]
examples/examples-decisionmaker/src/main/resources/logic/HealthCheckTask.js [new file with mode: 0644]
examples/examples-decisionmaker/src/main/resources/policy/HealthCheckPolicyModel.apex [new file with mode: 0644]
model/utilities/src/main/java/org/onap/policy/apex/model/utilities/typeutils/ClassBuilder.java
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConsumer.java
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/main/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducer.java
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientConusmerTest.java
plugins/plugins-event/plugins-event-carrier/plugins-event-carrier-restclient/src/test/java/org/onap/policy/apex/plugins/event/carrier/restclient/ApexRestClientProducerTest.java

index 245608c..1b25e20 100644 (file)
@@ -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>
                             <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 (file)
index 0000000..ec7391a
--- /dev/null
@@ -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 (file)
index 0000000..ebc0e63
--- /dev/null
@@ -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 (file)
index 0000000..c799a8f
--- /dev/null
@@ -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
+
index 7070daa..4c8bd13 100644 (file)
@@ -39,6 +39,7 @@ import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
  * <a href="https://github.com/KetothXupack/stackoverflow-answers/tree/master/q39401083">
  * https://github.com/KetothXupack/stackoverflow-answers/tree/master/q39401083</a><br>
  */
+@SuppressWarnings("restriction")
 public class ClassBuilder {
     // Logger for this class
     private static final XLogger LOGGER = XLoggerFactory.getXLogger(ClassBuilder.class);
@@ -69,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);
             }
         }
     }
index 04397d6..5591777 100644 (file)
@@ -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()) {
index a7e0ddd..4113cea 100644 (file)
@@ -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));
         }
     }
 
index 1498678..ae75dd7 100644 (file)
@@ -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);
 
index 3ef1724..8f0e094 100644 (file)
@@ -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);