commit 46981c59798075c3153e969e103271a81d638b30
parent dc3eaaac936a65dc385b0c1471a13b455dbe4134
Author: t3sserakt <t3sserakt@posteo.de>
Date: Fri, 28 Nov 2025 11:45:37 +0100
Added integration test
Diffstat:
6 files changed, 85 insertions(+), 27 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -1,3 +1,5 @@
*~
.DS_Store
GNUnetMessenger/app/release/
+
+GNUnetMessenger/.idea/*.xml
diff --git a/GNUnetMessenger/.idea/deploymentTargetSelector.xml b/GNUnetMessenger/.idea/deploymentTargetSelector.xml
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="deploymentTargetSelector">
- <selectionStates>
- <SelectionState runConfigName="app">
- <option name="selectionMode" value="DROPDOWN" />
- <DropdownSelection timestamp="2025-06-11T08:01:17.994684Z">
- <Target type="DEFAULT_BOOT">
- <handle>
- <DeviceId pluginId="PhysicalDevice" identifier="serial=26081JEGR13353" />
- </handle>
- </Target>
- </DropdownSelection>
- <DialogSelection />
- </SelectionState>
- </selectionStates>
- </component>
-</project>
-\ No newline at end of file
diff --git a/GNUnetMessenger/.idea/kotlinc.xml b/GNUnetMessenger/.idea/kotlinc.xml
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="KotlinJpsPluginSettings">
- <option name="version" value="2.0.21" />
- </component>
-</project>
-\ No newline at end of file
diff --git a/GNUnetMessenger/app/build.gradle.kts b/GNUnetMessenger/app/build.gradle.kts
@@ -65,4 +65,6 @@ dependencies {
androidTestImplementation(libs.androidx.espresso.core)
implementation("org.gnunet:gnunet-ipc-contract:1.0.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
+ androidTestImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1")
+ testImplementation("junit:junit:4.13.2")
}
\ No newline at end of file
diff --git a/GNUnetMessenger/app/src/androidTest/java/org/gnunet/gnunetmessenger/ipc/GnunetChatRemoteTest.kt b/GNUnetMessenger/app/src/androidTest/java/org/gnunet/gnunetmessenger/ipc/GnunetChatRemoteTest.kt
@@ -0,0 +1,79 @@
+package org.gnunet.gnunetmessenger.ipc
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.core.app.ApplicationProvider
+import kotlinx.coroutines.test.runTest
+import kotlinx.coroutines.withTimeout
+import org.gnunet.gnunetmessenger.model.ChatContext
+import org.gnunet.gnunetmessenger.model.ChatMessage
+import org.gnunet.gnunetmessenger.model.ChatHandle
+import org.gnunet.gnunetmessenger.model.MessengerApp
+import org.gnunet.gnunetmessenger.service.GnunetChat
+import org.gnunet.gnunetmessenger.service.boundimpl.GnunetChatBoundService
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class GnunetChatRemoteTest {
+
+ private val appContext = ApplicationProvider.getApplicationContext<android.content.Context>()
+ private val gnunetChat: GnunetChatBoundService = GnunetChatBoundService(appContext)
+
+ @After
+ fun tearDown() {
+ // sauber vom Service abmelden
+ gnunetChat.unbind()
+ }
+
+ @Test
+ fun startChat_and_getProfileName_works() = runTest {
+ // 1. Chat starten – callback ignorieren wir erstmal
+ val handle: ChatHandle = gnunetChat.startChat(
+ messengerApp = MessengerApp()
+ ) { _: ChatContext, _: ChatMessage ->
+ // hier könntest du später Messages sammeln / asserten
+ }
+
+ // 2. Warten, bis der echte Handle vom Server da ist
+ withTimeout(5_000) {
+ gnunetChat.awaitReady(handle)
+ }
+ assertTrue("Handle.pointer sollte != 0 sein", handle.pointer != 0L)
+
+ // 3. Remote-Call auf die Server-App: getProfileName()
+ val profileName = gnunetChat.getProfileName(handle)
+
+ // Aktuell sollte der Default-Name aus deiner Session-Struktur kommen
+ assertEquals("GNUnet", profileName)
+ }
+
+ @Test
+ fun createAccount_then_iterateAccounts_sees_it() = runTest {
+ val handle = gnunetChat.startChat(MessengerApp("Default")) { _, _ -> }
+ withTimeout(5_000) { gnunetChat.awaitReady(handle) }
+
+ val name = "MyTestAccount"
+
+ val result = gnunetChat.createAccount(handle, name)
+ assertEquals(GnunetReturnValue.OK, result)
+
+ val accounts = mutableListOf<ChatAccount>()
+
+ // iterateAccounts ist nicht suspend -> wir warten mit Timeout,
+ // bis mindestens ein Account mit passendem Namen im Callback war.
+ gnunetChat.iterateAccounts(handle) { acc ->
+ accounts += acc
+ }
+
+ withTimeout(3_000) {
+ while (accounts.none { it.name == name }) {
+ kotlinx.coroutines.delay(50)
+ }
+ }
+
+ assertTrue(accounts.any { it.name == name })
+ }
+}
+\ No newline at end of file
diff --git a/GNUnetMessenger/gradle/libs.versions.toml b/GNUnetMessenger/gradle/libs.versions.toml
@@ -1,5 +1,5 @@
[versions]
-agp = "8.13.0"
+agp = "8.9.1"
cardview = "1.0.0"
kotlin = "2.2.0"
coreKtx = "1.10.1"