You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2013/08/13 11:39:13 UTC

svn commit: r1513408 - in /sling/trunk/contrib/extensions/healthcheck/api/src: main/java/org/apache/sling/hc/api/Result.java test/java/org/apache/sling/hc/api/ResultMergeTest.java

Author: bdelacretaz
Date: Tue Aug 13 09:39:13 2013
New Revision: 1513408

URL: http://svn.apache.org/r1513408
Log:
SLING-2987 - support for merging several Result

Added:
    sling/trunk/contrib/extensions/healthcheck/api/src/test/java/org/apache/sling/hc/api/ResultMergeTest.java
Modified:
    sling/trunk/contrib/extensions/healthcheck/api/src/main/java/org/apache/sling/hc/api/Result.java

Modified: sling/trunk/contrib/extensions/healthcheck/api/src/main/java/org/apache/sling/hc/api/Result.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/api/src/main/java/org/apache/sling/hc/api/Result.java?rev=1513408&r1=1513407&r2=1513408&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/api/src/main/java/org/apache/sling/hc/api/Result.java (original)
+++ sling/trunk/contrib/extensions/healthcheck/api/src/main/java/org/apache/sling/hc/api/Result.java Tue Aug 13 09:39:13 2013
@@ -50,22 +50,41 @@ public class Result implements Iterable 
         this.logger = logger != null ? logger : CLASS_LOGGER;
     }
     
+    /** Merge a set of Result into this one. This Result's status
+     *  is set to the highest status of all supplied Result, and
+     *  their log entries are added to this. */
+    public void merge(Result ...results) {
+        for(Result r : results) {
+            setStatus(r.getStatus());
+            for(ResultLogEntry e : r) {
+                log(e);
+            }
+        }
+    }
+    
     /** Add an entry to our log. Use the {@ResultLogEntry}.LT_* constants
      *  for well-known entry types.
      *  Adding an entry with a type where {@ResultLogEntry#isInformationalEntryType} returns
      *  false causes our status to be set to WARN, unless it was already set higher.
      */
     public void log(String entryType, String message) {
-        if(logger.isDebugEnabled() && ResultLogEntry.LT_DEBUG.equals(entryType)) {
-            logger.debug(message);
-        } else if(logger.isInfoEnabled() && ResultLogEntry.LT_INFO.equals(entryType)) {
-            logger.info(message);
+        log(new ResultLogEntry(entryType, message));
+    }
+    
+    /** Add an entry to our log - in general it is more convenient to use the {@link #add(String, String)}
+     *  method - this is useful when merging Result for example.
+     */
+    public void log(ResultLogEntry e) {
+        if(logger.isDebugEnabled() && ResultLogEntry.LT_DEBUG.equals(e.getEntryType())) {
+            logger.debug(e.getMessage());
+        } else if(logger.isInfoEnabled() && ResultLogEntry.LT_INFO.equals(e.getEntryType())) {
+            logger.info(e.getMessage());
         } else {
-            logger.warn(message);
+            logger.warn(e.getMessage());
         }
-        logEntries.add(new ResultLogEntry(entryType, message));
-        if(!ResultLogEntry.isInformationalEntryType(entryType) && status.ordinal() < Status.WARN.ordinal()) {
-            logger.warn("Setting Result status to WARN due to log entry of type {}", entryType);
+        logEntries.add(e);
+        if(!ResultLogEntry.isInformationalEntryType(e.getEntryType()) && status.ordinal() < Status.WARN.ordinal()) {
+            logger.warn("Setting Result status to WARN due to log entry of type {}", e.getEntryType());
             setStatus(Status.WARN);
         }
     }

Added: sling/trunk/contrib/extensions/healthcheck/api/src/test/java/org/apache/sling/hc/api/ResultMergeTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/healthcheck/api/src/test/java/org/apache/sling/hc/api/ResultMergeTest.java?rev=1513408&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/healthcheck/api/src/test/java/org/apache/sling/hc/api/ResultMergeTest.java (added)
+++ sling/trunk/contrib/extensions/healthcheck/api/src/test/java/org/apache/sling/hc/api/ResultMergeTest.java Tue Aug 13 09:39:13 2013
@@ -0,0 +1,83 @@
+/*
+ * 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 SF 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.sling.hc.api;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Iterator;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class ResultMergeTest {
+
+    private Result result;
+    
+    @Before
+    public void setup() {
+        result = new Result();
+        result.setStatus(Result.Status.WARN);
+        result.log(ResultLogEntry.LT_DEBUG, "BM1 debug");
+        result.log(ResultLogEntry.LT_INFO, "BM2 info");
+    }
+    
+    private void assertResult(Result.Status status, String ... messages) {
+        assertEquals(status, result.getStatus());
+        final Iterator<ResultLogEntry> it = result.iterator();
+        for(String msg : messages) {
+            assertTrue("Expecting " + msg + " to be present", it.hasNext());
+            assertEquals(msg, it.next().getMessage());
+        }
+    }
+    
+    @Test
+    public void testInitialState() {
+        assertResult(Result.Status.WARN, "BM1 debug", "BM2 info");
+    }
+    
+    @Test
+    public void testMergeNoResults() {
+        result.merge();
+        assertResult(Result.Status.WARN, "BM1 debug", "BM2 info");
+    }
+    
+    @Test
+    public void testMergeSingleResult() {
+        final Result r2 = new Result();
+        r2.log("FOO", "T1");
+        r2.log("FOO", "T2");
+        result.merge(r2);
+        assertResult(Result.Status.WARN, "BM1 debug", "BM2 info", "T1", "T2");
+    }
+    
+    @Test
+    public void testMergeMultipleResults() {
+        final Result [] more = new Result[3];
+        for(int i=0 ; i < more.length; i++) {
+            more[i] = new Result();
+            if(i==1) {
+                more[i].setStatus(Result.Status.CRITICAL);
+            }
+            more[i].log("BAR", "X" + i);
+        }
+        result.merge(more);
+        assertResult(Result.Status.CRITICAL, "BM1 debug", "BM2 info", "X0", "X1", "X2");
+    }
+    
+}