✨ Add ticker shutdown wrapper
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Thu, 12 Dec 2019 19:54:06 +0000 (20:54 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Thu, 12 Dec 2019 19:58:52 +0000 (20:58 +0100)
src/main/java/net/pterodactylus/sone/main/SonePlugin.java
src/main/kotlin/net/pterodactylus/sone/main/SoneModule.kt
src/main/kotlin/net/pterodactylus/sone/main/TickerShutdown.kt
src/test/kotlin/net/pterodactylus/sone/main/SoneModuleTest.kt
src/test/kotlin/net/pterodactylus/sone/main/SonePluginTest.kt

index ef9f05a..d3dd3bd 100644 (file)
@@ -208,6 +208,9 @@ public class SonePlugin implements FredPlugin, FredPluginFCP, FredPluginL10n, Fr
                /* we need to request this to install all notification handlers. */
                injector.getInstance(NotificationHandler.class);
 
+               /* and this is required to shutdown all tickers. */
+               injector.getInstance(TickerShutdown.class);
+
                /* start core! */
                core.start();
 
index 5a66015..749de0d 100644 (file)
@@ -60,6 +60,7 @@ open class SoneModule(private val sonePlugin: SonePlugin, private val eventBus:
                loaders?.let { bind(Loaders::class.java).toInstance(it) }
                bind(MetricRegistry::class.java).`in`(Singleton::class.java)
                bind(WebOfTrustConnector::class.java).to(PluginWebOfTrustConnector::class.java).`in`(Singleton::class.java)
+               bind(TickerShutdown::class.java).`in`(Singleton::class.java)
 
                bindListener(Matchers.any(), object : TypeListener {
                        override fun <I> hear(typeLiteral: TypeLiteral<I>, typeEncounter: TypeEncounter<I>) {
index 71764ec..5f96050 100644 (file)
@@ -20,12 +20,13 @@ package net.pterodactylus.sone.main
 import com.google.common.eventbus.*
 import net.pterodactylus.sone.core.event.*
 import java.util.concurrent.*
+import javax.inject.*
 
 /**
  * Wrapper around all [tickers][ScheduledExecutorService] used in Sone,
  * ensuring proper shutdown.
  */
-class TickerShutdown(private val notificationTicker: ScheduledExecutorService) {
+class TickerShutdown @Inject constructor(@Named("notification") private val notificationTicker: ScheduledExecutorService) {
 
        @Subscribe
        fun shutdown(shutdown: Shutdown) {
index 9fe5dbb..28481ad 100644 (file)
@@ -222,4 +222,9 @@ class SoneModuleTest {
                injector.verifySingletonInstance<ScheduledExecutorService>(named("notification"))
        }
 
+       @Test
+       fun `ticker shutdown is created as singleton`() {
+               injector.verifySingletonInstance<TickerShutdown>()
+       }
+
 }
index b846522..e658fe2 100644 (file)
@@ -100,6 +100,12 @@ class SonePluginTest {
                assertThat(getInjected(NotificationHandler::class.java), notNullValue())
        }
 
+       @Test
+       fun `ticker shutdown is being requested`() {
+               sonePlugin.runPlugin(pluginRespirator)
+               assertThat(getInjected(TickerShutdown::class.java), notNullValue())
+       }
+
        private class FirstStartListener(private val firstStartReceived: AtomicBoolean) {
                @Subscribe
                fun firstStart(firstStart: FirstStart) {