From f996ef829249c304550becb0cb57db3efd3baf6a Mon Sep 17 00:00:00 2001 From: liamfallon Date: Mon, 8 Oct 2018 13:36:31 +0100 Subject: Change vCPE example to use POJOs This review uses POJOs rather than Avro schema to unmarshal and marshal events from and to DMaaP. The POJO classes for interacting with DMaaP have been moved into a common policy module. This review is now ready for full review (finally!). Issue-ID: POLICY-954 Change-Id: Ibb89d8af5b9006821e6a0a756e16bbe3815af15a Signed-off-by: liamfallon Signed-off-by: liamfallon Signed-off-by: Liam Fallon Signed-off-by: liamfallon --- .../apex/domains/onap/vcpe/AaiAndGuardSim.java | 74 ----- .../onap/vcpe/AaiAndGuardSimEndpointTest.java | 183 ----------- .../domains/onap/vcpe/AppcResponseCreator.java | 94 ++++++ .../policy/apex/domains/onap/vcpe/OnapVCpeSim.java | 75 +++++ .../domains/onap/vcpe/OnapVCpeSimEndpoint.java | 343 +++++++++++++++++++++ .../apex/domains/onap/vcpe/OnapVcpeRunner.java | 68 ++++ 6 files changed, 580 insertions(+), 257 deletions(-) delete mode 100644 examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AaiAndGuardSim.java delete mode 100644 examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AaiAndGuardSimEndpointTest.java create mode 100644 examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AppcResponseCreator.java create mode 100644 examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVCpeSim.java create mode 100644 examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVCpeSimEndpoint.java create mode 100644 examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVcpeRunner.java (limited to 'examples/examples-onap-vcpe/src/test/java') diff --git a/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AaiAndGuardSim.java b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AaiAndGuardSim.java deleted file mode 100644 index 93b587a41..000000000 --- a/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AaiAndGuardSim.java +++ /dev/null @@ -1,74 +0,0 @@ -/*- - * ============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========================================================= - */ - -package org.onap.policy.apex.domains.onap.vcpe; - -import java.net.URI; - -import org.glassfish.grizzly.http.server.HttpServer; -import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; -import org.glassfish.jersey.server.ResourceConfig; -import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; - -/** - * The Class AaiAndGuardSim. - */ -public class AaiAndGuardSim { - private static final String BASE_URI = "http://localhost:54321/AAIAndGuardSim"; - private static final int MAX_LOOPS = 100000; - private HttpServer server; - - /** - * Instantiates a new aai and guard sim. - */ - public AaiAndGuardSim() { - final ResourceConfig rc = new ResourceConfig(AaiAndGuardSimEndpointTest.class); - server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc); - - while (!server.isStarted()) { - ThreadUtilities.sleep(50); - } - } - - /** - * Tear down. - * - * @throws Exception the exception - */ - public void tearDown() throws Exception { - server.shutdown(); - } - - /** - * The main method. - * - * @param args the arguments - * @throws Exception the exception - */ - public static void main(final String[] args) throws Exception { - final AaiAndGuardSim sim = new AaiAndGuardSim(); - - for (int index = 0; index < MAX_LOOPS; index++) { - ThreadUtilities.sleep(100); - } - - sim.tearDown(); - } -} diff --git a/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AaiAndGuardSimEndpointTest.java b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AaiAndGuardSimEndpointTest.java deleted file mode 100644 index 5b9040f95..000000000 --- a/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AaiAndGuardSimEndpointTest.java +++ /dev/null @@ -1,183 +0,0 @@ -/*- - * ============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========================================================= - */ - -package org.onap.policy.apex.domains.onap.vcpe; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import com.google.gson.Gson; - -import java.util.Map; -import java.util.Random; - -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.core.Response; - -/** - * The Class AaiAndGuardSimEndpoint. - */ -@Path("/sim") -public class AaiAndGuardSimEndpointTest { - - private static int postMessagesReceived = 0; - private static int putMessagesReceived = 0; - private static int statMessagesReceived = 0; - private static int getMessagesReceived = 0; - - /** - * Service get stats. - * - * @return the response - */ - @Path("/pdp/api/Stats") - @GET - public Response serviceGetStats() { - statMessagesReceived++; - return Response.status(200).entity("{\"GET\": " + getMessagesReceived + ",\"STAT\": " + statMessagesReceived - + ",\"POST\": " + postMessagesReceived + ",\"PUT\": " + putMessagesReceived + "}").build(); - } - - /** - * Service guard post request. - * - * @param jsonString the json string - * @return the response - */ - @Path("/pdp/api/getDecision") - @POST - public Response serviceGuardPostRequest(final String jsonString) { - postMessagesReceived++; - - if (postMessagesReceived % 2 == 0) { - return Response.status(200).entity("{\"decision\": \"PERMIT\", \"details\": \"Decision Permit. OK!\"}") - .build(); - } else { - return Response.status(200).entity("{\"decision\": \"DENY\", \"details\": \"Decision Denied. NOK :-(\"}") - .build(); - } - } - - /** - * Service get event. - * - * @return the response - */ - @Path("/event/GetEvent") - @GET - public Response serviceGetEvent() { - final Random rand = new Random(); - final int nextMatchCase = rand.nextInt(4); - final String nextEventName = "Event0" + rand.nextInt(2) + "00"; - - final String eventString = "{\n" + "\"nameSpace\": \"org.onap.policy.apex.sample.events\",\n" + "\"name\": \"" - + nextEventName + "\",\n" + "\"version\": \"0.0.1\",\n" + "\"source\": \"REST_" + getMessagesReceived - + "\",\n" + "\"target\": \"apex\",\n" + "\"TestSlogan\": \"Test slogan for External Event0\",\n" - + "\"TestMatchCase\": " + nextMatchCase + ",\n" + "\"TestTimestamp\": " + System.currentTimeMillis() - + ",\n" + "\"TestTemperature\": 9080.866\n" + "}"; - - getMessagesReceived++; - - return Response.status(200).entity(eventString).build(); - } - - /** - * Service get empty event. - * - * @return the response - */ - @Path("/event/GetEmptyEvent") - @GET - public Response serviceGetEmptyEvent() { - return Response.status(200).build(); - } - - /** - * Service get event bad response. - * - * @return the response - */ - @Path("/event/GetEventBadResponse") - @GET - public Response serviceGetEventBadResponse() { - return Response.status(400).build(); - } - - /** - * Service post request. - * - * @param jsonString the json string - * @return the response - */ - @Path("/event/PostEvent") - @POST - public Response servicePostRequest(final String jsonString) { - postMessagesReceived++; - - @SuppressWarnings("unchecked") - final Map jsonMap = new Gson().fromJson(jsonString, Map.class); - assertTrue(jsonMap.containsKey("name")); - assertEquals("0.0.1", jsonMap.get("version")); - assertEquals("org.onap.policy.apex.sample.events", jsonMap.get("nameSpace")); - assertEquals("Act", jsonMap.get("source")); - assertEquals("Outside", jsonMap.get("target")); - - return Response.status(200).entity("{\"GET\": , " + getMessagesReceived + ",\"STAT\": " + statMessagesReceived - + ",\"POST\": , " + postMessagesReceived + ",\"PUT\": " + putMessagesReceived + "}").build(); - } - - /** - * Service post request bad response. - * - * @param jsonString the json string - * @return the response - */ - @Path("/event/PostEventBadResponse") - @POST - public Response servicePostRequestBadResponse(final String jsonString) { - return Response.status(400).build(); - } - - /** - * Service put request. - * - * @param jsonString the json string - * @return the response - */ - @Path("/event/PutEvent") - @PUT - public Response servicePutRequest(final String jsonString) { - putMessagesReceived++; - - @SuppressWarnings("unchecked") - final Map jsonMap = new Gson().fromJson(jsonString, Map.class); - assertTrue(jsonMap.containsKey("name")); - assertEquals("0.0.1", jsonMap.get("version")); - assertEquals("org.onap.policy.apex.sample.events", jsonMap.get("nameSpace")); - assertEquals("Act", jsonMap.get("source")); - assertEquals("Outside", jsonMap.get("target")); - - return Response.status(200).entity("{\"GET\": , " + getMessagesReceived + ",\"STAT\": " + statMessagesReceived - + ",\"POST\": , " + postMessagesReceived + ",\"PUT\": " + putMessagesReceived + "}").build(); - } -} diff --git a/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AppcResponseCreator.java b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AppcResponseCreator.java new file mode 100644 index 000000000..f5f2b2792 --- /dev/null +++ b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/AppcResponseCreator.java @@ -0,0 +1,94 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 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========================================================= + */ + +package org.onap.policy.apex.domains.onap.vcpe; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.BlockingQueue; + +import org.onap.policy.appclcm.LcmRequest; +import org.onap.policy.appclcm.LcmRequestWrapper; +import org.onap.policy.appclcm.LcmResponse; +import org.onap.policy.appclcm.LcmResponseWrapper; +import org.onap.policy.appclcm.util.Serialization; + +/** + * Respond to an APPC request with a given delay. + */ +public class AppcResponseCreator { + // The request from APPC + private final String jsonRequestString; + + // The queue for APPC responses + private final BlockingQueue appcResponseQueue; + + // The timer task for response generation + private final Timer appcTimer; + + /** + * Respond to the given APPC request after the given amount of milliseconds. + * + * @param appcResponseQueue the queue into which to put the APPC response + * @param jsonRequestString the request JSON string + * @param milliSecondsToWait the number of milliseconds to wait + */ + public AppcResponseCreator(BlockingQueue appcResponseQueue, String jsonRequestString, + long milliSecondsToWait) { + this.jsonRequestString = jsonRequestString; + this.appcResponseQueue = appcResponseQueue; + + appcTimer = new Timer(); + appcTimer.schedule(new AppcTimerTask(), milliSecondsToWait); + } + + private class AppcTimerTask extends TimerTask { + /* + * (non-Javadoc) + * + * @see java.util.TimerTask#run() + */ + @Override + public void run() { + Gson gson = new GsonBuilder().registerTypeAdapter(LcmRequest.class, new Serialization.RequestAdapter()) + .registerTypeAdapter(LcmResponse.class, new Serialization.ResponseAdapter()) + .setPrettyPrinting().create(); + + LcmRequestWrapper requestWrapper = gson.fromJson(jsonRequestString, LcmRequestWrapper.class); + + LcmResponse response = new LcmResponse(requestWrapper.getBody()); + response.getStatus().setCode(400); + response.getStatus().setMessage("Restart Successful"); + + LcmResponseWrapper responseWrapper = new LcmResponseWrapper(); + responseWrapper.setBody(response); + + responseWrapper.setVersion(requestWrapper.getVersion()); + responseWrapper.setRpcName(requestWrapper.getRpcName()); + responseWrapper.setCorrelationId(requestWrapper.getCorrelationId()); + responseWrapper.setType(requestWrapper.getType()); + + appcResponseQueue.add(gson.toJson(responseWrapper, LcmResponseWrapper.class)); + } + } +} diff --git a/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVCpeSim.java b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVCpeSim.java new file mode 100644 index 000000000..671f333d9 --- /dev/null +++ b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVCpeSim.java @@ -0,0 +1,75 @@ +/*- + * ============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========================================================= + */ + +package org.onap.policy.apex.domains.onap.vcpe; + +import java.net.URI; + +import org.glassfish.grizzly.http.server.HttpServer; +import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; +import org.glassfish.jersey.server.ResourceConfig; +import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; + +/** + * The Class AaiAndGuardSim. + */ +public class OnapVCpeSim { + private static final int MAX_LOOPS = 100000; + private HttpServer server; + + /** + * Instantiates a new aai and guard sim. + */ + public OnapVCpeSim(final String[] args) { + final String baseUri = "http://" + args[0] + ':' + args[1] + "/OnapVCpeSim"; + + final ResourceConfig rc = new ResourceConfig(OnapVCpeSimEndpoint.class); + server = GrizzlyHttpServerFactory.createHttpServer(URI.create(baseUri), rc); + + while (!server.isStarted()) { + ThreadUtilities.sleep(50); + } + } + + /** + * Tear down. + * + * @throws Exception the exception + */ + public void tearDown() throws Exception { + server.shutdown(); + } + + /** + * The main method. + * + * @param args the arguments + * @throws Exception the exception + */ + public static void main(final String[] args) throws Exception { + final OnapVCpeSim sim = new OnapVCpeSim(args); + + for (int index = 0; index < MAX_LOOPS; index++) { + ThreadUtilities.sleep(100); + } + + sim.tearDown(); + } +} diff --git a/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVCpeSimEndpoint.java b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVCpeSimEndpoint.java new file mode 100644 index 000000000..936c319a9 --- /dev/null +++ b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVCpeSimEndpoint.java @@ -0,0 +1,343 @@ +/*- + * ============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========================================================= + */ + +package org.onap.policy.apex.domains.onap.vcpe; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.util.Map; +import java.util.Random; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; + +import org.onap.policy.aai.AaiNqGenericVnf; +import org.onap.policy.aai.AaiNqInventoryResponseItem; +import org.onap.policy.aai.AaiNqRequest; +import org.onap.policy.aai.AaiNqResponse; +import org.onap.policy.aai.AaiNqVfModule; +import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; +import org.slf4j.ext.XLogger; +import org.slf4j.ext.XLoggerFactory; + +/** + * The Class AaiAndGuardSimEndpoint. + */ +@Path("/sim") +public class OnapVCpeSimEndpoint { + private static final XLogger LOGGER = XLoggerFactory.getXLogger(OnapVCpeSimEndpoint.class); + + private static BlockingQueue appcResponseQueue = new LinkedBlockingQueue<>(); + + private static AtomicInteger guardMessagesReceived = new AtomicInteger(); + private static AtomicInteger postMessagesReceived = new AtomicInteger(); + private static AtomicInteger putMessagesReceived = new AtomicInteger(); + private static AtomicInteger statMessagesReceived = new AtomicInteger(); + private static AtomicInteger getMessagesReceived = new AtomicInteger(); + + /** + * Service get stats. + * + * @return the response + */ + @Path("/pdp/api/Stats") + @GET + public Response serviceGetStats() { + statMessagesReceived.incrementAndGet(); + + return Response.status(200).entity("{\"GET\": " + getMessagesReceived + ",\"STAT\": " + statMessagesReceived + + ",\"POST\": " + postMessagesReceived + ",\"PUT\": " + putMessagesReceived + "}").build(); + } + + /** + * Service guard post request. + * + * @param jsonString the json string + * @return the response + */ + @Path("/pdp/api/getDecision") + @POST + public Response serviceGuardPostRequest(final String jsonString) { + LOGGER.info("\n*** GUARD REQUEST START ***\n" + jsonString + "\n *** GUARD REQUEST END ***"); + + String target = jsonString.substring(jsonString.indexOf("b4fe00ac")); + target = target.substring(0, target.indexOf('"')); + + int thisGuardMessageNumber = guardMessagesReceived.incrementAndGet(); + postMessagesReceived.incrementAndGet(); + + String responseJsonString = null; + if (thisGuardMessageNumber % 2 == 0) { + responseJsonString = "{\"decision\": \"PERMIT\", \"details\": \"Decision Permit. OK!\"}"; + } else { + responseJsonString = "{\"decision\": \"DENY\", \"details\": \"Decision Denied. NOK :-(\"}"; + } + + LOGGER.info("\n*** GUARD RESPONSE START ***\n" + target + "\n" + responseJsonString + + "\n*** GUARD RESPONSE END ***"); + + return Response.status(200).entity(responseJsonString).build(); + } + + /** + * AAI named query request. + * + * @param jsonString the json string + * @return the response + */ + @Path("aai/search/named-query") + @POST + public Response aaiNamedQueryRequest(final String jsonString) { + postMessagesReceived.incrementAndGet(); + + LOGGER.info("\n*** AAI REQUEST START ***\n" + jsonString + "\n *** AAI REQUEST END ***"); + + AaiNqRequest request = new Gson().fromJson(jsonString, AaiNqRequest.class); + String vnfId = request.getInstanceFilters().getInstanceFilter().iterator().next().get("generic-vnf") + .get("vnf-id"); + String vnfSuffix = vnfId.substring(vnfId.length() - 4); + + AaiNqInventoryResponseItem responseItem = new AaiNqInventoryResponseItem(); + responseItem.setModelName("vCPE"); + + AaiNqGenericVnf genericVnf = new AaiNqGenericVnf(); + genericVnf.setResourceVersion("1"); + genericVnf.setVnfName("vCPEInfraVNF" + vnfSuffix); + genericVnf.setProvStatus("PREPROV"); + genericVnf.setIsClosedLoopDisabled(false); + genericVnf.setVnfType("vCPEInfraService10/vCPEInfraService10 0"); + genericVnf.setInMaint(false); + genericVnf.setServiceId("5585fd2c-ad0d-4050-b0cf-dfe4a03bd01f"); + genericVnf.setVnfId(vnfId); + + responseItem.setGenericVnf(genericVnf); + + AaiNqVfModule vfModule = new AaiNqVfModule(); + vfModule.setOrchestrationStatus("Created"); + + responseItem.setVfModule(vfModule); + + AaiNqResponse response = new AaiNqResponse(); + response.getInventoryResponseItems().add(responseItem); + + String responseJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(response); + + LOGGER.info("\n*** AAI RESPONSE START ***\n" + responseJsonString + "\n *** AAI RESPONSE END ***"); + + return Response.status(200).entity(responseJsonString).build(); + } + + /** + * DCAE input of events (simulation of DMaaP). + * + * @param timeout the timeout to wait for + * @return the response + */ + @Path("events/unauthenticated.DCAE_CL_OUTPUT/APEX/1") + @GET + public Response dcaeClOutput(@QueryParam("timeout") final int timeout) { + getMessagesReceived.incrementAndGet(); + + ThreadUtilities.sleep(timeout - 500); + + return Response.status(200).build(); + } + + /** + * APPC response events (simulation of DMaaP). + * + * @param timeout the timeout to wait for + * @return the response + * @throws InterruptedException on queue interrupts + */ + @Path("events/APPC_LCM_WRITE/APEX/1") + @GET + public Response appcResponseOutput(@QueryParam("timeout") final int timeout) throws InterruptedException { + getMessagesReceived.incrementAndGet(); + + int timeLeft = timeout - 500; + + do { + String appcResponse = appcResponseQueue.poll(100, TimeUnit.MILLISECONDS); + + if (appcResponse != null) { + LOGGER.info("\n*** APPC RESPONSE START ***"); + System.err.println(appcResponse); + LOGGER.info("\n*** APPC RESPONSE END ***"); + + return Response.status(200).entity(appcResponse).build(); + } + timeLeft -= 100; + } + while (timeLeft > 0); + + return Response.status(200).build(); + } + + /** + * Post to Policy management log (Simulation of DMaaP). + * + * @param jsonString the json string + * @return the response + */ + @Path("/events/POLICY_CL_MGT") + @POST + public Response policyLogRequest(final String jsonString) { + postMessagesReceived.incrementAndGet(); + + LOGGER.info("\n*** POLICY LOG ENTRY START ***\n" + jsonString + "\n *** POLICY LOG ENTRY END ***"); + + return Response.status(200).build(); + } + + /** + * Post to APPC LCM (Simulation of DMaaP). + * + * @param jsonString the json string + * @return the response + */ + @Path("/events/APPC-LCM-READ") + @POST + public Response appcRequest(final String jsonString) { + postMessagesReceived.incrementAndGet(); + + LOGGER.info("\n*** APPC REQUEST START ***\n" + jsonString + "\n *** APPC REQUEST END ***"); + + new AppcResponseCreator(appcResponseQueue, jsonString, 10000); + + return Response.status(200).build(); + } + + /** + * Service get event. + * + * @return the response + */ + @Path("/event/GetEvent") + @GET + public Response serviceGetEvent() { + final Random rand = new Random(); + final int nextMatchCase = rand.nextInt(4); + final String nextEventName = "Event0" + rand.nextInt(2) + "00"; + + final String eventString = "{\n" + "\"nameSpace\": \"org.onap.policy.apex.sample.events\",\n" + "\"name\": \"" + + nextEventName + "\",\n" + "\"version\": \"0.0.1\",\n" + "\"source\": \"REST_" + + getMessagesReceived + "\",\n" + "\"target\": \"apex\",\n" + + "\"TestSlogan\": \"Test slogan for External Event0\",\n" + "\"TestMatchCase\": " + + nextMatchCase + ",\n" + "\"TestTimestamp\": " + System.currentTimeMillis() + ",\n" + + "\"TestTemperature\": 9080.866\n" + "}"; + + getMessagesReceived.incrementAndGet(); + + return Response.status(200).entity(eventString).build(); + } + + /** + * Service get empty event. + * + * @return the response + */ + @Path("/event/GetEmptyEvent") + @GET + public Response serviceGetEmptyEvent() { + return Response.status(200).build(); + } + + /** + * Service get event bad response. + * + * @return the response + */ + @Path("/event/GetEventBadResponse") + @GET + public Response serviceGetEventBadResponse() { + return Response.status(400).build(); + } + + /** + * Service post request. + * + * @param jsonString the json string + * @return the response + */ + @Path("/event/PostEvent") + @POST + public Response servicePostRequest(final String jsonString) { + postMessagesReceived.incrementAndGet(); + + @SuppressWarnings("unchecked") + final Map jsonMap = new Gson().fromJson(jsonString, Map.class); + assertTrue(jsonMap.containsKey("name")); + assertEquals("0.0.1", jsonMap.get("version")); + assertEquals("org.onap.policy.apex.sample.events", jsonMap.get("nameSpace")); + assertEquals("Act", jsonMap.get("source")); + assertEquals("Outside", jsonMap.get("target")); + + return Response.status(200).entity("{\"GET\": , " + getMessagesReceived + ",\"STAT\": " + statMessagesReceived + + ",\"POST\": , " + postMessagesReceived + ",\"PUT\": " + putMessagesReceived + "}").build(); + } + + /** + * Service post request bad response. + * + * @param jsonString the json string + * @return the response + */ + @Path("/event/PostEventBadResponse") + @POST + public Response servicePostRequestBadResponse(final String jsonString) { + return Response.status(400).build(); + } + + /** + * Service put request. + * + * @param jsonString the json string + * @return the response + */ + @Path("/event/PutEvent") + @PUT + public Response servicePutRequest(final String jsonString) { + putMessagesReceived.incrementAndGet(); + + @SuppressWarnings("unchecked") + final Map jsonMap = new Gson().fromJson(jsonString, Map.class); + assertTrue(jsonMap.containsKey("name")); + assertEquals("0.0.1", jsonMap.get("version")); + assertEquals("org.onap.policy.apex.sample.events", jsonMap.get("nameSpace")); + assertEquals("Act", jsonMap.get("source")); + assertEquals("Outside", jsonMap.get("target")); + + return Response.status(200).entity("{\"GET\": , " + getMessagesReceived + ",\"STAT\": " + statMessagesReceived + + ",\"POST\": , " + postMessagesReceived + ",\"PUT\": " + putMessagesReceived + "}").build(); + } +} diff --git a/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVcpeRunner.java b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVcpeRunner.java new file mode 100644 index 000000000..4f6b6101c --- /dev/null +++ b/examples/examples-onap-vcpe/src/test/java/org/onap/policy/apex/domains/onap/vcpe/OnapVcpeRunner.java @@ -0,0 +1,68 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 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========================================================= + */ + +package org.onap.policy.apex.domains.onap.vcpe; + +import org.onap.policy.apex.auth.clieditor.ApexCommandLineEditorMain; +import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities; +import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.apex.service.engine.main.ApexMain; + +/** + * Test the ONAP vCPE use case. + */ +public class OnapVcpeRunner { + + private OnapVcpeRunner() throws ApexException { + + // @formatter:off + final String[] cliArgs = new String[] { + "-c", + "src/main/resources/policy/ONAPvCPEPolicyModel.apex", + "-l", + "target/ONAPvCPEPolicyModel.log", + "-o", + "target/classes/ONAPvCPEPolicyModel.json" + }; + // @formatter:on + + new ApexCommandLineEditorMain(cliArgs); + + // @formatter:off + final String[] apexArgs = { + "-rfr", + "target/classes", + "-c", + "src/main/resources/examples/config/ONAPvCPE/ApexConfig_Sim.json", + "-m", + "target/classes/ONAPvCPEPolicyModel.json" + }; + // @formatter:on + + final ApexMain apexMain = new ApexMain(apexArgs); + + ThreadUtilities.sleep(1000000); + apexMain.shutdown(); + } + + public static void main(String[] args) throws ApexException { + new OnapVcpeRunner(); + } +} -- cgit 1.2.3-korg