You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/05/21 03:14:35 UTC

[james-project] 03/06: JAMES-2763 StartUp check need to provide it name

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 067c074905c5f17fd2718d7db1bcd67e0c34012b
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Mon May 20 15:15:53 2019 +0700

    JAMES-2763 StartUp check need to provide it name
    
    In case if there is an exception thrown during the check, we still can
    able to get the proper check name and log the result accordingly
---
 .../CassandraSchemaVersionStartUpCheck.java        | 15 ++++--
 .../org/apache/james/StartUpChecksPerformer.java   |  2 +
 .../apache/james/StartUpChecksPerformerTest.java   | 59 ++++++++++++++++++----
 .../james/GuiceJamesServerStartUpCheckTest.java    | 21 ++++++--
 4 files changed, 80 insertions(+), 17 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java
index 0e6b24a..561b8aa 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java
@@ -54,13 +54,18 @@ public class CassandraSchemaVersionStartUpCheck implements StartUpChecksPerforme
                 String unknownSchemaStateMessage = "Unknown schema state " + schemaState;
                 LOGGER.error(unknownSchemaStateMessage);
                 return CheckResult.builder()
-                    .checkName(CHECK_NAME)
+                    .checkName(checkName())
                     .resultType(ResultType.BAD)
                     .description(unknownSchemaStateMessage)
                     .build();
         }
     }
 
+    @Override
+    public String checkName() {
+        return CHECK_NAME;
+    }
+
     private CheckResult checkUpgradeAbleState() {
         String upgradeVersionMessage =
             String.format("Current schema version is %d. Recommended version is %d",
@@ -68,7 +73,7 @@ public class CassandraSchemaVersionStartUpCheck implements StartUpChecksPerforme
                 versionManager.getMaximumSupportedVersion().getValue());
         LOGGER.warn(upgradeVersionMessage);
         return CheckResult.builder()
-            .checkName(CHECK_NAME)
+            .checkName(checkName())
             .resultType(ResultType.GOOD)
             .description(upgradeVersionMessage)
             .build();
@@ -78,7 +83,7 @@ public class CassandraSchemaVersionStartUpCheck implements StartUpChecksPerforme
         String message = "Schema version is up-to-date";
         LOGGER.info(message);
         return CheckResult.builder()
-            .checkName(CHECK_NAME)
+            .checkName(checkName())
             .resultType(ResultType.GOOD)
             .description(message)
             .build();
@@ -93,7 +98,7 @@ public class CassandraSchemaVersionStartUpCheck implements StartUpChecksPerforme
                 versionManager.getMaximumSupportedVersion().getValue());
         LOGGER.error(versionExceedMaximumSupportedMessage);
         return CheckResult.builder()
-            .checkName(CHECK_NAME)
+            .checkName(checkName())
             .resultType(ResultType.BAD)
             .description(versionExceedMaximumSupportedMessage)
             .build();
@@ -108,7 +113,7 @@ public class CassandraSchemaVersionStartUpCheck implements StartUpChecksPerforme
                 versionManager.getMaximumSupportedVersion().getValue());
         LOGGER.error(versionToOldMessage);
         return CheckResult.builder()
-            .checkName(CHECK_NAME)
+            .checkName(checkName())
             .resultType(ResultType.BAD)
             .description(versionToOldMessage)
             .build();
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/StartUpChecksPerformer.java b/server/container/guice/guice-common/src/main/java/org/apache/james/StartUpChecksPerformer.java
index e047e97..0dead1a 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/StartUpChecksPerformer.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/StartUpChecksPerformer.java
@@ -166,6 +166,8 @@ public class StartUpChecksPerformer {
         }
 
         CheckResult check();
+
+        String checkName();
     }
 
     static class StartUpChecks {
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java b/server/container/guice/guice-common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java
index c3750d2..53b9064 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java
@@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.StartUpChecksPerformer.StartUpCheck.CheckResult;
 import org.apache.james.StartUpChecksPerformer.StartUpCheck.ResultType;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 class StartUpChecksPerformerTest {
@@ -46,11 +47,26 @@ class StartUpChecksPerformerTest {
         .resultType(ResultType.BAD)
         .build();
 
+    private static StartUpChecksPerformer.StartUpCheck fromResult(CheckResult checkResult) {
+        return new StartUpChecksPerformer.StartUpCheck() {
+
+            @Override
+            public CheckResult check() {
+                return checkResult;
+            }
+
+            @Override
+            public String checkName() {
+                return checkResult.getName();
+            }
+        };
+    }
+
     @Test
     void performCheckShouldNotThrowWhenAllChecksSucceed() {
         StartUpChecksPerformer checksPerformer = StartUpChecksPerformer.from(
-            () -> GOOD_CHECK_1,
-            () -> GOOD_CHECK_2);
+            fromResult(GOOD_CHECK_1),
+            fromResult(GOOD_CHECK_2));
 
         assertThatCode(checksPerformer::performCheck)
             .doesNotThrowAnyException();
@@ -67,9 +83,9 @@ class StartUpChecksPerformerTest {
     @Test
     void performCheckShouldThrowWhenThereIsOneCheckFails() {
         StartUpChecksPerformer checksPerformer = StartUpChecksPerformer.from(
-            () -> GOOD_CHECK_1,
-            () -> GOOD_CHECK_2,
-            () -> BAD_CHECK_1);
+            fromResult(GOOD_CHECK_1),
+            fromResult(GOOD_CHECK_2),
+            fromResult(BAD_CHECK_1));
 
         assertThatThrownBy(checksPerformer::performCheck)
             .isInstanceOf(StartUpChecksPerformer.StartUpChecksException.class);
@@ -78,10 +94,10 @@ class StartUpChecksPerformerTest {
     @Test
     void performCheckShouldThrowAnExceptionContainingAllBadChecksWhenThereAreBadChecks() {
         StartUpChecksPerformer checksPerformer = StartUpChecksPerformer.from(
-            () -> GOOD_CHECK_1,
-            () -> GOOD_CHECK_2,
-            () -> BAD_CHECK_1,
-            () -> BAD_CHECK_2);
+            fromResult(GOOD_CHECK_1),
+            fromResult(GOOD_CHECK_2),
+            fromResult(BAD_CHECK_1),
+            fromResult(BAD_CHECK_2));
 
         assertThatThrownBy(checksPerformer::performCheck)
             .isInstanceOfSatisfying(
@@ -89,4 +105,29 @@ class StartUpChecksPerformerTest {
                 exception -> assertThat(exception.getBadChecks())
                     .containsOnly(BAD_CHECK_1, BAD_CHECK_2));
     }
+
+    @Disabled("performCheck() now doesn't support this")
+    @Test
+    void performCheckShouldNotPropagateUnExpectedExceptionDuringChecking() {
+        String checkName = "throwing check name";
+        StartUpChecksPerformer checksPerformer = StartUpChecksPerformer.from(
+
+            new StartUpChecksPerformer.StartUpCheck() {
+                @Override
+                public CheckResult check() {
+                    throw new RuntimeException("unexpected");
+                }
+
+                @Override
+                public String checkName() {
+                    return checkName;
+                }
+            });
+
+        assertThatThrownBy(checksPerformer::performCheck)
+            .isInstanceOfSatisfying(
+                StartUpChecksPerformer.StartUpChecksException.class,
+                exception -> assertThat(exception.badCheckNames())
+                    .containsOnly(checkName));
+    }
 }
\ No newline at end of file
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
index 08daaf4..ddf136d 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
@@ -46,10 +46,15 @@ class GuiceJamesServerStartUpCheckTest {
         @Override
         public CheckResult check() {
             return CheckResult.builder()
-                .checkName(CHECK_NAME)
+                .checkName(checkName())
                 .resultType(ResultType.GOOD)
                 .build();
         }
+
+        @Override
+        public String checkName() {
+            return CHECK_NAME;
+        }
     }
 
     private static class FailingStartUpCheck implements StartUpCheck {
@@ -59,11 +64,16 @@ class GuiceJamesServerStartUpCheckTest {
         @Override
         public CheckResult check() {
             return CheckResult.builder()
-                .checkName(CHECK_NAME)
+                .checkName(checkName())
                 .resultType(ResultType.BAD)
                 .description("Failing by intention")
                 .build();
         }
+
+        @Override
+        public String checkName() {
+            return CHECK_NAME;
+        }
     }
 
     private static class TestBlobExportMechanismStartUpCheck implements StartUpCheck {
@@ -81,10 +91,15 @@ class GuiceJamesServerStartUpCheckTest {
         @Override
         public CheckResult check() {
             return CheckResult.builder()
-                .checkName(CHECK_NAME)
+                .checkName(checkName())
                 .resultType(ResultType.GOOD)
                 .build();
         }
+
+        @Override
+        public String checkName() {
+            return CHECK_NAME;
+        }
     }
 
     private static final int LIMIT_TO_10_MESSAGES = 10;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org