2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2024 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.
21 package org.onap.policy.drools.utils.logging;
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertNotEquals;
25 import static org.junit.jupiter.api.Assertions.assertNotNull;
26 import static org.junit.jupiter.api.Assertions.assertNull;
28 import java.time.Duration;
29 import java.time.Instant;
30 import org.junit.jupiter.api.Test;
33 class MdcTransactionTest {
36 void testResetSubTransaction() {
37 MdcTransaction trans =
38 MdcTransaction.newTransaction(null, null).resetSubTransaction();
40 assertNotNull(trans.getRequestId());
41 assertNotNull(trans.getPartner());
42 assertNotNull(trans.getServiceName());
43 assertNotNull(trans.getServer());
44 assertNotNull(trans.getServerIpAddress());
45 assertNotNull(trans.getServerFqdn());
46 assertNotNull(trans.getVirtualServerName());
47 assertNotNull(trans.getStartTime());
49 assertNullSubTransactionFields(trans);
52 MdcTransactionConstants.REQUEST_ID,
53 MdcTransactionConstants.PARTNER_NAME,
54 MdcTransactionConstants.VIRTUAL_SERVER_NAME,
55 MdcTransactionConstants.SERVER,
56 MdcTransactionConstants.SERVER_IP_ADDRESS,
57 MdcTransactionConstants.SERVER_FQDN,
58 MdcTransactionConstants.SERVICE_NAME
63 MdcTransactionConstants.INVOCATION_ID,
64 MdcTransactionConstants.BEGIN_TIMESTAMP,
65 MdcTransactionConstants.END_TIMESTAMP,
66 MdcTransactionConstants.ELAPSED_TIME,
67 MdcTransactionConstants.SERVICE_INSTANCE_ID,
68 MdcTransactionConstants.INSTANCE_UUID,
69 MdcTransactionConstants.PROCESS_KEY,
70 MdcTransactionConstants.STATUS_CODE,
71 MdcTransactionConstants.RESPONSE_CODE,
72 MdcTransactionConstants.RESPONSE_DESCRIPTION,
73 MdcTransactionConstants.SEVERITY,
74 MdcTransactionConstants.TARGET_ENTITY,
75 MdcTransactionConstants.TARGET_SERVICE_NAME,
76 MdcTransactionConstants.TARGET_VIRTUAL_ENTITY,
77 MdcTransactionConstants.CLIENT_IP_ADDRESS,
78 MdcTransactionConstants.REMOTE_HOST
81 assertTransactionFields(trans);
84 private void assertNotNullKeys(String... notNullKeys) {
85 for (String key: notNullKeys) {
86 assertNotNull(key, MDC.get(key));
90 private void assertNullKeys(String... nullKeys) {
91 for (String key: nullKeys) {
92 assertNull(MDC.get(key));
96 private void assertNullSubTransactionFields(MdcTransaction trans) {
97 assertNull(trans.getInvocationId());
98 assertNullSubTransactionFieldsButInvocationId(trans);
101 private void assertNullSubTransactionFieldsButInvocationId(MdcTransaction trans) {
102 assertNull(trans.getEndTime());
103 assertNull(trans.getElapsedTime());
104 assertNull(trans.getServiceInstanceId());
105 assertNull(trans.getStatusCode());
106 assertNull(trans.getResponseCode());
107 assertNull(trans.getResponseDescription());
108 assertNull(trans.getInstanceUuid());
109 assertNull(trans.getTargetEntity());
110 assertNull(trans.getTargetServiceName());
111 assertNull(trans.getProcessKey());
112 assertNull(trans.getClientIpAddress());
113 assertNull(trans.getRemoteHost());
114 assertNull(trans.getSeverity());
115 assertNull(trans.getTargetVirtualEntity());
118 protected void assertTransactionFields(MdcTransaction trans) {
119 assertEquals(trans.getRequestId(), MDC.get(MdcTransactionConstants.REQUEST_ID));
120 assertEquals(trans.getPartner(), MDC.get(MdcTransactionConstants.PARTNER_NAME));
121 assertEquals(trans.getVirtualServerName(), MDC.get(MdcTransactionConstants.VIRTUAL_SERVER_NAME));
122 assertEquals(trans.getServer(), MDC.get(MdcTransactionConstants.SERVER));
123 assertEquals(trans.getServerIpAddress(), MDC.get(MdcTransactionConstants.SERVER_IP_ADDRESS));
124 assertEquals(trans.getServerFqdn(), MDC.get(MdcTransactionConstants.SERVER_FQDN));
125 assertEquals(trans.getServiceName(), MDC.get(MdcTransactionConstants.SERVICE_NAME));
131 MdcTransaction trans =
132 MdcTransaction.newTransaction()
134 .setInvocationId(null)
136 .setVirtualServerName(null)
138 .setServerIpAddress(null)
140 .setServiceName(null)
143 .setServiceInstanceId("service-instance-id")
144 .setInstanceUuid(null)
145 .setProcessKey("process-key")
146 .setStatusCode("status-code")
147 .setResponseCode("response-code")
148 .setResponseDescription("response-description")
149 .setSeverity("severity")
150 .setTargetEntity("target-entity")
151 .setTargetServiceName("target-service-name")
152 .setTargetVirtualEntity("target-virtual-entity")
153 .setClientIpAddress("client-ip-address")
154 .setRemoteHost("remote-host")
157 assertTransactionFields(trans);
160 MdcTransactionConstants.INVOCATION_ID,
161 MdcTransactionConstants.BEGIN_TIMESTAMP,
162 MdcTransactionConstants.END_TIMESTAMP,
163 MdcTransactionConstants.ELAPSED_TIME,
164 MdcTransactionConstants.SERVICE_INSTANCE_ID,
165 MdcTransactionConstants.INSTANCE_UUID,
166 MdcTransactionConstants.PROCESS_KEY,
167 MdcTransactionConstants.STATUS_CODE,
168 MdcTransactionConstants.RESPONSE_CODE,
169 MdcTransactionConstants.RESPONSE_DESCRIPTION,
170 MdcTransactionConstants.SEVERITY,
171 MdcTransactionConstants.TARGET_ENTITY,
172 MdcTransactionConstants.TARGET_SERVICE_NAME,
173 MdcTransactionConstants.TARGET_VIRTUAL_ENTITY,
174 MdcTransactionConstants.CLIENT_IP_ADDRESS,
175 MdcTransactionConstants.REMOTE_HOST);
177 assertEquals(trans.getInvocationId(), MDC.get(MdcTransactionConstants.INVOCATION_ID));
178 assertEquals(trans.timestamp(trans.getStartTime()), MDC.get(MdcTransactionConstants.BEGIN_TIMESTAMP));
179 assertEquals(trans.timestamp(trans.getEndTime()), MDC.get(MdcTransactionConstants.END_TIMESTAMP));
180 assertEquals(String.valueOf(Duration.between(trans.getStartTime(), trans.getEndTime()).toMillis()),
181 MDC.get(MdcTransactionConstants.ELAPSED_TIME));
182 assertEquals(trans.getInstanceUuid(), MDC.get(MdcTransactionConstants.INSTANCE_UUID));
184 assertKeyEquals("service-instance-id", trans.getServiceInstanceId(),
185 MdcTransactionConstants.SERVICE_INSTANCE_ID);
186 assertKeyEquals("process-key", trans.getProcessKey(), MdcTransactionConstants.PROCESS_KEY);
187 assertKeyEquals("status-code", trans.getStatusCode(), MdcTransactionConstants.STATUS_CODE);
188 assertKeyEquals("response-code", trans.getResponseCode(), MdcTransactionConstants.RESPONSE_CODE);
189 assertKeyEquals("response-description", trans.getResponseDescription(),
190 MdcTransactionConstants.RESPONSE_DESCRIPTION);
191 assertKeyEquals("severity", trans.getSeverity(), MdcTransactionConstants.SEVERITY);
192 assertKeyEquals("target-entity", trans.getTargetEntity(), MdcTransactionConstants.TARGET_ENTITY);
193 assertKeyEquals("target-service-name", trans.getTargetServiceName(),
194 MdcTransactionConstants.TARGET_SERVICE_NAME);
195 assertKeyEquals("target-virtual-entity", trans.getTargetVirtualEntity(),
196 MdcTransactionConstants.TARGET_VIRTUAL_ENTITY);
197 assertKeyEquals("client-ip-address", trans.getClientIpAddress(), MdcTransactionConstants.CLIENT_IP_ADDRESS);
198 assertKeyEquals("remote-host", trans.getRemoteHost(), MdcTransactionConstants.REMOTE_HOST);
201 private void assertKeyEquals(String expected, String transValue, String mdcKey) {
202 assertEquals(expected, transValue, "trans." + expected);
203 assertEquals(expected, MDC.get(mdcKey), "mdc." + expected);
208 MdcTransaction trans =
209 MdcTransaction.newTransaction(null, null).metric();
211 assertTransactionFields(trans);
215 void testTransaction() {
216 MdcTransaction trans =
217 MdcTransaction.newTransaction(null, null).transaction();
219 assertTransactionFields(trans);
223 void testSubTransaction() {
224 MdcTransaction trans =
225 MdcTransaction.newTransaction(null, "partner");
227 MdcTransaction subTrans = MdcTransaction.newSubTransaction(null);
229 assertTransactionFields(trans);
230 assertTransactionFields(subTrans);
232 assertEquals(trans.getRequestId(), trans.getRequestId());
233 assertEquals(trans.getPartner(), trans.getPartner());
234 assertEquals(trans.getVirtualServerName(), trans.getVirtualServerName());
235 assertEquals(trans.getServer(), trans.getServer());
236 assertEquals(trans.getServerIpAddress(), trans.getServerIpAddress());
237 assertEquals(trans.getServerFqdn(), trans.getServerFqdn());
238 assertEquals(trans.getServiceName(), trans.getServiceName());
240 assertNotEquals(trans.getInvocationId(), subTrans.getInvocationId());
241 assertNull(trans.getInvocationId());
242 assertNotNull(subTrans.getInvocationId());
244 assertNotNull(subTrans.getStartTime());
245 assertNullSubTransactionFieldsButInvocationId(trans);
247 subTrans.setServiceInstanceId("service-instance-id")
248 .setInstanceUuid(null)
249 .setProcessKey("process-key")
250 .setStatusCode("status-code")
251 .setResponseCode("response-code")
252 .setResponseDescription("response-description")
253 .setSeverity("severity")
254 .setTargetEntity("target-entity")
255 .setTargetServiceName("target-service-name")
256 .setTargetVirtualEntity("target-virtual-entity")
257 .setClientIpAddress("client-ip-address")
258 .setRemoteHost("remote-host")
259 .setEndTime(Instant.now());
261 subTrans.setStatusCode(false).setResponseCode("400");
263 MdcTransaction subTrans2 = MdcTransaction.fromTransaction(subTrans);
265 assertEquals(subTrans.toString(), subTrans2.toString());
268 subTrans2.setStatusCode("202").setProcessKey("junit").metric();
270 trans.resetSubTransaction().setStatusCode(true).setResponseCode("200").metric();