From 2923c8ccd117e5eb0bd5f3fd72bbdf7a6c3d3aa1 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Mon, 4 Aug 2025 20:47:44 -0700 Subject: [PATCH] Add module upgrade test --- .../magisk/core/model/module/LocalModule.kt | 2 +- .../topjohnwu/magisk/test/AdditionalTest.kt | 19 +++++++++++++- .../com/topjohnwu/magisk/test/Environment.kt | 25 +++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/app/core/src/main/java/com/topjohnwu/magisk/core/model/module/LocalModule.kt b/app/core/src/main/java/com/topjohnwu/magisk/core/model/module/LocalModule.kt index 69a19ef1a..a8dd43abd 100644 --- a/app/core/src/main/java/com/topjohnwu/magisk/core/model/module/LocalModule.kt +++ b/app/core/src/main/java/com/topjohnwu/magisk/core/model/module/LocalModule.kt @@ -13,7 +13,7 @@ import java.io.IOException import java.util.Locale data class LocalModule( - private val base: ExtendedFile, + val base: ExtendedFile, ) : Module() { private val svc get() = ServiceLocator.networkService diff --git a/app/core/src/main/java/com/topjohnwu/magisk/test/AdditionalTest.kt b/app/core/src/main/java/com/topjohnwu/magisk/test/AdditionalTest.kt index 4bd9ad2ca..768b266cc 100644 --- a/app/core/src/main/java/com/topjohnwu/magisk/test/AdditionalTest.kt +++ b/app/core/src/main/java/com/topjohnwu/magisk/test/AdditionalTest.kt @@ -12,6 +12,7 @@ import com.topjohnwu.magisk.test.Environment.Companion.INVALID_ZYGISK import com.topjohnwu.magisk.test.Environment.Companion.MOUNT_TEST import com.topjohnwu.magisk.test.Environment.Companion.REMOVE_TEST import com.topjohnwu.magisk.test.Environment.Companion.SEPOLICY_RULE +import com.topjohnwu.magisk.test.Environment.Companion.UPGRADE_TEST import com.topjohnwu.superuser.Shell import kotlinx.coroutines.runBlocking import org.junit.After @@ -56,7 +57,7 @@ class AdditionalTest : BaseTest { @Test fun testModuleCount() { - var expected = 3 + var expected = 4 if (Environment.mount()) expected++ if (Environment.preinit()) expected++ if (Environment.lsposed()) expected++ @@ -141,4 +142,20 @@ class AdditionalTest : BaseTest { RootUtils.fs.getFile(Environment.REMOVE_TEST_MARKER).exists() ) } + + @Test + fun testModuleUpgrade() { + val module = modules.find { it.id == UPGRADE_TEST } + assertNotNull("$UPGRADE_TEST is not installed", module) + module!! + assertFalse("$UPGRADE_TEST should be disabled", module.enable) + assertTrue( + "$UPGRADE_TEST should be updated", + module.base.getChildFile("post-fs-data.sh").exists() + ) + assertFalse( + "$UPGRADE_TEST should be updated", + module.base.getChildFile("service.sh").exists() + ) + } } diff --git a/app/core/src/main/java/com/topjohnwu/magisk/test/Environment.kt b/app/core/src/main/java/com/topjohnwu/magisk/test/Environment.kt index 81847f055..24de33111 100644 --- a/app/core/src/main/java/com/topjohnwu/magisk/test/Environment.kt +++ b/app/core/src/main/java/com/topjohnwu/magisk/test/Environment.kt @@ -66,6 +66,7 @@ class Environment : BaseTest { const val REMOVE_TEST = "remove_test" const val REMOVE_TEST_MARKER = "/dev/.remove_test_removed" const val EMPTY_ZYGISK = "empty_zygisk" + const val UPGRADE_TEST = "upgrade_test" } object TimberLog : CallbackList(Runnable::run) { @@ -182,6 +183,29 @@ class Environment : BaseTest { assertTrue(error, Shell.cmd("set_default_perm $path").exec().isSuccess) } + private fun setupUpgradeModule(root: ExtendedFile, update: ExtendedFile) { + val error = "$UPGRADE_TEST setup failed" + val oldPath = root.getChildFile(UPGRADE_TEST) + val newPath = update.getChildFile(UPGRADE_TEST) + + // Create an existing module but mark as "disable + val module = LocalModule(oldPath) + assertTrue(error, oldPath.mkdirs()) + module.enable = false + // Install service.sh into the old module + assertTrue(error, oldPath.getChildFile("service.sh").createNewFile()) + + // Create an upgrade module + assertTrue(error, newPath.mkdirs()) + // Install post-fs-data.sh into the new module + assertTrue(error, newPath.getChildFile("post-fs-data.sh").createNewFile()) + + assertTrue(error, Shell.cmd( + "set_default_perm $oldPath", + "set_default_perm $newPath", + ).exec().isSuccess) + } + @Test fun setupEnvironment() { runBlocking { @@ -233,6 +257,7 @@ class Environment : BaseTest { setupEmptyZygiskModule(update) setupInvalidZygiskModule(update) setupRemoveModule(root) + setupUpgradeModule(root, update) } @Test