Generate InvocationID UUID on outgoing requests and use X-InvocationID
[logging-analytics.git] / reference / logging-slf4j / src / test / java / org / onap / logging / ref / slf4j / ONAPLogAdapterTest.java
index ad22603..e28c22f 100644 (file)
@@ -25,6 +25,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
+import javax.xml.bind.DatatypeConverter;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
@@ -33,6 +35,41 @@ import org.springframework.mock.web.MockHttpServletRequest;
 import org.testng.Assert;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.Test;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsNot.not;
+import static org.hamcrest.core.IsSame.sameInstance;
+import static org.hamcrest.core.StringContains.containsString;
+import static org.hamcrest.core.StringEndsWith.endsWith;
+import static org.hamcrest.core.Every.everyItem;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+import static org.hamcrest.core.IsNull.notNullValue;
+import static org.hamcrest.core.IsNull.nullValue;
+import static org.hamcrest.core.StringStartsWith.startsWith;
+import static org.hamcrest.beans.HasProperty.hasProperty;
+import static org.hamcrest.number.IsCloseTo.closeTo;
+import static org.hamcrest.number.OrderingComparison.greaterThan;
+import static org.hamcrest.number.OrderingComparison.greaterThanOrEqualTo;
+import static org.hamcrest.number.OrderingComparison.lessThan;
+import static org.hamcrest.number.OrderingComparison.lessThanOrEqualTo;
+import static org.hamcrest.collection.IsArray.array;
+import static org.hamcrest.collection.IsArrayContaining.hasItemInArray;
+import static org.hamcrest.collection.IsArrayContainingInAnyOrder.arrayContainingInAnyOrder;
+import static org.hamcrest.collection.IsIn.isIn;
+import static org.hamcrest.collection.IsIn.isOneOf;
+import static org.hamcrest.collection.IsMapContaining.hasKey;
+import static org.hamcrest.collection.IsMapContaining.hasEntry;
+import static org.hamcrest.collection.IsMapContaining.hasValue;
+import static org.hamcrest.text.IsEqualIgnoringWhiteSpace.equalToIgnoringWhiteSpace;
+import static org.hamcrest.text.IsEqualIgnoringCase.equalToIgnoringCase;
+import static org.hamcrest.text.IsEmptyString.isEmptyOrNullString;
+import static org.hamcrest.text.IsEmptyString.isEmptyString;
+import static org.hamcrest.text.StringContainsInOrder.stringContainsInOrder;
+import static org.hamcrest.xml.HasXPath.hasXPath;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
@@ -103,7 +140,7 @@ public class ONAPLogAdapterTest {
         http.setServerName("local123");
         http.setRemoteAddr("remote123");
         http.addHeader("X-ONAP-RequestID", "request123");
-        http.addHeader("X-ONAP-InvocationID", "invocation123");
+        http.addHeader("X-InvocationID", "invocation123");
         http.addHeader("X-ONAP-PartnerName", "partner123");
 
         try {
@@ -116,6 +153,55 @@ public class ONAPLogAdapterTest {
             assertThat(mdcs.get("ServiceName"), is("uri123"));
             assertThat(mdcs.get("ServerFQDN"), is("local123"));
             assertThat(mdcs.get("ClientIPAddress"), is("remote123"));
+
+            // Timestamp format and value:
+
+            final String invokeTimestampString = mdcs.get("InvokeTimestamp");
+            assertThat(invokeTimestampString, notNullValue());
+            assertThat(invokeTimestampString, endsWith("Z"));
+            final long invokeTimestamp = DatatypeConverter.parseDateTime(invokeTimestampString).getTimeInMillis();
+            assertThat(Math.abs(System.currentTimeMillis() - invokeTimestamp), lessThan(5000L));
+        }
+        finally {
+            MDC.clear();
+        }
+    }
+    
+    /**
+     * Test ENTERING with an EMPTY_STRING serviceName.
+     */
+    @Test
+    public void testEnteringWithEMPTY_STRING_serviceName() {
+
+        final Logger logger = LoggerFactory.getLogger(this.getClass());
+        final ONAPLogAdapter adapter = new ONAPLogAdapter(logger);
+        final MockHttpServletRequest http = new MockHttpServletRequest();
+        http.setRequestURI("uri123");
+        http.setServerName("local123");
+        http.setRemoteAddr("remote123");
+        http.addHeader("X-ONAP-RequestID", "request123");
+        http.addHeader("X-InvocationID", "invocation123");
+        http.addHeader("X-ONAP-PartnerName", "partner123");
+
+        try {
+            // an empty string should kick in setting the actual service name (treated same as null)
+            adapter.getServiceDescriptor().setServiceName("");
+            adapter.entering(http);
+            final Map<String, String> mdcs = MDC.getCopyOfContextMap();
+            assertThat(mdcs.get("RequestID"), is("request123"));
+            assertThat(mdcs.get("InvocationID"), is("invocation123"));
+            assertThat(mdcs.get("PartnerName"), is("partner123"));
+            assertThat(mdcs.get("ServiceName"), is("uri123"));
+            assertThat(mdcs.get("ServerFQDN"), is("local123"));
+            assertThat(mdcs.get("ClientIPAddress"), is("remote123"));
+
+            // Timestamp format and value:
+
+            final String invokeTimestampString = mdcs.get("InvokeTimestamp");
+            assertThat(invokeTimestampString, notNullValue());
+            assertThat(invokeTimestampString, endsWith("Z"));
+            final long invokeTimestamp = DatatypeConverter.parseDateTime(invokeTimestampString).getTimeInMillis();
+            assertThat(Math.abs(System.currentTimeMillis() - invokeTimestamp), lessThan(5000L));
         }
         finally {
             MDC.clear();
@@ -296,7 +382,7 @@ public class ONAPLogAdapterTest {
         adapter.setResponseCode("code0");
         adapter.setResponseDescription("desc0");
         adapter.setResponseSeverity(Level.INFO);
-        adapter.setResponseStatus(ONAPLogConstants.ResponseStatus.COMPLETED);
+        adapter.setResponseStatus(ONAPLogConstants.ResponseStatus.COMPLETE);
 
         assertThat(MDC.get(ONAPLogConstants.MDCs.RESPONSE_CODE), nullValue());
         assertThat(MDC.get(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION), nullValue());
@@ -308,7 +394,7 @@ public class ONAPLogAdapterTest {
         assertThat(MDC.get(ONAPLogConstants.MDCs.RESPONSE_CODE), is("code0"));
         assertThat(MDC.get(ONAPLogConstants.MDCs.RESPONSE_DESCRIPTION), is("desc0"));
         assertThat(MDC.get(ONAPLogConstants.MDCs.RESPONSE_SEVERITY), is("INFO"));
-        assertThat(MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE), is("COMPLETED"));
+        assertThat(MDC.get(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE), is("COMPLETE"));
     }
 
     /**
@@ -346,7 +432,7 @@ public class ONAPLogAdapterTest {
             adapter.getResponseDescriptor()
                     .setResponseCode((String)null)
                     .setResponseSeverity(Level.INFO)
-                    .setResponseStatus(ONAPLogConstants.ResponseStatus.COMPLETED);
+                    .setResponseStatus(ONAPLogConstants.ResponseStatus.COMPLETE);
         }
         finally {