@@ -13,6 +13,10 @@ import io.mockk.mockkConstructor
13
13
import io.mockk.slot
14
14
import io.mockk.unmockkObject
15
15
import io.mockk.verify
16
+ import kotlinx.coroutines.Dispatchers
17
+ import kotlinx.coroutines.launch
18
+ import kotlinx.coroutines.test.runTest
19
+ import kotlinx.coroutines.withContext
16
20
import org.junit.Assert.assertEquals
17
21
import org.junit.Before
18
22
import org.junit.Test
@@ -103,11 +107,11 @@ internal class KlaviyoNetworkMonitorTest : BaseTest() {
103
107
fun `Network change observer is invoked with current network status when network changes` () {
104
108
var expectedNetworkConnection = true
105
109
var callCount = 0
106
-
107
- KlaviyoNetworkMonitor .onNetworkChange {
110
+ val observer: NetworkObserver = {
108
111
assert (it == expectedNetworkConnection)
109
112
callCount++
110
113
}
114
+ KlaviyoNetworkMonitor .onNetworkChange(observer)
111
115
112
116
assert (netCallbackSlot.isCaptured) // attaching a listener should have initialized the network callback
113
117
@@ -130,6 +134,7 @@ internal class KlaviyoNetworkMonitorTest : BaseTest() {
130
134
netCallbackSlot.captured.onLost(mockk())
131
135
132
136
assertEquals(6 , callCount)
137
+ KlaviyoNetworkMonitor .offNetworkChange(observer)
133
138
}
134
139
135
140
@Test
@@ -167,4 +172,25 @@ internal class KlaviyoNetworkMonitorTest : BaseTest() {
167
172
netCallbackSlot.captured.onAvailable(mockk())
168
173
assertEquals(5 , callCount)
169
174
}
175
+
176
+ @Test()
177
+ fun `Concurrent modification exception doesn't get thrown on concurrent observer access` () = runTest {
178
+ val observer: NetworkObserver = { Thread .sleep(6 ) }
179
+
180
+ KlaviyoNetworkMonitor .onNetworkChange(observer)
181
+
182
+ val job = launch(Dispatchers .IO ) {
183
+ netCallbackSlot.captured.onAvailable(mockk())
184
+ }
185
+
186
+ val job2 = launch(Dispatchers .Default ) {
187
+ withContext(Dispatchers .IO ) {
188
+ Thread .sleep(5 )
189
+ }
190
+ KlaviyoNetworkMonitor .offNetworkChange(observer)
191
+ }
192
+
193
+ job.start()
194
+ job2.start()
195
+ }
170
196
}
0 commit comments