🚧 Make the node’s userDir available to injection
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 6 Apr 2025 08:48:47 +0000 (10:48 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Sun, 6 Apr 2025 16:19:38 +0000 (18:19 +0200)
src/main/kotlin/net/pterodactylus/sone/main/FreenetModule.kt
src/test/kotlin/net/pterodactylus/sone/main/FreenetModuleTest.kt

index 363f895..b21eb73 100644 (file)
@@ -7,10 +7,10 @@ import freenet.client.async.USKManager
 import freenet.clients.http.*
 import freenet.node.*
 import freenet.pluginmanager.*
+import jakarta.inject.Named
 import net.pterodactylus.sone.freenet.DefaultHighLevelSimpleClientCreator
 import net.pterodactylus.sone.freenet.HighLevelSimpleClientCreator
 import net.pterodactylus.sone.freenet.plugin.*
-import jakarta.inject.Provider
 import jakarta.inject.Singleton
 
 /**
@@ -48,4 +48,9 @@ class FreenetModule(private val pluginRespirator: PluginRespirator) : Module {
        fun getUskManager(nodeClientCore: NodeClientCore): USKManager =
                nodeClientCore.getUskManager()
 
+       @Provides
+       @Named("NodeUserDir")
+       fun getNodeUserDir(pluginRespirator: PluginRespirator): String =
+               pluginRespirator.node.userDir.path
+
 }
index 1a15b00..5d81ed6 100644 (file)
@@ -1,18 +1,22 @@
 package net.pterodactylus.sone.main
 
-import com.google.inject.*
+import com.google.inject.Guice.createInjector
+import com.google.inject.Injector
+import com.google.inject.name.Names
 import freenet.client.*
 import freenet.client.async.ClientContext
 import freenet.client.async.USKManager
 import freenet.clients.http.*
 import freenet.node.*
 import freenet.pluginmanager.*
+import java.io.File
 import net.pterodactylus.sone.freenet.HighLevelSimpleClientCreator
 import net.pterodactylus.sone.freenet.plugin.*
 import net.pterodactylus.sone.test.*
 import org.hamcrest.MatcherAssert.*
 import org.hamcrest.Matchers.*
 import org.junit.*
+import org.junit.rules.TemporaryFolder
 import org.mockito.*
 import org.mockito.Mockito.*
 
@@ -37,8 +41,6 @@ class FreenetModuleTest {
        private val highLevelSimpleClient = pluginRespirator.hlSimpleClient!!
        private val toadletContainer: ToadletContainer = pluginRespirator.toadletContainer
        private val pageMaker: PageMaker = pluginRespirator.pageMaker
-       private val module = FreenetModule(pluginRespirator)
-       private val injector = Guice.createInjector(module)
 
        @Test
        fun `plugin respirator is returned correctly`() {
@@ -134,4 +136,20 @@ class FreenetModuleTest {
                assertThat(injector.getInstance<USKManager>(), sameInstance(uskManager))
        }
 
+       @Test
+       fun `node user dir is returned correctly`() {
+               assertThat(createInjector("/node/user-dir").getInstance<String>(Names.named("NodeUserDir")), equalTo("/node/user-dir"))
+       }
+
+       private fun createInjector(databasePath: String = tempFolder.newFolder().path): Injector {
+               whenever(node.userDir).thenReturn(File(databasePath))
+               return createInjector(FreenetModule(pluginRespirator))
+       }
+
+       @Rule
+       @JvmField
+       val tempFolder = TemporaryFolder()
+
+       private val injector by lazy { createInjector() }
+
 }