public void TelemetryStopAnEventWithoutStartingItBeforehand() { Telemetry telemetry = new Telemetry() { ClientId = "a1b2c3d4" }; // To isolate the test environment, we do not use a singleton here var myReceiver = new MyReceiver(); telemetry.RegisterReceiver(myReceiver.OnEvents); var reqId = telemetry.GenerateNewRequestId(); try { var apiEvent = new ApiEvent() { Authority = new Uri("https://login.microsoftonline.com"), AuthorityType = "Aad" }; telemetry.StartEvent(reqId, apiEvent); var uiEvent = new UiEvent(); // Forgot to start this event //telemetry.StartEvent(reqId, uiEvent); // Now attempting to stop a never-started event telemetry.StopEvent(reqId, uiEvent); // This line will not cause any exception. The implementation simply ignores it. telemetry.StopEvent(reqId, apiEvent); } finally { telemetry.Flush(reqId); Assert.IsTrue(telemetry.CompletedEvents.IsEmpty && telemetry.EventsInProgress.IsEmpty); // No memory leak here } Assert.IsNull(myReceiver.EventsReceived.Find(anEvent => // Expect NOT finding such an event anEvent[EventBase.EventNameKey].EndsWith("ui_event"))); }
public void TelemetryContainsDefaultEventAsFirstEvent() { Telemetry telemetry = new Telemetry() { ClientId = "a1b2c3d4" }; // To isolate the test environment, we do not use a singleton here var myReceiver = new MyReceiver(); telemetry.RegisterReceiver(myReceiver.OnEvents); var reqId = telemetry.GenerateNewRequestId(); try { var anEvent = new UiEvent(); telemetry.StartEvent(reqId, anEvent); telemetry.StopEvent(reqId, anEvent); } finally { telemetry.Flush(reqId); } Assert.IsTrue(myReceiver.EventsReceived[0][EventBase.EventNameKey].EndsWith("default_event")); Assert.IsTrue(myReceiver.EventsReceived[1][EventBase.EventNameKey].EndsWith("ui_event")); Assert.AreNotEqual(myReceiver.EventsReceived[1][EventBase.ElapsedTimeKey], "-1"); }
public void TelemetrySkipEventsIfApiEventWasSuccessful() { Telemetry telemetry = new Telemetry(); // To isolate the test environment, we do not use a singleton here telemetry.TelemetryOnFailureOnly = true; var myReceiver = new MyReceiver(); telemetry.RegisterReceiver(myReceiver.OnEvents); var reqId = telemetry.GenerateNewRequestId(); try { var e1 = new ApiEvent() { Authority = new Uri("https://login.microsoftonline.com"), AuthorityType = "Aad" }; telemetry.StartEvent(reqId, e1); // do some stuff... e1.WasSuccessful = true; telemetry.StopEvent(reqId, e1); var e2 = new UiEvent() { UserCancelled = false }; telemetry.StartEvent(reqId, e2); telemetry.StopEvent(reqId, e2); } finally { telemetry.Flush(reqId); } Assert.AreEqual(0, myReceiver.EventsReceived.Count); reqId = telemetry.GenerateNewRequestId(); try { var e1 = new ApiEvent() { Authority = new Uri("https://login.microsoftonline.com"), AuthorityType = "Aad" }; telemetry.StartEvent(reqId, e1); // do some stuff... e1.WasSuccessful = false; // mimic an unsuccessful event, so that this batch should be dispatched telemetry.StopEvent(reqId, e1); var e2 = new UiEvent() { UserCancelled = true }; telemetry.StartEvent(reqId, e2); telemetry.StopEvent(reqId, e2); } finally { telemetry.Flush(reqId); } Assert.IsTrue(myReceiver.EventsReceived.Count > 0); }
public void TelemetryPublicApiSample() { var telemetry = Telemetry.GetInstance(); var receiver = new MyReceiver(); telemetry.RegisterReceiver(receiver.OnEvents); // Or you can use a one-liner: Telemetry.GetInstance().RegisterReceiver(new MyReceiver().OnEvents); }
public void AuthorityNotInTrustedHostList_AuthorityIsSetAsNullValueTest() { Telemetry telemetry = new Telemetry(); // To isolate the test environment, we do not use a singleton here var myReceiver = new MyReceiver(); telemetry.RegisterReceiver(myReceiver.OnEvents); telemetry.ClientId = "a1b3c3d4"; var reqId = telemetry.GenerateNewRequestId(); try { var e1 = new ApiEvent() { Authority = new Uri("https://login.microsoftonline.com"), AuthorityType = "Aad" }; telemetry.StartEvent(reqId, e1); // do some stuff... e1.WasSuccessful = true; // Authority in trusted host list, should return authority with scrubbed tenant if (e1.ContainsKey(ApiEvent.AuthorityKey)) { Assert.AreEqual("https://login.microsoftonline.com/<tenant>", e1[ApiEvent.AuthorityKey]); } telemetry.StopEvent(reqId, e1); // Authority host not in trusted host list, should return null var e2 = new ApiEvent() { Authority = new Uri("https://login.contoso.com"), AuthorityType = "Aad" }; telemetry.StartEvent(reqId, e2); // do some stuff... e2.WasSuccessful = true; if (e2.ContainsKey(ApiEvent.AuthorityKey)) { Assert.AreEqual(null, e2[ApiEvent.AuthorityKey]); } telemetry.StopEvent(reqId, e2); } finally { telemetry.Flush(reqId); } Assert.IsTrue(myReceiver.EventsReceived.Count > 0); }
public void PiiLoggingEnabledTrue_TenantAndUserIdHashedTest() { Telemetry telemetry = new Telemetry(); // To isolate the test environment, we do not use a singleton here var myReceiver = new MyReceiver(); telemetry.RegisterReceiver(myReceiver.OnEvents); Logger.PiiLoggingEnabled = true; telemetry.ClientId = "a1b3c3d4"; var reqId = telemetry.GenerateNewRequestId(); try { var e1 = new ApiEvent() { Authority = new Uri("https://login.microsoftonline.com"), AuthorityType = "Aad", TenantId = TenantId, UserId = UserId }; telemetry.StartEvent(reqId, e1); // do some stuff... e1.WasSuccessful = true; // TenantId and UserId are hashed if (e1.ContainsKey(ApiEvent.TenantIdKey)) { Assert.AreNotEqual(null, e1[ApiEvent.TenantIdKey]); Assert.AreNotEqual(TenantId, e1[ApiEvent.TenantIdKey]); } if (e1.ContainsKey(ApiEvent.UserIdKey)) { Assert.AreNotEqual(null, e1[ApiEvent.UserIdKey]); Assert.AreNotEqual(UserId, e1[ApiEvent.UserIdKey]); } telemetry.StopEvent(reqId, e1); } finally { telemetry.Flush(reqId); } Assert.IsTrue(myReceiver.EventsReceived.Count > 0); }
public void TelemetryInternalApiSample() { Telemetry telemetry = new Telemetry(); // To isolate the test environment, we do not use a singleton here var myReceiver = new MyReceiver(); telemetry.RegisterReceiver(myReceiver.OnEvents); telemetry.ClientId = "a1b3c3d4"; var reqId = telemetry.GenerateNewRequestId(); try { var e1 = new ApiEvent() { Authority = new Uri("https://login.microsoftonline.com"), AuthorityType = "Aad" }; telemetry.StartEvent(reqId, e1); // do some stuff... e1.WasSuccessful = true; telemetry.StopEvent(reqId, e1); var e2 = new HttpEvent() { HttpPath = new Uri("https://contoso.com"), UserAgent = "SomeUserAgent", QueryParams = "?a=1&b=2" }; telemetry.StartEvent(reqId, e2); // do some stuff... e2.HttpResponseStatus = 200; telemetry.StopEvent(reqId, e2); } finally { telemetry.Flush(reqId); } Assert.IsTrue(myReceiver.EventsReceived.Count > 0); }
public void TelemetryStartAnEventWithoutStoppingItLater() // Such event(s) becomes an orphaned event { Telemetry telemetry = new Telemetry() { ClientId = "a1b2c3d4" }; // To isolate the test environment, we do not use a singleton here var myReceiver = new MyReceiver(); telemetry.RegisterReceiver(myReceiver.OnEvents); var reqId = telemetry.GenerateNewRequestId(); try { var apiEvent = new ApiEvent() { Authority = new Uri("https://login.microsoftonline.com"), AuthorityType = "Aad" }; telemetry.StartEvent(reqId, apiEvent); var uiEvent = new UiEvent(); telemetry.StartEvent(reqId, uiEvent); // Forgot to stop this event. A started event which never got stopped, becomes an orphan. //telemetry.StopEvent(reqId, uiEvent); telemetry.StopEvent(reqId, apiEvent); } finally { Assert.IsFalse(telemetry.CompletedEvents.IsEmpty); // There are completed event(s) inside Assert.IsFalse(telemetry.EventsInProgress.IsEmpty); // There is an orphaned event inside telemetry.Flush(reqId); Assert.IsTrue(telemetry.CompletedEvents.IsEmpty); // Completed event(s) have been dispatched Assert.IsTrue(telemetry.EventsInProgress.IsEmpty); // The orphaned event is also dispatched, so there is no memory leak here. } Assert.IsNotNull(myReceiver.EventsReceived.Find(anEvent => // Expect finding such an event anEvent[EventBase.EventNameKey].EndsWith("ui_event") && anEvent[EventBase.ElapsedTimeKey] == "-1")); }