2fa4ed53200533ccb30a0984afcbb1d0124ed392
[policy/drools-applications.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.drools.server.restful;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28
29 import java.util.Collections;
30 import java.util.List;
31 import javax.ws.rs.client.Entity;
32 import javax.ws.rs.core.Response;
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;
52
53 public class RestTransactionTrackerTest {
54
55     private static PolicyController testController;
56     private static HttpClient client;
57
58     @BeforeClass
59     public static void testBeforeClass() throws Exception {
60         SystemPersistenceConstants.getManager().setConfigurationDir("target/test-classes");
61
62         HttpServletServerFactoryInstance.getServerFactory().destroy();
63         HttpClientFactoryInstance.getClientFactory().destroy();
64
65         HttpClientFactoryInstance.getClientFactory().build(
66                 BusTopicParams.builder()
67                         .clientName("trans")
68                         .hostname("localhost")
69                         .port(8769)
70                         .basePath("policy/pdp/engine/controllers/transactions")
71                         .managed(true)
72                         .build());
73
74         HttpServletServer server =
75                 HttpServletServerFactoryInstance
76                         .getServerFactory()
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));
81
82         testController = PolicyEngineConstants.getManager().createPolicyController("metrics",
83                 SystemPersistenceConstants.getManager().getControllerProperties("metrics"));
84
85         client = HttpClientFactoryInstance.getClientFactory().get("trans");
86     }
87
88     @AfterClass
89     public static void testAfterClass() {
90         HttpClientFactoryInstance.getClientFactory().destroy();
91         HttpServletServerFactoryInstance.getServerFactory().destroy();
92
93         SystemPersistenceConstants.getManager().setConfigurationDir(null);
94     }
95
96     @Test
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);
100
101         put("cacheSize/10", "", Response.Status.OK.getStatusCode());
102         put("timeout/20", "", Response.Status.OK.getStatusCode());
103
104         equals(get("cacheSize", Response.Status.OK.getStatusCode()), Integer.class, 10);
105         equals(get("timeout", Response.Status.OK.getStatusCode()), Integer.class, 20);
106
107         put("cacheSize/3", "", Response.Status.OK.getStatusCode());
108         put("timeout/2", "", Response.Status.OK.getStatusCode());
109
110         equals(get("cacheSize", Response.Status.OK.getStatusCode()), Integer.class, 3);
111         equals(get("timeout", Response.Status.OK.getStatusCode()), Integer.class, 2);
112     }
113
114     @Test
115     public void testTransactions() {
116         equals(get("/", Response.Status.OK.getStatusCode()), List.class, Collections.emptyList());
117
118         ControlLoopMetricsFeature feature = new ControlLoopMetricsFeature();
119
120         assertTrue(HttpClient.getBody(get("/", Response.Status.OK.getStatusCode()), List.class).isEmpty());
121         get("/664be3d2-6c12-4f4b-a3e7-c349acced200", Response.Status.NOT_FOUND.getStatusCode());
122
123         String activeNotification = ResourceUtils.getResourceAsString("policy-cl-mgt-active.json");
124         VirtualControlLoopNotification active =
125                 Serialization.gsonPretty.fromJson(activeNotification, VirtualControlLoopNotification.class);
126         feature.beforeDeliver(testController, Topic.CommInfrastructure.DMAAP, "POLICY-CL-MGT", active);
127         assertEquals(1, ControlLoopMetricsManager.getManager().getTransactionIds().size());
128
129         assertFalse(HttpClient.getBody(get("/", Response.Status.OK.getStatusCode()), List.class).isEmpty());
130         notNull(get("/664be3d2-6c12-4f4b-a3e7-c349acced200", Response.Status.OK.getStatusCode()), String.class);
131     }
132
133     private Response get(String contextPath, int statusCode) {
134         Response response = client.get(contextPath);
135         return checkResponse(statusCode, response);
136     }
137
138     private Response put(String contextPath, String body, int statusCode) {
139         Response response = client.put(contextPath, Entity.json(body), Collections.emptyMap());
140         return checkResponse(statusCode, response);
141     }
142
143     private <T, Y> void equals(Response response, Class<T> clazz, Y expected) {
144         assertEquals(expected, HttpClient.getBody(response, clazz));
145     }
146
147     private <T> void notNull(Response response, Class<T> clazz) {
148         assertNotNull(HttpClient.getBody(response, clazz));
149     }
150
151     private <T> void empty(Response response, Class<T> clazz) {
152         assertNull(HttpClient.getBody(response, clazz));
153     }
154
155     @NotNull
156     private Response checkResponse(int statusCode, Response response) {
157         assertEquals(statusCode, response.getStatus());
158         return response;
159     }
160 }