@@ -14,6 +14,9 @@ import io.element.android.features.rageshake.impl.crash.CrashDataStore
14
14
import io.element.android.features.rageshake.impl.crash.FakeCrashDataStore
15
15
import io.element.android.features.rageshake.impl.screenshot.FakeScreenshotHolder
16
16
import io.element.android.libraries.matrix.api.MatrixClientProvider
17
+ import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService
18
+ import io.element.android.libraries.matrix.api.tracing.TracingService
19
+ import io.element.android.libraries.matrix.api.tracing.WriteToFilesConfiguration
17
20
import io.element.android.libraries.matrix.test.FakeMatrixClient
18
21
import io.element.android.libraries.matrix.test.FakeMatrixClientProvider
19
22
import io.element.android.libraries.matrix.test.FakeSdkMetadata
@@ -25,6 +28,7 @@ import io.element.android.libraries.network.useragent.DefaultUserAgentProvider
25
28
import io.element.android.libraries.sessionstorage.api.SessionStore
26
29
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
27
30
import io.element.android.libraries.sessionstorage.test.aSessionData
31
+ import io.element.android.tests.testutils.lambda.lambdaRecorder
28
32
import io.element.android.tests.testutils.testCoroutineDispatchers
29
33
import kotlinx.coroutines.test.TestScope
30
34
import kotlinx.coroutines.test.runTest
@@ -298,11 +302,96 @@ class DefaultBugReporterTest {
298
302
assertThat(onUploadSucceedCalled).isFalse()
299
303
}
300
304
305
+ @Test
306
+ fun `the log directory is initialized using the last session store data` () = runTest {
307
+ val sut = createDefaultBugReporter(
308
+ sessionStore = InMemorySessionStore ().apply {
309
+ storeData(aSessionData(sessionId = " @alice:domain.com" ))
310
+ }
311
+ )
312
+ assertThat(sut.logDirectory().absolutePath).endsWith(" /cache/logs/domain.com" )
313
+ }
314
+
315
+ @Test
316
+ fun `when the log directory is updated, the tracing service is invoked` () = runTest {
317
+ var param: WriteToFilesConfiguration ? = null
318
+ val updateWriteToFilesConfigurationResult = lambdaRecorder<WriteToFilesConfiguration , Unit > {
319
+ param = it
320
+ }
321
+ val sut = createDefaultBugReporter(
322
+ tracingService = FakeTracingService (
323
+ updateWriteToFilesConfigurationResult = updateWriteToFilesConfigurationResult,
324
+ )
325
+ )
326
+ sut.setLogDirectorySubfolder(" my.sub.folder" )
327
+ updateWriteToFilesConfigurationResult.assertions().isCalledOnce()
328
+ assertThat(param).isNotNull()
329
+ assertThat(param).isInstanceOf(WriteToFilesConfiguration .Enabled ::class .java)
330
+ assertThat((param as WriteToFilesConfiguration .Enabled ).directory).endsWith(" /cache/logs/my.sub.folder" )
331
+ assertThat((param as WriteToFilesConfiguration .Enabled ).filenamePrefix).isEqualTo(" logs" )
332
+ assertThat((param as WriteToFilesConfiguration .Enabled ).numberOfFiles).isEqualTo(168 )
333
+ assertThat((param as WriteToFilesConfiguration .Enabled ).filenameSuffix).isEqualTo(" log" )
334
+ }
335
+
336
+ @Test
337
+ fun `when the log directory is reset, the tracing service is invoked` () = runTest {
338
+ var param: WriteToFilesConfiguration ? = null
339
+ val updateWriteToFilesConfigurationResult = lambdaRecorder<WriteToFilesConfiguration , Unit > {
340
+ param = it
341
+ }
342
+ val sut = createDefaultBugReporter(
343
+ tracingService = FakeTracingService (
344
+ updateWriteToFilesConfigurationResult = updateWriteToFilesConfigurationResult,
345
+ )
346
+ )
347
+ sut.setLogDirectorySubfolder(null )
348
+ updateWriteToFilesConfigurationResult.assertions().isCalledOnce()
349
+ assertThat(param).isNotNull()
350
+ assertThat(param).isInstanceOf(WriteToFilesConfiguration .Enabled ::class .java)
351
+ assertThat((param as WriteToFilesConfiguration .Enabled ).directory).endsWith(" /cache/logs" )
352
+ assertThat((param as WriteToFilesConfiguration .Enabled ).filenamePrefix).isEqualTo(" logs" )
353
+ assertThat((param as WriteToFilesConfiguration .Enabled ).numberOfFiles).isEqualTo(168 )
354
+ assertThat((param as WriteToFilesConfiguration .Enabled ).filenameSuffix).isEqualTo(" log" )
355
+ }
356
+
357
+ @Test
358
+ fun `when a new MatrixClient is created the logs folder is updated` () = runTest {
359
+ var param: WriteToFilesConfiguration ? = null
360
+ val updateWriteToFilesConfigurationResult = lambdaRecorder<WriteToFilesConfiguration , Unit > {
361
+ param = it
362
+ }
363
+ val matrixAuthenticationService = FakeMatrixAuthenticationService ().apply {
364
+ givenMatrixClient(
365
+ FakeMatrixClient (
366
+ userIdServerNameLambda = { " domain.foo.org" },
367
+ )
368
+ )
369
+ }
370
+ val sut = createDefaultBugReporter(
371
+ matrixAuthenticationService = matrixAuthenticationService,
372
+ tracingService = FakeTracingService (
373
+ updateWriteToFilesConfigurationResult = updateWriteToFilesConfigurationResult,
374
+ )
375
+ )
376
+ assertThat(sut.logDirectory().absolutePath).endsWith(" /cache/logs" )
377
+ matrixAuthenticationService.login(" alice" , " password" )
378
+ assertThat(sut.logDirectory().absolutePath).endsWith(" /cache/logs/domain.foo.org" )
379
+ updateWriteToFilesConfigurationResult.assertions().isCalledOnce()
380
+ assertThat(param).isNotNull()
381
+ assertThat(param).isInstanceOf(WriteToFilesConfiguration .Enabled ::class .java)
382
+ assertThat((param as WriteToFilesConfiguration .Enabled ).directory).endsWith(" /cache/logs/domain.foo.org" )
383
+ assertThat((param as WriteToFilesConfiguration .Enabled ).filenamePrefix).isEqualTo(" logs" )
384
+ assertThat((param as WriteToFilesConfiguration .Enabled ).numberOfFiles).isEqualTo(168 )
385
+ assertThat((param as WriteToFilesConfiguration .Enabled ).filenameSuffix).isEqualTo(" log" )
386
+ }
387
+
301
388
private fun TestScope.createDefaultBugReporter (
302
389
sessionStore : SessionStore = InMemorySessionStore (),
303
390
matrixClientProvider : MatrixClientProvider = FakeMatrixClientProvider (),
304
391
crashDataStore : CrashDataStore = FakeCrashDataStore (),
305
392
server : MockWebServer = MockWebServer (),
393
+ tracingService : TracingService = FakeTracingService (),
394
+ matrixAuthenticationService : MatrixAuthenticationService = FakeMatrixAuthenticationService (),
306
395
): DefaultBugReporter {
307
396
val buildMeta = aBuildMeta()
308
397
return DefaultBugReporter (
@@ -317,8 +406,8 @@ class DefaultBugReporterTest {
317
406
bugReporterUrlProvider = { server.url(" /" ) },
318
407
sdkMetadata = FakeSdkMetadata (" 123456789" ),
319
408
matrixClientProvider = matrixClientProvider,
320
- tracingService = FakeTracingService () ,
321
- matrixAuthenticationService = FakeMatrixAuthenticationService () ,
409
+ tracingService = tracingService ,
410
+ matrixAuthenticationService = matrixAuthenticationService ,
322
411
)
323
412
}
324
413
0 commit comments