You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ca...@apache.org on 2016/07/12 11:06:50 UTC

svn commit: r1752273 - in /jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util: PerfLoggerIT.java PerfLoggerTest.java

Author: catholicon
Date: Tue Jul 12 11:06:50 2016
New Revision: 1752273

URL: http://svn.apache.org/viewvc?rev=1752273&view=rev
Log:
OAK-4542: Add some tests in PerfLoggerTest and a couple timing related in PerfLoggerIT without any change in code yet

Added:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerIT.java   (with props)
Modified:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java

Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerIT.java?rev=1752273&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerIT.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerIT.java Tue Jul 12 11:06:50 2016
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+package org.apache.jackrabbit.oak.util;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.slf4j.Logger;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+public class PerfLoggerIT {
+    @Mock
+    Logger logger;
+
+    private PerfLogger perfLogger;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        when(logger.isTraceEnabled()).thenReturn(false);
+        when(logger.isDebugEnabled()).thenReturn(false);
+        when(logger.isInfoEnabled()).thenReturn(false);
+
+        perfLogger = new PerfLogger(logger);
+    }
+
+    //test for logger set at DEBUG
+    @Test
+    public void logAtDebugTimeoutNotHit() {
+        setupDebugLogger();
+
+        long start = perfLogger.start();
+        perfLogger.end(start, 100, "message", "argument");
+
+        verifyTraceInteractions(1, false, false);
+        verifyDebugInteractions(2, false);
+        verifyNoMoreInteractions(logger);
+    }
+
+    @Test
+    public void logAtDebugTimeoutHit() throws InterruptedException {
+        setupDebugLogger();
+
+        long start = perfLogger.start();
+        Thread.sleep(100);
+        perfLogger.end(start, 20, "message", "argument");
+
+        verifyTraceInteractions(1, false, false);
+        verifyDebugInteractions(2, true);
+        verifyNoMoreInteractions(logger);
+    }
+    //end DEBUG tests
+
+
+    //test for logger set at INFO
+    @Test
+    public void logAtInfoDebugTimeoutHit() throws InterruptedException {
+        setupInfoLogger();
+
+        long start = perfLogger.start();
+        Thread.sleep(100);
+        perfLogger.end(start, 20, "message", "argument");
+
+        verifyDebugInteractions(1, false);
+        verifyNoMoreInteractions(logger);
+    }
+    //end INFO tests
+
+    private void setupDebugLogger() {
+        when(logger.isDebugEnabled()).thenReturn(true);
+        setupInfoLogger();
+    }
+    private void setupInfoLogger() {
+        when(logger.isInfoEnabled()).thenReturn(true);
+    }
+
+    private void verifyTraceInteractions(int enabled, boolean shouldLogStart, boolean shouldLogEnd) {
+        verify(logger, times(enabled)).isTraceEnabled();
+
+        if (shouldLogStart) {
+            verify(logger, times(1)).trace(anyString());
+        }
+        if (shouldLogEnd) {
+            verify(logger, times(1)).trace(anyString(), any(Object[].class));
+        }
+    }
+
+    private void verifyDebugInteractions(int enabled, boolean shouldLog) {
+        verify(logger, times(enabled)).isDebugEnabled();
+
+        if (shouldLog) {
+            verify(logger, times(1)).debug(anyString(), any(Object[].class));
+        }
+    }
+}

Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerIT.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java?rev=1752273&r1=1752272&r2=1752273&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/util/PerfLoggerTest.java Tue Jul 12 11:06:50 2016
@@ -16,50 +16,140 @@
  */
 package org.apache.jackrabbit.oak.util;
 
+import org.junit.Before;
 import org.junit.Test;
-import org.mockito.Mockito;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.slf4j.Logger;
 
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 public class PerfLoggerTest {
+    @Mock
+    Logger logger;
 
-    @Test
-    public void testEndDebug() {
-        Logger logger = Mockito.mock(Logger.class);
+    private PerfLogger perfLogger;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
         when(logger.isTraceEnabled()).thenReturn(false);
-        when(logger.isDebugEnabled()).thenReturn(true);
+        when(logger.isDebugEnabled()).thenReturn(false);
+        when(logger.isInfoEnabled()).thenReturn(false);
+
+        perfLogger = new PerfLogger(logger);
+    }
+
+    //test for logger set at TRACE
+    @Test
+    public void logAtTraceSimpleStart() {
+        setupTraceLogger();
 
-        PerfLogger perfLogger = new PerfLogger(logger);
         long start = perfLogger.start();
         perfLogger.end(start, -1, "message", "argument");
 
-        verify(logger, atLeastOnce()).isTraceEnabled();
-        verify(logger, atLeastOnce()).isDebugEnabled();
-        verify(logger, times(1)).debug(anyString(), any(Object[].class));
+        verifyTraceInteractions(1, false, true);
+        verifyDebugInteractions(2, false);
         verifyNoMoreInteractions(logger);
     }
 
     @Test
-    public void testEndSkipsIsDebugEnabled() {
-        Logger logger = Mockito.mock(Logger.class);
-        when(logger.isTraceEnabled()).thenReturn(false);
-        when(logger.isDebugEnabled()).thenReturn(false);
+    public void logAtTraceMessageStart() {
+        setupTraceLogger();
+
+        long start = perfLogger.start("Start message");
+        perfLogger.end(start, -1, "message", "argument");
+
+        verifyTraceInteractions(2, true, true);
+        verifyDebugInteractions(1, false);
+        verifyNoMoreInteractions(logger);
+    }
+    //end TRACE tests
+
+    //test for logger set at DEBUG
+    @Test
+    public void logAtDebugSimpleStart() {
+        setupDebugLogger();
+
+        long start = perfLogger.start();
+        perfLogger.end(start, -1, "message", "argument");
+
+        verifyTraceInteractions(1, false, false);
+        verifyDebugInteractions(2, true);
+        verifyNoMoreInteractions(logger);
+    }
+
+    @Test
+    public void logAtDebugMessageStart() {
+        setupDebugLogger();
+
+        long start = perfLogger.start("Start message");
+        perfLogger.end(start, -1, "message", "argument");
+
+        verifyTraceInteractions(2, false, false);
+        verifyDebugInteractions(1, true);
+        verifyNoMoreInteractions(logger);
+    }
+    //end DEBUG tests
+
+    //test for logger set at INFO
+    @Test
+    public void logAtInfoSimpleStart() {
+        setupInfoLogger();
 
-        PerfLogger perfLogger = new PerfLogger(logger);
         long start = perfLogger.start();
         perfLogger.end(start, -1, "message", "argument");
 
-        verify(logger, never()).isTraceEnabled();
-        verify(logger, times(1)).isDebugEnabled();
+        verifyDebugInteractions(1, false);
         verifyNoMoreInteractions(logger);
     }
 
+    @Test
+    public void logAtInfoMessageStart() {
+        setupInfoLogger();
+
+        long start = perfLogger.start("Start message");
+        perfLogger.end(start, -1, "message", "argument");
+
+        verifyDebugInteractions(1, false);
+        verifyNoMoreInteractions(logger);
+    }
+    //end INFO tests
+
+    private void setupTraceLogger() {
+        when(logger.isTraceEnabled()).thenReturn(true);
+        setupDebugLogger();
+    }
+    private void setupDebugLogger() {
+        when(logger.isDebugEnabled()).thenReturn(true);
+        setupInfoLogger();
+    }
+    private void setupInfoLogger() {
+        when(logger.isInfoEnabled()).thenReturn(true);
+    }
+
+    private void verifyTraceInteractions(int enabled, boolean shouldLogStart, boolean shouldLogEnd) {
+        verify(logger, times(enabled)).isTraceEnabled();
+
+        if (shouldLogStart) {
+            verify(logger, times(1)).trace(anyString());
+        }
+        if (shouldLogEnd) {
+            verify(logger, times(1)).trace(anyString(), any(Object[].class));
+        }
+    }
+
+    private void verifyDebugInteractions(int enabled, boolean shouldLog) {
+        verify(logger, times(enabled)).isDebugEnabled();
+
+        if (shouldLog) {
+            verify(logger, times(1)).debug(anyString(), any(Object[].class));
+        }
+    }
+
 }