diff --git a/gradle/variables.gradle b/gradle/variables.gradle index 45e91258c591eb14dcb8e399fe591eccb37aec69..c42ef183b2bbdce2b9d06c8e1800d0f7369bb9fd 100644 --- a/gradle/variables.gradle +++ b/gradle/variables.gradle @@ -1,5 +1,5 @@ ext { - kotlin_version = '1.8.0' + kotlin_version = '1.7.22' // 1.8.x has a jackson issue, test with JacksonProguardTest hilt_version = '2.44.2' nav_version = '2.5.3' tor_version = '0.4.7.13' diff --git a/mailbox-android/build.gradle b/mailbox-android/build.gradle index 553a13676be6a2967fe33ca15afa25ed1f6b09ef..a30bcac021efb4aef5001e0c74f1e9d54951a14b 100644 --- a/mailbox-android/build.gradle +++ b/mailbox-android/build.gradle @@ -30,6 +30,7 @@ android { vectorDrawables.useSupportLibrary = true testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' + testInstrumentationRunnerArguments disableAnalytics: 'true' } buildTypes { @@ -79,7 +80,7 @@ dependencies { implementation 'org.briarproject:dont-kill-me-lib:0.2.5' implementation 'com.github.tony19:logback-android:2.0.1' - implementation 'androidx.appcompat:appcompat:1.6.0' + implementation 'androidx.appcompat:appcompat:1.6.1' implementation "androidx.activity:activity-ktx:1.6.1" implementation "androidx.fragment:fragment-ktx:1.5.5" implementation 'androidx.preference:preference-ktx:1.2.0' @@ -95,7 +96,7 @@ dependencies { implementation "androidx.navigation:navigation-ui-ktx:$nav_version" implementation "androidx.constraintlayout:constraintlayout:2.1.4" - implementation "com.google.android.material:material:1.7.0" + implementation "com.google.android.material:material:1.8.0" implementation "com.google.dagger:hilt-android:$hilt_version" kapt "com.google.dagger:hilt-compiler:$hilt_version" diff --git a/mailbox-android/proguard-rules.pro b/mailbox-android/proguard-rules.pro index 861ec7b69c404e4253d568c82c021441c6dc5d39..3f745c5b4b02c8e35f347029a1a01f8d8c49998a 100644 --- a/mailbox-android/proguard-rules.pro +++ b/mailbox-android/proguard-rules.pro @@ -21,6 +21,11 @@ -keep class io.netty.util.ReferenceCountUtil { *; } -keep class io.netty.buffer.WrappedByteBuf { *; } +# Keep classes needed for instrumentation tests (here because testProguardFiles doesn't work) +-keep class kotlin.LazyKt +-keep class com.fasterxml.jackson.core.type.TypeReference +-keep class com.fasterxml.jackson.databind.ObjectMapper { *; } + # Don't warn about unused dependencies of H2 classes -dontwarn org.h2.** -dontnote org.h2.** diff --git a/mailbox-android/src/androidTest/java/org/briarproject/mailbox/JacksonProguardTest.kt b/mailbox-android/src/androidTest/java/org/briarproject/mailbox/JacksonProguardTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..5ab23c81ca9cc39d9e1cf19ccb37663bfe540c66 --- /dev/null +++ b/mailbox-android/src/androidTest/java/org/briarproject/mailbox/JacksonProguardTest.kt @@ -0,0 +1,35 @@ +package org.briarproject.mailbox + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import com.fasterxml.jackson.module.kotlin.registerKotlinModule +import org.briarproject.mailbox.core.contacts.Contact +import org.junit.Assert.assertEquals +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class JacksonProguardTest { + + private val mapper = ObjectMapper().apply { registerKotlinModule() } + + /** + * Tests if we can deserialize our objects with Jackson while using proguard: + * [issue](https://github.com/FasterXML/jackson-module-kotlin/issues/522) + */ + @Test + fun testDeserializeContact() { + val json = """ + { + "contactId": 1, + "token": "foo", + "inboxId": "bar", + "outboxId": "42" + } + """.trimIndent() + val contact: Contact = mapper.readValue(json) + assertEquals(1, contact.contactId) + } + +} diff --git a/mailbox-core/build.gradle b/mailbox-core/build.gradle index 6f1e27cadb1b1318e20f13b0996ae16769ac279e..b8f623108b3924e109870d78c9b530e2cc3304c9 100644 --- a/mailbox-core/build.gradle +++ b/mailbox-core/build.gradle @@ -26,7 +26,7 @@ dependencies { implementation 'org.briarproject:jtorctl:0.5' - def ktor_version = '2.0.3' + def ktor_version = '2.2.3' implementation "io.ktor:ktor-server-core:$ktor_version" implementation "io.ktor:ktor-server-netty:$ktor_version" implementation "io.ktor:ktor-server-auth:$ktor_version" diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/contacts/ContactsManagerIntegrationTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/contacts/ContactsManagerIntegrationTest.kt index 8931c3e14989403893374891a14a30393de7f7bb..86ac8509dff172c4d71708e09d9fe684fbc9b4d8 100644 --- a/mailbox-core/src/test/java/org/briarproject/mailbox/core/contacts/ContactsManagerIntegrationTest.kt +++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/contacts/ContactsManagerIntegrationTest.kt @@ -256,7 +256,7 @@ class ContactsManagerIntegrationTest : IntegrationTest() { } assertEquals(BadRequest, response.status) assertEquals( - "\"Bad request: Invalid value for parameter contactId\"", + "Bad request: Invalid value for parameter contactId", response.bodyAsText(), ) } diff --git a/mailbox-core/src/test/java/org/briarproject/mailbox/core/files/FileManagerIntegrationTest.kt b/mailbox-core/src/test/java/org/briarproject/mailbox/core/files/FileManagerIntegrationTest.kt index 92c2bc4f00b0e164c4c4df5a767b270b52478ba4..6011c240abc49b429a15ef28ac468b3bf8b46e3e 100644 --- a/mailbox-core/src/test/java/org/briarproject/mailbox/core/files/FileManagerIntegrationTest.kt +++ b/mailbox-core/src/test/java/org/briarproject/mailbox/core/files/FileManagerIntegrationTest.kt @@ -60,7 +60,7 @@ class FileManagerIntegrationTest : IntegrationTest() { setBody(bytes) } assertEquals(HttpStatusCode.BadRequest, response.status) - assertEquals("\"Malformed ID: foo\"", response.bodyAsText()) + assertEquals("Malformed ID: foo", response.bodyAsText()) } @Test @@ -72,7 +72,7 @@ class FileManagerIntegrationTest : IntegrationTest() { setBody(maxBytes) } assertEquals(HttpStatusCode.BadRequest, response.status) - assertEquals("\"Bad request: File larger than allowed.\"", response.bodyAsText()) + assertEquals("Bad request: File larger than allowed.", response.bodyAsText()) assertNoTmpFiles() } @@ -179,7 +179,7 @@ class FileManagerIntegrationTest : IntegrationTest() { authenticateWithToken(ownerToken) } assertEquals(HttpStatusCode.BadRequest, response.status) - assertEquals("\"Malformed ID: foo\"", response.bodyAsText()) + assertEquals("Malformed ID: foo", response.bodyAsText()) } @Test @@ -218,7 +218,7 @@ class FileManagerIntegrationTest : IntegrationTest() { authenticateWithToken(ownerToken) } assertEquals(HttpStatusCode.BadRequest, response.status) - assertEquals("\"Malformed ID: foo\"", response.bodyAsText()) + assertEquals("Malformed ID: foo", response.bodyAsText()) } @Test @@ -227,7 +227,7 @@ class FileManagerIntegrationTest : IntegrationTest() { authenticateWithToken(ownerToken) } assertEquals(HttpStatusCode.BadRequest, response.status) - assertEquals("\"Malformed ID: bar\"", response.bodyAsText()) + assertEquals("Malformed ID: bar", response.bodyAsText()) } @Test @@ -274,7 +274,7 @@ class FileManagerIntegrationTest : IntegrationTest() { authenticateWithToken(ownerToken) } assertEquals(HttpStatusCode.BadRequest, response.status) - assertEquals("\"Malformed ID: foo\"", response.bodyAsText()) + assertEquals("Malformed ID: foo", response.bodyAsText()) } @Test @@ -283,7 +283,7 @@ class FileManagerIntegrationTest : IntegrationTest() { authenticateWithToken(ownerToken) } assertEquals(HttpStatusCode.BadRequest, response.status) - assertEquals("\"Malformed ID: bar\"", response.bodyAsText()) + assertEquals("Malformed ID: bar", response.bodyAsText()) } @Test