From 0391851a470e2b7b6afa84f65d74ac459b70d513 Mon Sep 17 00:00:00 2001 From: Max Shekhovtcov Date: Wed, 10 Jun 2015 08:38:26 -0700 Subject: [PATCH] Adding diagnostic tracing to parsing of ai_session cookie --- .../CheckinTests/Context/Session.tests.ts | 55 ++++++++++++++----- JavaScript/JavaScriptSDK/Context/Session.ts | 28 ++++++---- 2 files changed, 59 insertions(+), 24 deletions(-) diff --git a/JavaScript/JavaScriptSDK.Tests/CheckinTests/Context/Session.tests.ts b/JavaScript/JavaScriptSDK.Tests/CheckinTests/Context/Session.tests.ts index ea24cfa5c..bd1955f28 100644 --- a/JavaScript/JavaScriptSDK.Tests/CheckinTests/Context/Session.tests.ts +++ b/JavaScript/JavaScriptSDK.Tests/CheckinTests/Context/Session.tests.ts @@ -128,8 +128,8 @@ class SessionContextTests extends TestClass { }; var testGuid = "00000000-0000-0000-0000-000000000000"; - var acquisitionDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); - var renewalDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); + var acquisitionDate = +new Date(); + var renewalDate = +new Date(); this.setFakeCookie(testGuid, acquisitionDate, renewalDate); @@ -164,8 +164,8 @@ class SessionContextTests extends TestClass { var delta = (Microsoft.ApplicationInsights.Context._SessionManager.renewalSpan + 1); this.clock.tick(delta); // safari crashes without this var cookieTime = +new Date - delta; - var acquisitionDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date(cookieTime)); - var renewalDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date(cookieTime)); + var acquisitionDate = +new Date(cookieTime); + var renewalDate = +new Date(cookieTime); this.setFakeCookie(testGuid, acquisitionDate, renewalDate); @@ -190,8 +190,8 @@ class SessionContextTests extends TestClass { var delta = (Microsoft.ApplicationInsights.Context._SessionManager.acquisitionSpan + 1); this.clock.tick(delta); // safari crashes without this var cookieTime = +new Date - delta; - var acquisitionDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date(cookieTime)); - var renewalDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); + var acquisitionDate = +new Date(cookieTime); + var renewalDate = +new Date(); this.setFakeCookie(testGuid, acquisitionDate, renewalDate); @@ -213,8 +213,8 @@ class SessionContextTests extends TestClass { test: () => { // setup var testGuid = "00000000-0000-0000-0000-000000000000"; - var acquisitionDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); - var renewalDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); + var acquisitionDate = +new Date(); + var renewalDate = +new Date(); this.setFakeCookie(testGuid, acquisitionDate, renewalDate); @@ -239,8 +239,8 @@ class SessionContextTests extends TestClass { var delta = (Microsoft.ApplicationInsights.Context._SessionManager.renewalSpan + 1); this.clock.tick(delta); // safari crashes without this var cookieTime = +new Date - delta; - var acquisitionDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date(cookieTime)); - var renewalDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date(cookieTime)); + var acquisitionDate = +new Date(cookieTime); + var renewalDate = +new Date(cookieTime); this.setFakeCookie(testGuid, acquisitionDate, renewalDate); @@ -268,8 +268,8 @@ class SessionContextTests extends TestClass { var delta = (Microsoft.ApplicationInsights.Context._SessionManager.acquisitionSpan + 1); this.clock.tick(delta); // safari crashes without this var cookieTime = +new Date - delta; - var acquisitionDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date(cookieTime)); - var renewalDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); + var acquisitionDate = +new Date(cookieTime); + var renewalDate = +new Date(); this.setFakeCookie(testGuid, acquisitionDate, renewalDate); @@ -291,8 +291,8 @@ class SessionContextTests extends TestClass { test: () => { // setup var testGuid = "00000000-0000-0000-0000-000000000000"; - var acquisitionDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); - var renewalDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); + var acquisitionDate = +new Date(); + var renewalDate = +new Date(); this.setFakeCookie(testGuid, acquisitionDate, renewalDate); @@ -337,6 +337,33 @@ class SessionContextTests extends TestClass { Assert.equal(sessionExpirationMs, sessionManager.config.sessionExpirationMs(), "config sessionExpirationMs is updated correctly"); } }); + + /* Temporarily disabled until we figure out sinon js behavior with Date. + * Problems: + * - new Date normally gives the current date, with sinon - 1970 + * - new Date(NaN) normally throws an exception, with sinon - return undefined + + + this.testCase({ + name: "SessionContext: renewal and aquisition dates from cookie are treated as numbers", + test: () => { + // setup + var testGuid = "00000000-0000-0000-0000-000000000000"; + var acquisitionDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); + var renewalDate = Microsoft.ApplicationInsights.Util.toISOStringForIE8(new Date()); + + this.setFakeCookie(testGuid, acquisitionDate, renewalDate); + + // act + var sessionManager = new Microsoft.ApplicationInsights.Context._SessionManager(null,(t) => { this.results.push(t); }); + sessionManager.update(); + + // TODO: CHECK THAT A PARSING ERROR OCCURRED AND WE SENT A DIAGNOSTIC TRACE + + this.restoreFakeCookie(); + } + }); + */ } private setFakeCookie(id, acqDate, renewalDate) { diff --git a/JavaScript/JavaScriptSDK/Context/Session.ts b/JavaScript/JavaScriptSDK/Context/Session.ts index a68d9b4a5..bf3519ec6 100644 --- a/JavaScript/JavaScriptSDK/Context/Session.ts +++ b/JavaScript/JavaScriptSDK/Context/Session.ts @@ -95,16 +95,24 @@ module Microsoft.ApplicationInsights.Context { this.automaticSession.id = params[0]; } - if (params.length > 1) { - var acq = +params[1]; - this.automaticSession.acquisitionDate = +new Date(acq); - this.automaticSession.acquisitionDate = this.automaticSession.acquisitionDate > 0 ? this.automaticSession.acquisitionDate : 0; - } - - if (params.length > 2) { - var renewal = +params[2]; - this.automaticSession.renewalDate = +new Date(renewal); - this.automaticSession.renewalDate = this.automaticSession.renewalDate > 0 ? this.automaticSession.renewalDate : 0; + try { + if (params.length > 1) { + var acq = +params[1]; + this.automaticSession.acquisitionDate = +new Date(acq); + this.automaticSession.acquisitionDate = this.automaticSession.acquisitionDate > 0 ? this.automaticSession.acquisitionDate : 0; + } + + if (params.length > 2) { + var renewal = +params[2]; + this.automaticSession.renewalDate = +new Date(renewal); + this.automaticSession.renewalDate = this.automaticSession.renewalDate > 0 ? this.automaticSession.renewalDate : 0; + } + } catch (e) { + _InternalLogging.throwInternalNonUserActionable(LoggingSeverity.WARNING, "Error parsing ai_session cookie, session will be reset: " + JSON.stringify(e)); + } + + if (this.automaticSession.renewalDate == 0) { + _InternalLogging.throwInternalNonUserActionable(LoggingSeverity.WARNING, "AI sessoin renewal date is 0, session will be reset."); } }