Skip to content

Commit

Permalink
fix: support integer build uuids
Browse files Browse the repository at this point in the history
  • Loading branch information
fractalwrench committed Sep 16, 2021
1 parent 07ce2b9 commit 54aac65
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 3 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
* Update project to build using Gradle/AGP 7
[#1354](https://github.com/bugsnag/bugsnag-android/pull/1354)

* Support integer values in buildUuid
[#1375](https://github.com/bugsnag/bugsnag-android/pull/1375)

## 5.12.0 (2021-08-26)

* The `app.lowMemory` value always report the most recent `onTrimMemory`/`onLowMemory` status
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import com.bugsnag.android.EndpointConfiguration
import com.bugsnag.android.ErrorTypes
import com.bugsnag.android.EventPayload
import com.bugsnag.android.Logger
import com.bugsnag.android.ManifestConfigLoader
import com.bugsnag.android.ManifestConfigLoader.Companion.BUILD_UUID
import com.bugsnag.android.NoopLogger
import com.bugsnag.android.ThreadSendPolicy
import com.bugsnag.android.errorApiHeaders
Expand Down Expand Up @@ -209,7 +209,7 @@ internal fun sanitiseConfiguration(
}

// populate buildUUID from manifest
val buildUuid = appInfo?.metaData?.getString(ManifestConfigLoader.BUILD_UUID)
val buildUuid = populateBuildUuid(appInfo)

@Suppress("SENSELESS_COMPARISON")
if (configuration.delivery == null) {
Expand All @@ -224,5 +224,15 @@ internal fun sanitiseConfiguration(
)
}

private fun populateBuildUuid(appInfo: ApplicationInfo?): String? {
val bundle = appInfo?.metaData
return when {
bundle?.containsKey(BUILD_UUID) == true -> {
bundle.getString(BUILD_UUID) ?: bundle.getInt(BUILD_UUID).toString()
}
else -> null
}
}

internal const val RELEASE_STAGE_DEVELOPMENT = "development"
internal const val RELEASE_STAGE_PRODUCTION = "production"
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.Bundle
import com.bugsnag.android.BugsnagTestUtils.generateConfiguration
import com.bugsnag.android.internal.convertToImmutableConfig
import com.bugsnag.android.internal.sanitiseConfiguration
Expand All @@ -18,6 +19,9 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.anyInt
import org.mockito.Mockito.anyString
import org.mockito.Mockito.mock
import org.mockito.junit.MockitoJUnitRunner
import java.nio.file.Files

Expand Down Expand Up @@ -162,7 +166,12 @@ internal class ImmutableConfigTest {
`when`(context.packageName).thenReturn("com.example.foo")
val appInfo = ApplicationInfo()
appInfo.flags = ApplicationInfo.FLAG_DEBUGGABLE
`when`(packageManager.getApplicationInfo("com.example.foo", PackageManager.GET_META_DATA)).thenReturn(appInfo)
`when`(
packageManager.getApplicationInfo(
"com.example.foo",
PackageManager.GET_META_DATA
)
).thenReturn(appInfo)
`when`(context.packageManager).thenReturn(packageManager)
val cacheDir = Files.createTempDirectory("foo").toFile()
`when`(context.cacheDir).thenReturn(cacheDir)
Expand Down Expand Up @@ -203,4 +212,58 @@ internal class ImmutableConfigTest {
assertNotNull(config.delivery)
assertEquals(cacheDir, config.persistenceDirectory.value)
}

@Test
fun sanitizeConfigBuildUuidString() {
`when`(context.packageName).thenReturn("com.example.foo")
`when`(context.packageManager).thenReturn(packageManager)

// setup build uuid
val bundle = mock(Bundle::class.java)
`when`(bundle.containsKey("com.bugsnag.android.BUILD_UUID")).thenReturn(true)
`when`(bundle.getString("com.bugsnag.android.BUILD_UUID")).thenReturn("6533e9f7-0e98-40fe-84b4-0e4ed6df6866")
val appInfo = ApplicationInfo().apply { metaData = bundle }
`when`(packageManager.getApplicationInfo(anyString(), anyInt())).thenReturn(appInfo)

// validate build uuid
val seed = Configuration("5d1ec5bd39a74caa1267142706a7fb21")
val config = sanitiseConfiguration(context, seed, connectivity)
assertEquals("6533e9f7-0e98-40fe-84b4-0e4ed6df6866", config.buildUuid)
}

@Test
fun sanitizeConfigBuildUuidInt() {
`when`(context.packageName).thenReturn("com.example.foo")
`when`(context.packageManager).thenReturn(packageManager)

// setup build uuid
val bundle = mock(Bundle::class.java)
`when`(bundle.containsKey("com.bugsnag.android.BUILD_UUID")).thenReturn(true)
`when`(bundle.getString("com.bugsnag.android.BUILD_UUID")).thenReturn(null)
`when`(bundle.getInt("com.bugsnag.android.BUILD_UUID")).thenReturn(590265330)
val appInfo = ApplicationInfo().apply { metaData = bundle }
`when`(packageManager.getApplicationInfo(anyString(), anyInt())).thenReturn(appInfo)

// validate build uuid
val seed = Configuration("5d1ec5bd39a74caa1267142706a7fb21")
val config = sanitiseConfiguration(context, seed, connectivity)
assertEquals("590265330", config.buildUuid)
}

@Test
fun sanitizeConfigNoBuildUuid() {
`when`(context.packageName).thenReturn("com.example.foo")
`when`(context.packageManager).thenReturn(packageManager)

// setup build uuid
val bundle = mock(Bundle::class.java)
`when`(bundle.containsKey("com.bugsnag.android.BUILD_UUID")).thenReturn(false)
val appInfo = ApplicationInfo().apply { metaData = bundle }
`when`(packageManager.getApplicationInfo(anyString(), anyInt())).thenReturn(appInfo)

// validate build uuid
val seed = Configuration("5d1ec5bd39a74caa1267142706a7fb21")
val config = sanitiseConfiguration(context, seed, connectivity)
assertNull(config.buildUuid)
}
}

0 comments on commit 54aac65

Please sign in to comment.