From 3f43d8ad21fa4e928c52309bd26c703e202afc1d Mon Sep 17 00:00:00 2001
From: Christian Sailer <christian.sailer@r3.com>
Date: Mon, 30 Oct 2017 11:55:04 +0000
Subject: [PATCH] Add helper for checking whether to check checkpoints and unit
 test it.

---
 .../net/corda/node/services/config/NodeConfiguration.kt   | 4 ++++
 .../node/services/statemachine/StateMachineManagerImpl.kt | 3 ++-
 .../node/services/config/NodeConfigurationImplTest.kt     | 8 ++++----
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/node/src/main/kotlin/net/corda/node/services/config/NodeConfiguration.kt b/node/src/main/kotlin/net/corda/node/services/config/NodeConfiguration.kt
index 43a07000f3..8423384d90 100644
--- a/node/src/main/kotlin/net/corda/node/services/config/NodeConfiguration.kt
+++ b/node/src/main/kotlin/net/corda/node/services/config/NodeConfiguration.kt
@@ -49,6 +49,10 @@ interface NodeConfiguration : NodeSSLConfiguration {
     val detectPublicIp: Boolean get() = true
 }
 
+fun NodeConfiguration.shouldCheckCheckpoints(): Boolean{
+    return this.devMode && this.devModeOptions?.disableCheckpointChecker != true
+}
+
 data class NotaryConfig(val validating: Boolean,
                         val raft: RaftConfig? = null,
                         val bftSMaRt: BFTSMaRtConfiguration? = null,
diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManagerImpl.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManagerImpl.kt
index 78dd79cdaa..391b636684 100644
--- a/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManagerImpl.kt
+++ b/node/src/main/kotlin/net/corda/node/services/statemachine/StateMachineManagerImpl.kt
@@ -31,6 +31,7 @@ import net.corda.node.internal.InitiatedFlowFactory
 import net.corda.node.services.api.Checkpoint
 import net.corda.node.services.api.CheckpointStorage
 import net.corda.node.services.api.ServiceHubInternal
+import net.corda.node.services.config.shouldCheckCheckpoints
 import net.corda.node.services.messaging.ReceivedMessage
 import net.corda.node.services.messaging.TopicSession
 import net.corda.node.utilities.*
@@ -88,7 +89,7 @@ class StateMachineManagerImpl(
     private val scheduler = FiberScheduler()
     private val mutex = ThreadBox(InnerState())
     // This thread (only enabled in dev mode) deserialises checkpoints in the background to shake out bugs in checkpoint restore.
-    private val checkpointCheckerThread = if (serviceHub.configuration.devModeOptions?.disableCheckpointChecker != true) {
+    private val checkpointCheckerThread = if (serviceHub.configuration.shouldCheckCheckpoints()) {
         newNamedSingleThreadExecutor("CheckpointChecker")
     } else {
         null
diff --git a/node/src/test/kotlin/net/corda/node/services/config/NodeConfigurationImplTest.kt b/node/src/test/kotlin/net/corda/node/services/config/NodeConfigurationImplTest.kt
index 0bdf58e6f8..bb5c405ee6 100644
--- a/node/src/test/kotlin/net/corda/node/services/config/NodeConfigurationImplTest.kt
+++ b/node/src/test/kotlin/net/corda/node/services/config/NodeConfigurationImplTest.kt
@@ -23,10 +23,10 @@ class NodeConfigurationImplTest {
 
     @Test
     fun `check devModeOptions flag helper`() {
-        assertFalse { configDebugOptions(true, null).devModeOptions?.disableCheckpointChecker == true }
-        assertFalse { configDebugOptions(true, DevModeOptions()).devModeOptions?.disableCheckpointChecker == true }
-        assertFalse { configDebugOptions(true, DevModeOptions(false)).devModeOptions?.disableCheckpointChecker == true }
-        assertTrue { configDebugOptions(true, DevModeOptions(true)).devModeOptions?.disableCheckpointChecker == true }
+        assertTrue { configDebugOptions(true, null).shouldCheckCheckpoints() }
+        assertTrue { configDebugOptions(true, DevModeOptions()).shouldCheckCheckpoints() }
+        assertTrue { configDebugOptions(true, DevModeOptions(false)).shouldCheckCheckpoints() }
+        assertFalse { configDebugOptions(true, DevModeOptions(true)).shouldCheckCheckpoints() }
     }
 
     private fun configDebugOptions(devMode: Boolean, devModeOptions: DevModeOptions?) : NodeConfiguration {