public void TimeoutSessionManager_Creates_New_Session_In_A_Thread_Safe_Way() { var timeout = TimeSpan.FromSeconds(2); var sessionManager = new TimeoutSessionManager(null, timeout); Task.Delay(timeout + TimeSpan.FromSeconds(1)).Wait(); Task.WaitAll( Task.Run(() => { for (var i = 0; i < 500; i++) sessionManager.Hit(); }), Task.Run(() => { for (var i = 0; i < 500; i++) sessionManager.Hit(); }), Task.Run(() => { for (var i = 0; i < 500; i++) sessionManager.Hit(); }) ); Task.Delay(timeout + TimeSpan.FromSeconds(1)).Wait(); Task.WaitAll( Task.Run(() => { for (var i = 0; i < 500; i++) sessionManager.Hit(); }), Task.Run(() => { for (var i = 0; i < 500; i++) sessionManager.Hit(); }), Task.Run(() => { for (var i = 0; i < 500; i++) sessionManager.Hit(); }) ); Assert.AreEqual(3, sessionManager.Session.Number); Assert.AreEqual(1500, sessionManager.Session.HitCount); }
public void TimeoutSessionManager_Creates_New_Session_When_Hit_After_Timeout() { var timeout = TimeSpan.FromSeconds(2); var sessionManager = new TimeoutSessionManager(null, timeout); Assert.AreEqual(1, sessionManager.Session.Number); var starting = DateTimeOffset.Now; Task.Delay(timeout + TimeSpan.FromSeconds(1)).Wait(); sessionManager.Hit(); Assert.AreEqual(2, sessionManager.Session.Number); Assert.IsTrue(sessionManager.Session.StartedAt >= starting, "Session StartedAt too early"); Assert.IsTrue(sessionManager.Session.StartedAt <= DateTimeOffset.Now, "Session StartedAt too late"); }