-
Notifications
You must be signed in to change notification settings - Fork 7
/
ModuleInitBootstrapperTest.kt
81 lines (73 loc) · 3.51 KB
/
ModuleInitBootstrapperTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package io.embrace.android.embracesdk.injection
import android.content.Context
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.embrace.android.embracesdk.Embrace
import io.embrace.android.embracesdk.fakes.FakeClock
import io.embrace.android.embracesdk.fakes.injection.FakeCoreModule
import io.embrace.android.embracesdk.fakes.injection.FakeInitModule
import io.embrace.android.embracesdk.fakes.injection.FakeWorkerThreadModule
import io.embrace.android.embracesdk.worker.WorkerName
import io.embrace.android.embracesdk.worker.WorkerThreadModuleImpl
import org.junit.Assert.assertFalse
import org.junit.Assert.assertThrows
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RuntimeEnvironment
import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException
@RunWith(AndroidJUnit4::class)
internal class ModuleInitBootstrapperTest {
private lateinit var moduleInitBootstrapper: ModuleInitBootstrapper
private lateinit var context: Context
@Before
fun setup() {
moduleInitBootstrapper = ModuleInitBootstrapper(coreModuleSupplier = { _, _ -> FakeCoreModule() })
context = RuntimeEnvironment.getApplication().applicationContext
}
@Test
fun `test default implementation`() {
val moduleInitBootstrapper = ModuleInitBootstrapper(coreModuleSupplier = { _, _ -> FakeCoreModule() })
with(moduleInitBootstrapper) {
assertTrue(moduleInitBootstrapper.init(context, false, Embrace.AppFramework.NATIVE, 0L))
assertTrue(initModule is InitModuleImpl)
assertTrue(openTelemetryModule is OpenTelemetryModuleImpl)
assertTrue(workerThreadModule is WorkerThreadModuleImpl)
assertTrue(systemServiceModule is SystemServiceModuleImpl)
assertTrue(androidServicesModule is AndroidServicesModuleImpl)
assertTrue(storageModule is StorageModuleImpl)
assertTrue(essentialServiceModule is EssentialServiceModuleImpl)
assertTrue(dataCaptureServiceModule is DataCaptureServiceModuleImpl)
assertTrue(deliveryModule is DeliveryModuleImpl)
assertTrue(payloadModule is PayloadModuleImpl)
}
}
@Test
fun `cannot initialize twice`() {
assertTrue(moduleInitBootstrapper.init(context, false, Embrace.AppFramework.NATIVE, 0L))
assertFalse(moduleInitBootstrapper.init(context, false, Embrace.AppFramework.NATIVE, 0L))
}
@Test
fun `async init returns normally and without failure`() {
assertTrue(moduleInitBootstrapper.init(context, false, Embrace.AppFramework.NATIVE, 0L))
moduleInitBootstrapper.waitForAsyncInit()
}
@Test
fun `async init throws exception if it waiting for too long`() {
val fakeClock = FakeClock()
val fakeInitModule = FakeInitModule(clock = fakeClock)
val fakeCoreModule = FakeCoreModule()
val fakeWorkerThreadModule =
FakeWorkerThreadModule(fakeInitModule = fakeInitModule, name = WorkerName.BACKGROUND_REGISTRATION)
val bootstrapper = ModuleInitBootstrapper(
initModule = fakeInitModule,
coreModuleSupplier = { _, _ -> fakeCoreModule },
workerThreadModuleSupplier = { _ -> fakeWorkerThreadModule }
)
assertTrue(bootstrapper.init(context, false, Embrace.AppFramework.NATIVE, 0L))
assertThrows(TimeoutException::class.java) {
bootstrapper.waitForAsyncInit(500L, TimeUnit.MILLISECONDS)
}
}
}