@@ -52,14 +52,14 @@ class SessionTest {
52
52
Assert .assertEquals(300000 , session.backgroundTimeout)
53
53
Assert .assertNull(sessionState)
54
54
Assert .assertNotNull(session.userId)
55
- val sdj = session.getSessionContext (" first-id-1" , timestamp, false )
55
+ val sdj = session.getAndUpdateSessionForEvent (" first-id-1" , timestamp, false )
56
56
sessionState = session.state
57
57
58
58
Assert .assertNotNull(sdj)
59
59
Assert .assertNotNull(sessionState)
60
60
Assert .assertEquals(" first-id-1" , sessionState!! .firstEventId)
61
61
Assert .assertEquals(timestampDateTime, sessionState.firstEventTimestamp)
62
- session.getSessionContext (" second-id-2" , timestamp + 10000 , false )
62
+ session.getAndUpdateSessionForEvent (" second-id-2" , timestamp + 10000 , false )
63
63
Assert .assertEquals(" first-id-1" , sessionState.firstEventId)
64
64
Assert .assertEquals(timestampDateTime, sessionState.firstEventTimestamp)
65
65
Assert .assertEquals(TrackerConstants .SESSION_SCHEMA , sdj!! .map[" schema" ])
@@ -342,21 +342,21 @@ class SessionTest {
342
342
val tracker2 = Tracker (emitter, " tracker2" , " app" , context = context, builder = trackerBuilder)
343
343
val session1 = tracker1.session
344
344
val session2 = tracker2.session
345
- session1!! .getSessionContext (" session1-fake-id1" , timestamp, false )
346
- session2!! .getSessionContext (" session2-fake-id1" , timestamp, false )
345
+ session1!! .getAndUpdateSessionForEvent (" session1-fake-id1" , timestamp, false )
346
+ session2!! .getAndUpdateSessionForEvent (" session2-fake-id1" , timestamp, false )
347
347
val initialValue1 = session1.sessionIndex?.toLong()
348
348
val id1 = session1.state!! .sessionId
349
349
val initialValue2 = session2.sessionIndex?.toLong()
350
350
351
351
// Retrigger session in tracker1
352
352
// The timeout is 20s, this sleep is only 2s - it's still the same session
353
353
Thread .sleep(2000 )
354
- session1.getSessionContext (" session1-fake-id2" , timestamp, false )
354
+ session1.getAndUpdateSessionForEvent (" session1-fake-id2" , timestamp, false )
355
355
356
356
// Retrigger timedout session in tracker2
357
357
// 20s has then passed. Session must be updated, increasing the sessionIndex by 1
358
358
Thread .sleep(18000 )
359
- session2.getSessionContext (" session2-fake-id2" , timestamp, false )
359
+ session2.getAndUpdateSessionForEvent (" session2-fake-id2" , timestamp, false )
360
360
361
361
// Check sessions have the correct state
362
362
Assert .assertEquals(0 , session1.sessionIndex!! - initialValue1!! )
@@ -365,7 +365,7 @@ class SessionTest {
365
365
366
366
// Recreate tracker2
367
367
val tracker2b = Tracker (emitter, " tracker2" , " app" , context = context, builder = trackerBuilder)
368
- tracker2b.session!! .getSessionContext (" session2b-fake-id3" , timestamp, false )
368
+ tracker2b.session!! .getAndUpdateSessionForEvent (" session2b-fake-id3" , timestamp, false )
369
369
val initialValue2b = tracker2b.session!! .sessionIndex?.toLong()
370
370
val previousId2b = tracker2b.session!! .state!! .previousSessionId
371
371
@@ -388,6 +388,47 @@ class SessionTest {
388
388
Assert .assertNull(context[Parameters .SESSION_PREVIOUS_ID ])
389
389
}
390
390
391
+ @Test
392
+ fun testStartsNewSessionOnRestartByDefault () {
393
+ val session1 = Session (foregroundTimeout = 3 , backgroundTimeout = 3 , namespace = " t1" , timeUnit = TimeUnit .SECONDS , context = context)
394
+ val firstSession = session1.getAndUpdateSessionForEvent(" event_1" , eventTimestamp = 1654496481345 , userAnonymisation = false )
395
+
396
+ val session2 = Session (foregroundTimeout = 3 , backgroundTimeout = 3 , namespace = " t1" , timeUnit = TimeUnit .SECONDS , context = context)
397
+ val secondSession = session2.getAndUpdateSessionForEvent(" event_2" , eventTimestamp = 1654496481345 , userAnonymisation = false )
398
+
399
+ Assert .assertNotNull(firstSession?.sessionId)
400
+ Assert .assertNotEquals(firstSession?.sessionId, secondSession?.sessionId)
401
+ Assert .assertEquals(firstSession?.sessionId, secondSession?.previousSessionId)
402
+ }
403
+
404
+ @Test
405
+ fun testResumesPreviouslyPersistedSessionIfEnabled () {
406
+ val session1 = Session (foregroundTimeout = 3 , backgroundTimeout = 3 , namespace = " t1" , continueSessionOnRestart = true , timeUnit = TimeUnit .SECONDS , context = context)
407
+ session1.getAndUpdateSessionForEvent(" event_1" , eventTimestamp = 1654496481345 , userAnonymisation = false )
408
+ val firstSession = session1.getAndUpdateSessionForEvent(" event_2" , eventTimestamp = 1654496481346 , userAnonymisation = false )
409
+
410
+ val session2 = Session (foregroundTimeout = 3 , backgroundTimeout = 3 , namespace = " t1" , continueSessionOnRestart = true , timeUnit = TimeUnit .SECONDS , context = context)
411
+ val secondSession = session2.getAndUpdateSessionForEvent(" event_3" , eventTimestamp = 1654496481347 , userAnonymisation = false )
412
+
413
+ Assert .assertNotNull(firstSession?.sessionId)
414
+ Assert .assertEquals(firstSession?.sessionId, secondSession?.sessionId)
415
+ Assert .assertEquals(secondSession?.eventIndex, 3 )
416
+ }
417
+
418
+ @Test
419
+ fun testStartsNewSessionOnRestartOnTimeout () {
420
+ val session1 = Session (foregroundTimeout = 100 , backgroundTimeout = 100 , namespace = " t1" , continueSessionOnRestart = true , timeUnit = TimeUnit .MILLISECONDS , context = context)
421
+ val firstSession = session1.getAndUpdateSessionForEvent(" event_1" , eventTimestamp = 1654496481345 , userAnonymisation = false )
422
+
423
+ Thread .sleep(500 )
424
+
425
+ val session2 = Session (foregroundTimeout = 100 , backgroundTimeout = 100 , namespace = " t1" , continueSessionOnRestart = true , timeUnit = TimeUnit .MILLISECONDS , context = context)
426
+ val secondSession = session2.getAndUpdateSessionForEvent(" event_2" , eventTimestamp = 1654496481345 , userAnonymisation = false )
427
+
428
+ Assert .assertNotEquals(firstSession?.sessionId, secondSession?.sessionId)
429
+ Assert .assertEquals(firstSession?.sessionId, secondSession?.previousSessionId)
430
+ }
431
+
391
432
// Private methods
392
433
private fun getSession (foregroundTimeout : Long , backgroundTimeout : Long ): Session {
393
434
context.getSharedPreferences(TrackerConstants .SNOWPLOW_SESSION_VARS , Context .MODE_PRIVATE )
@@ -403,7 +444,7 @@ class SessionTest {
403
444
eventTimestamp : Long ,
404
445
userAnonymisation : Boolean
405
446
): Map <String , Any >? {
406
- return session!! .getSessionContext (
447
+ return session!! .getAndUpdateSessionForEvent (
407
448
eventId,
408
449
eventTimestamp,
409
450
userAnonymisation
0 commit comments