2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2023 Nordix Foundation.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.drools.server.restful;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
29 import jakarta.ws.rs.client.Entity;
30 import jakarta.ws.rs.core.Response;
31 import java.util.Collections;
32 import java.util.List;
33 import org.jetbrains.annotations.NotNull;
34 import org.junit.AfterClass;
35 import org.junit.BeforeClass;
36 import org.junit.Test;
37 import org.onap.policy.common.endpoints.event.comm.Topic;
38 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
39 import org.onap.policy.common.endpoints.http.client.HttpClient;
40 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
41 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
42 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
43 import org.onap.policy.common.utils.network.NetworkUtil;
44 import org.onap.policy.common.utils.resources.ResourceUtils;
45 import org.onap.policy.controlloop.VirtualControlLoopNotification;
46 import org.onap.policy.controlloop.util.Serialization;
47 import org.onap.policy.drools.apps.controlloop.feature.trans.ControlLoopMetricsFeature;
48 import org.onap.policy.drools.apps.controlloop.feature.trans.ControlLoopMetricsManager;
49 import org.onap.policy.drools.persistence.SystemPersistenceConstants;
50 import org.onap.policy.drools.system.PolicyController;
51 import org.onap.policy.drools.system.PolicyEngineConstants;
53 public class RestTransactionTrackerTest {
55 private static PolicyController testController;
56 private static HttpClient client;
59 public static void testBeforeClass() throws Exception {
60 SystemPersistenceConstants.getManager().setConfigurationDir("target/test-classes");
62 HttpServletServerFactoryInstance.getServerFactory().destroy();
63 HttpClientFactoryInstance.getClientFactory().destroy();
65 HttpClientFactoryInstance.getClientFactory().build(
66 BusTopicParams.builder()
68 .hostname("localhost")
70 .basePath("policy/pdp/engine/controllers/transactions")
74 HttpServletServer server =
75 HttpServletServerFactoryInstance
77 .build("trans", "localhost", 8769, "/", true, true);
78 server.addServletClass("/*", RestTransactionTracker.class.getName());
79 server.waitedStart(5000L);
80 assertTrue(NetworkUtil.isTcpPortOpen("localhost", 8769, 5, 10000L));
82 testController = PolicyEngineConstants.getManager().createPolicyController("metrics",
83 SystemPersistenceConstants.getManager().getControllerProperties("metrics"));
85 client = HttpClientFactoryInstance.getClientFactory().get("trans");
89 public static void testAfterClass() {
90 HttpClientFactoryInstance.getClientFactory().destroy();
91 HttpServletServerFactoryInstance.getServerFactory().destroy();
93 SystemPersistenceConstants.getManager().setConfigurationDir(null);
97 public void testConfiguration() {
98 equals(get("cacheSize", Response.Status.OK.getStatusCode()), Integer.class, 3);
99 equals(get("timeout", Response.Status.OK.getStatusCode()), Integer.class, 2);
101 put("cacheSize/10", "", Response.Status.OK.getStatusCode());
102 put("timeout/20", "", Response.Status.OK.getStatusCode());
104 equals(get("cacheSize", Response.Status.OK.getStatusCode()), Integer.class, 10);
105 equals(get("timeout", Response.Status.OK.getStatusCode()), Integer.class, 20);
107 put("cacheSize/3", "", Response.Status.OK.getStatusCode());
108 put("timeout/2", "", Response.Status.OK.getStatusCode());
110 equals(get("cacheSize", Response.Status.OK.getStatusCode()), Integer.class, 3);
111 equals(get("timeout", Response.Status.OK.getStatusCode()), Integer.class, 2);
115 public void testTransactions() {
116 equals(get("/inprogress", Response.Status.OK.getStatusCode()), List.class, Collections.emptyList());
118 ControlLoopMetricsFeature feature = new ControlLoopMetricsFeature();
120 assertTrue(HttpClient.getBody(get("/inprogress", Response.Status.OK.getStatusCode()),
121 List.class).isEmpty());
122 get("/inprogress/664be3d2-6c12-4f4b-a3e7-c349acced200", Response.Status.NOT_FOUND.getStatusCode());
124 String activeNotification = ResourceUtils.getResourceAsString("policy-cl-mgt-active.json");
125 VirtualControlLoopNotification active =
126 Serialization.gsonPretty.fromJson(activeNotification, VirtualControlLoopNotification.class);
127 feature.beforeDeliver(testController, Topic.CommInfrastructure.DMAAP, "POLICY-CL-MGT", active);
128 assertEquals(1, ControlLoopMetricsManager.getManager().getTransactionIds().size());
130 assertFalse(HttpClient.getBody(get("/inprogress", Response.Status.OK.getStatusCode()),
131 List.class).isEmpty());
132 notNull(get("/inprogress/664be3d2-6c12-4f4b-a3e7-c349acced200", Response.Status.OK.getStatusCode()),
136 private Response get(String contextPath, int statusCode) {
137 Response response = client.get(contextPath);
138 return checkResponse(statusCode, response);
141 private Response put(String contextPath, String body, int statusCode) {
142 Response response = client.put(contextPath, Entity.json(body), Collections.emptyMap());
143 return checkResponse(statusCode, response);
146 private <T, Y> void equals(Response response, Class<T> clazz, Y expected) {
147 assertEquals(expected, HttpClient.getBody(response, clazz));
150 private <T> void notNull(Response response, Class<T> clazz) {
151 assertNotNull(HttpClient.getBody(response, clazz));
155 private Response checkResponse(int statusCode, Response response) {
156 assertEquals(statusCode, response.getStatus());