diff --git a/app/src/androidTest/kotlin/ee/ria/DigiDoc/domain/preferences/DataStoreTest.kt b/app/src/androidTest/kotlin/ee/ria/DigiDoc/domain/preferences/DataStoreTest.kt index 611befac2..f1e61b0ac 100644 --- a/app/src/androidTest/kotlin/ee/ria/DigiDoc/domain/preferences/DataStoreTest.kt +++ b/app/src/androidTest/kotlin/ee/ria/DigiDoc/domain/preferences/DataStoreTest.kt @@ -555,7 +555,7 @@ class DataStoreTest { fun dataStore_getLibdigidocppVersion_success() { val result = dataStore.getLibdigidocppVersion() - assertEquals("4.3.0.40", result) + assertEquals("4.5.0.52", result) } @Test diff --git a/libdigidoc-lib/libs/libdigidocpp.jar b/libdigidoc-lib/libs/libdigidocpp.jar index a4771f02e..33bf8ca03 100644 Binary files a/libdigidoc-lib/libs/libdigidocpp.jar and b/libdigidoc-lib/libs/libdigidocpp.jar differ diff --git a/libdigidoc-lib/src/androidTest/kotlin/ee/ria/DigiDoc/libdigidoclib/init/InitializationTest.kt b/libdigidoc-lib/src/androidTest/kotlin/ee/ria/DigiDoc/libdigidoclib/init/InitializationTest.kt index dc557510a..18ef56661 100644 --- a/libdigidoc-lib/src/androidTest/kotlin/ee/ria/DigiDoc/libdigidoclib/init/InitializationTest.kt +++ b/libdigidoc-lib/src/androidTest/kotlin/ee/ria/DigiDoc/libdigidoclib/init/InitializationTest.kt @@ -26,11 +26,15 @@ import android.content.res.Resources import android.content.res.Resources.NotFoundException import androidx.test.platform.app.InstrumentationRegistry import ee.ria.DigiDoc.common.Constant.Defaults.DEFAULT_UUID_VALUE +import ee.ria.DigiDoc.common.testfiles.asset.AssetFile.Companion.getResourceFileAsFile import ee.ria.DigiDoc.configuration.provider.ConfigurationProvider import ee.ria.DigiDoc.configuration.repository.ConfigurationRepository +import ee.ria.DigiDoc.libdigidoclib.SignedContainer.Companion.openOrCreate import ee.ria.DigiDoc.libdigidoclib.exceptions.AlreadyInitializedException import kotlinx.coroutines.test.runTest +import org.junit.Assert.assertEquals import org.junit.Assert.assertThrows +import org.junit.Assert.assertTrue import org.junit.Assert.fail import org.junit.Before import org.junit.Test @@ -104,6 +108,18 @@ class InitializationTest { field.isAccessible = true field.setBoolean(initialization, false) } + + @Throws( + SecurityException::class, + NoSuchFieldException::class, + java.lang.IllegalArgumentException::class, + IllegalAccessException::class, + ) + private fun isInitializedFlag(): Boolean { + val field: Field = Initialization::class.java.getDeclaredField("isInitialized") + field.isAccessible = true + return field.getBoolean(initialization) + } } @Before @@ -116,14 +132,36 @@ class InitializationTest { } @Test - fun initialization_init_success() { + fun initialization_init_doesNotThrowWhenTslUnreachable() { try { - `when`(configurationRepository.getConfiguration()).thenReturn(configurationProvider) + val configuration = configurationProvider.copy(tslUrl = "http://127.0.0.1:1/eu-lotl.xml") + `when`(configurationRepository.getConfiguration()).thenReturn(configuration) runTest { initialization.init(context) } - } catch (_: Exception) { - fail("No exceptions should be thrown") + } catch (e: Exception) { + fail("Failing to download the list must not be fatal, but init threw: $e") + } + + assertTrue( + "The library should still be marked as initialized when the list cannot be downloaded", + isInitializedFlag(), + ) + } + + @Test + fun initialization_init_containerRemainsUsableWhenTslUnreachable() { + val configuration = configurationProvider.copy(tslUrl = "http://127.0.0.1:1/eu-lotl.xml") + `when`(configurationRepository.getConfiguration()).thenReturn(configuration) + + runTest { + initialization.init(context) + + val containerFile = + getResourceFileAsFile(context, "example.asice", ee.ria.DigiDoc.common.R.raw.example) + val signedContainer = openOrCreate(context, containerFile, listOf(containerFile), false) + + assertEquals(2, signedContainer.getSignatures().size) } } @@ -159,6 +197,8 @@ class InitializationTest { @Test fun initialization_init_throwsAlreadyInitializedExceptionWhenInitTwice() { + `when`(configurationRepository.getConfiguration()) + .thenReturn(configurationProvider.copy(tslUrl = "http://127.0.0.1:1/eu-lotl.xml")) assertThrows(AlreadyInitializedException::class.java) { runTest { initialization.init(context) diff --git a/libdigidoc-lib/src/debug/jniLibs/arm64-v8a/libdigidoc_java.so b/libdigidoc-lib/src/debug/jniLibs/arm64-v8a/libdigidoc_java.so index a3cfbc1ba..30cf96c8c 100644 Binary files a/libdigidoc-lib/src/debug/jniLibs/arm64-v8a/libdigidoc_java.so and b/libdigidoc-lib/src/debug/jniLibs/arm64-v8a/libdigidoc_java.so differ diff --git a/libdigidoc-lib/src/debug/jniLibs/armeabi-v7a/libdigidoc_java.so b/libdigidoc-lib/src/debug/jniLibs/armeabi-v7a/libdigidoc_java.so index 5a7d455df..82730ee7f 100644 Binary files a/libdigidoc-lib/src/debug/jniLibs/armeabi-v7a/libdigidoc_java.so and b/libdigidoc-lib/src/debug/jniLibs/armeabi-v7a/libdigidoc_java.so differ diff --git a/libdigidoc-lib/src/debug/jniLibs/x86_64/libdigidoc_java.so b/libdigidoc-lib/src/debug/jniLibs/x86_64/libdigidoc_java.so index e30e23bd3..fdc8079a8 100644 Binary files a/libdigidoc-lib/src/debug/jniLibs/x86_64/libdigidoc_java.so and b/libdigidoc-lib/src/debug/jniLibs/x86_64/libdigidoc_java.so differ diff --git a/libdigidoc-lib/src/main/jniLibs/arm64-v8a/libdigidoc_java.so b/libdigidoc-lib/src/main/jniLibs/arm64-v8a/libdigidoc_java.so index a3cfbc1ba..30cf96c8c 100644 Binary files a/libdigidoc-lib/src/main/jniLibs/arm64-v8a/libdigidoc_java.so and b/libdigidoc-lib/src/main/jniLibs/arm64-v8a/libdigidoc_java.so differ diff --git a/libdigidoc-lib/src/main/jniLibs/armeabi-v7a/libdigidoc_java.so b/libdigidoc-lib/src/main/jniLibs/armeabi-v7a/libdigidoc_java.so index 5a7d455df..82730ee7f 100644 Binary files a/libdigidoc-lib/src/main/jniLibs/armeabi-v7a/libdigidoc_java.so and b/libdigidoc-lib/src/main/jniLibs/armeabi-v7a/libdigidoc_java.so differ diff --git a/libdigidoc-lib/src/main/jniLibs/x86_64/libdigidoc_java.so b/libdigidoc-lib/src/main/jniLibs/x86_64/libdigidoc_java.so index e30e23bd3..fdc8079a8 100644 Binary files a/libdigidoc-lib/src/main/jniLibs/x86_64/libdigidoc_java.so and b/libdigidoc-lib/src/main/jniLibs/x86_64/libdigidoc_java.so differ diff --git a/libdigidoc-lib/src/main/kotlin/ee/ria/DigiDoc/libdigidoclib/init/Initialization.kt b/libdigidoc-lib/src/main/kotlin/ee/ria/DigiDoc/libdigidoclib/init/Initialization.kt index b2b7ed284..cf6da91c0 100644 --- a/libdigidoc-lib/src/main/kotlin/ee/ria/DigiDoc/libdigidoclib/init/Initialization.kt +++ b/libdigidoc-lib/src/main/kotlin/ee/ria/DigiDoc/libdigidoclib/init/Initialization.kt @@ -139,7 +139,18 @@ class Initialization context, isLoggingEnabled, ) - digidoc.initializeLib(UserAgentUtil.getAppInfo(context), path) + + val appInfo = UserAgentUtil.getAppInfo(context) + + try { + digidoc.initializeLib(appInfo, path) + } catch (e: RuntimeException) { + errorLog(libdigidocInitLogTag, "Unable to initialize TSL: ${e.message}", e) + } catch (e: Exception) { + errorLog(libdigidocInitLogTag, "Unable to initialize Libdigidocpp: ${e.message}", e) + throw e + } + UserAgentUtil.setLibdigidocppVersion(digidoc.version()) debugLog(libdigidocInitLogTag, "Initialized libdigidocpp ${digidoc.version()} (TSL cache: $path)") isInitialized = true diff --git a/libdigidoc-lib/src/main/res/raw/schema.zip b/libdigidoc-lib/src/main/res/raw/schema.zip index 1df7b7fc2..8813774c4 100644 Binary files a/libdigidoc-lib/src/main/res/raw/schema.zip and b/libdigidoc-lib/src/main/res/raw/schema.zip differ