示例#1
0
        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")));
        }
示例#2
0
        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");
        }
示例#3
0
        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);
        }
示例#4
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);
        }
示例#7
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);
        }
示例#8
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"));
        }