Merge pull request #4020 from element-hq/rav/more_posthog_props

Support new properties in posthog UTD reports
This commit is contained in:
Benoit Marty 2024-12-13 19:40:03 +01:00 committed by GitHub
commit c36ac5db25
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 111 additions and 7 deletions

View file

@ -39,6 +39,10 @@ class UtdTracker(
timeToDecryptMillis = info.timeToDecryptMs?.toInt() ?: -1,
domain = Error.Domain.E2EE,
name = name,
eventLocalAgeMillis = info.eventLocalAgeMillis.toInt(),
userTrustsOwnIdentity = info.userTrustsOwnIdentity,
isFederated = info.ownHomeserver != info.senderHomeserver,
isMatrixDotOrg = info.ownHomeserver == "matrix.org",
)
analyticsService.capture(event)
}

View file

@ -25,6 +25,7 @@ class UtdTrackerTest {
eventId = AN_EVENT_ID.value,
timeToDecryptMs = null,
cause = UtdCause.UNKNOWN,
eventLocalAgeMillis = 100L,
)
)
assertThat(fakeAnalyticsService.capturedEvents).containsExactly(
@ -34,7 +35,11 @@ class UtdTrackerTest {
cryptoSDK = Error.CryptoSDK.Rust,
timeToDecryptMillis = -1,
domain = Error.Domain.E2EE,
name = Error.Name.OlmKeysNotSentError
name = Error.Name.OlmKeysNotSentError,
isFederated = false,
isMatrixDotOrg = false,
userTrustsOwnIdentity = false,
eventLocalAgeMillis = 100,
)
)
assertThat(fakeAnalyticsService.screenEvents).isEmpty()
@ -59,7 +64,11 @@ class UtdTrackerTest {
cryptoSDK = Error.CryptoSDK.Rust,
timeToDecryptMillis = 123,
domain = Error.Domain.E2EE,
name = Error.Name.OlmKeysNotSentError
name = Error.Name.OlmKeysNotSentError,
isFederated = false,
isMatrixDotOrg = false,
userTrustsOwnIdentity = false,
eventLocalAgeMillis = 0,
)
)
assertThat(fakeAnalyticsService.screenEvents).isEmpty()
@ -84,7 +93,11 @@ class UtdTrackerTest {
cryptoSDK = Error.CryptoSDK.Rust,
timeToDecryptMillis = 123,
domain = Error.Domain.E2EE,
name = Error.Name.ExpectedDueToMembership
name = Error.Name.ExpectedDueToMembership,
isFederated = false,
isMatrixDotOrg = false,
userTrustsOwnIdentity = false,
eventLocalAgeMillis = 0,
)
)
assertThat(fakeAnalyticsService.screenEvents).isEmpty()
@ -109,7 +122,11 @@ class UtdTrackerTest {
cryptoSDK = Error.CryptoSDK.Rust,
timeToDecryptMillis = 123,
domain = Error.Domain.E2EE,
name = Error.Name.ExpectedSentByInsecureDevice
name = Error.Name.ExpectedSentByInsecureDevice,
isFederated = false,
isMatrixDotOrg = false,
userTrustsOwnIdentity = false,
eventLocalAgeMillis = 0,
)
)
}
@ -132,7 +149,90 @@ class UtdTrackerTest {
cryptoSDK = Error.CryptoSDK.Rust,
timeToDecryptMillis = 123,
domain = Error.Domain.E2EE,
name = Error.Name.ExpectedVerificationViolation
name = Error.Name.ExpectedVerificationViolation,
isFederated = false,
isMatrixDotOrg = false,
userTrustsOwnIdentity = false,
eventLocalAgeMillis = 0,
)
)
}
@Test
fun `when onUtd is called with different sender and receiver servers, the expected analytics Event is sent`() {
val fakeAnalyticsService = FakeAnalyticsService()
val sut = UtdTracker(fakeAnalyticsService)
sut.onUtd(
aRustUnableToDecryptInfo(
eventId = AN_EVENT_ID.value,
ownHomeserver = "example.com",
senderHomeserver = "matrix.org",
)
)
assertThat(fakeAnalyticsService.capturedEvents).containsExactly(
Error(
context = null,
cryptoModule = Error.CryptoModule.Rust,
cryptoSDK = Error.CryptoSDK.Rust,
timeToDecryptMillis = -1,
domain = Error.Domain.E2EE,
name = Error.Name.OlmKeysNotSentError,
isFederated = true,
isMatrixDotOrg = false,
userTrustsOwnIdentity = false,
eventLocalAgeMillis = 0,
)
)
}
@Test
fun `when onUtd is called from a matrix-org user, the expected analytics Event is sent`() {
val fakeAnalyticsService = FakeAnalyticsService()
val sut = UtdTracker(fakeAnalyticsService)
sut.onUtd(
aRustUnableToDecryptInfo(
eventId = AN_EVENT_ID.value,
ownHomeserver = "matrix.org",
)
)
assertThat(fakeAnalyticsService.capturedEvents).containsExactly(
Error(
context = null,
cryptoModule = Error.CryptoModule.Rust,
cryptoSDK = Error.CryptoSDK.Rust,
timeToDecryptMillis = -1,
domain = Error.Domain.E2EE,
name = Error.Name.OlmKeysNotSentError,
isFederated = true,
isMatrixDotOrg = true,
userTrustsOwnIdentity = false,
eventLocalAgeMillis = 0,
)
)
}
@Test
fun `when onUtd is called from a verified device, the expected analytics Event is sent`() {
val fakeAnalyticsService = FakeAnalyticsService()
val sut = UtdTracker(fakeAnalyticsService)
sut.onUtd(
aRustUnableToDecryptInfo(
eventId = AN_EVENT_ID.value,
userTrustsOwnIdentity = true,
)
)
assertThat(fakeAnalyticsService.capturedEvents).containsExactly(
Error(
context = null,
cryptoModule = Error.CryptoModule.Rust,
cryptoSDK = Error.CryptoSDK.Rust,
timeToDecryptMillis = -1,
domain = Error.Domain.E2EE,
name = Error.Name.OlmKeysNotSentError,
isFederated = false,
isMatrixDotOrg = false,
userTrustsOwnIdentity = true,
eventLocalAgeMillis = 0,
)
)
}

View file

@ -12,8 +12,8 @@ import uniffi.matrix_sdk_crypto.UtdCause
internal fun aRustUnableToDecryptInfo(
eventId: String,
timeToDecryptMs: ULong?,
cause: UtdCause,
timeToDecryptMs: ULong? = null,
cause: UtdCause = UtdCause.UNKNOWN,
eventLocalAgeMillis: Long = 0L,
userTrustsOwnIdentity: Boolean = false,
senderHomeserver: String = "",