public async Task ExecuteExceptionIsInstrumentedTest()
        {
            // given
            var handler = new MockVstsHandler()
            {
                MockExecuteFunc = (msg) => { throw new NotSupportedException(); }
            };
            var traceBrokerInstrumentation = new TraceBrokerInstrumentation();
            var testVstsMessage            = new TestVstsMessage()
            {
                RequestType = RequestType.Execute
            };

            // when
            var instrumentedHandler = new HandlerWithInstrumentation <TestVstsMessage>(traceBrokerInstrumentation, handler);

            Exception actualEx = null;

            try
            {
                await instrumentedHandler.Execute(testVstsMessage, default(CancellationToken));
            }
            catch (NotSupportedException ex)
            {
                actualEx = ex;
            }

            // then
            Assert.IsNotNull(actualEx);
            Assert.AreEqual(1, traceBrokerInstrumentation.Events.Count(x => x.Equals(testVstsMessage.RequestType.ToString())));
            Assert.AreEqual(1, traceBrokerInstrumentation.Events.Count(x => x.Equals(HandlerWithInstrumentation <TestVstsMessage> .HandlerExecuteFailedEventName)));
            Assert.AreEqual(1, traceBrokerInstrumentation.Events.Count(x => x.Equals("NotSupportedException")));
        }
        public async Task MultipleEventsInstrumentedTest()
        {
            // given
            var handler = new MockVstsHandler()
            {
                MockExecuteFunc = (msg) => Task.FromResult(new VstsScheduleResult())
            };
            var traceBrokerInstrumentation = new TraceBrokerInstrumentation();
            var testVstsMessage            = new TestVstsMessage()
            {
                RequestType = RequestType.Execute
            };
            var events = new List <string>();

            // when
            events.Add(string.Format("[{0}] INFO: {1}: {2}", DateTime.UtcNow.ToString("o"), testVstsMessage.RequestType.ToString(), "Processing request"));
            var result = await handler.Execute(testVstsMessage, default(CancellationToken));

            events.Add(string.Format("[{0}] INFO: {1}: {2}: {3}", DateTime.UtcNow.ToString("o"), testVstsMessage.RequestType.ToString(), "Processed request", result.Message));
            var logStream = GenerateStreamFromStringList(events);
            await traceBrokerInstrumentation.HandleEventList(logStream, eventProperties : null, cancellationToken : default(CancellationToken));

            // then
            var requestType = testVstsMessage.RequestType.ToString();
            var logMessages = traceBrokerInstrumentation.Events.First(x => x.Contains(requestType));

            Assert.IsNotNull(logMessages);
            Assert.IsTrue(logMessages.IndexOf(requestType) >= 0);
            Assert.IsTrue(logMessages.Contains("Processing request"));
            Assert.IsTrue(logMessages.Contains("Processed request"));
        }
Ejemplo n.º 3
0
        internal static MockServiceBusMessage CreateMockMessage(TestVstsMessage testMessage)
        {
            var testMessageJson = JsonConvert.SerializeObject(testMessage);
            var mockMessage     = new MockServiceBusMessage {
                BodyObject = testMessageJson
            };

            return(mockMessage);
        }
Ejemplo n.º 4
0
        internal static TestVstsMessage CreateValidTestVstsMessage()
        {
            var testVstsMessage = new TestVstsMessage()
            {
                VstsHub = HubType.Build, VstsUrl = "http://vstsUrl", VstsPlanUrl = "http://vstsPlanUrl", AuthToken = "someToken", ProjectId = Guid.NewGuid(), JobId = Guid.NewGuid(), PlanId = Guid.NewGuid(), BuildProperties = new VstsBuildProperties {
                    SourceControlServerUri = "haha"
                }
            };

            return(testVstsMessage);
        }
Ejemplo n.º 5
0
        internal static TestVstsMessage CreateValidTestVstsMessageForRelease()
        {
            var testVstsMessage = new TestVstsMessage()
            {
                VstsHub = HubType.Release, VstsUrl = "http://vstsUrl", VstsPlanUrl = "http://vstsPlanUrl", AuthToken = "someToken", ProjectId = Guid.NewGuid(), JobId = Guid.NewGuid(), PlanId = Guid.NewGuid(), ReleaseProperties = new VstsReleaseProperties()
                {
                    ReleaseId = 123, ReleaseDefinitionName = "someReleaseDef", ReleaseEnvironmentName = "env123", ReleaseEnvironmentUri = new Uri("foo://bar"), ReleaseName = "someRelease", ReleaseUri = new Uri("foo://bar")
                }
            };

            return(testVstsMessage);
        }
        private static async Task TestReportJobStarted(ReleaseStatus releaseStatus, bool returnNullRelease, int expectedEventCount)
        {
            // given
            VstsMessage vstsContext = new TestVstsMessage
            {
                VstsHub           = HubType.Release,
                VstsUri           = new Uri("http://vstsUri"),
                VstsPlanUri       = new Uri("http://vstsPlanUri"),
                ReleaseProperties = new VstsReleaseProperties(),
            };

            var mockBuildClient = new MockBuildClient()
            {
                MockBuild = new Build()
                {
                    Status = BuildStatus.None
                },
                ReturnNullBuild = false,
            };
            var mockReleaseClient = new MockReleaseClient()
            {
                MockRelease = new Release()
                {
                    Status = releaseStatus
                },
                ReturnNullRelease = returnNullRelease,
            };
            var mockTaskClient  = new MockTaskClient();
            var reportingHelper = new VstsReportingHelper(vstsContext, new TraceBrokerInstrumentation(), new Dictionary <string, string>())
            {
                CreateReleaseClient  = (uri, s) => ReturnMockReleaseClientIfUrlValid(uri, vstsContext, mockReleaseClient),
                CreateBuildClient    = (uri, s) => mockBuildClient,
                CreateTaskHttpClient = (uri, s, i, r) => mockTaskClient
            };

            // when
            await reportingHelper.ReportJobStarted(DateTime.UtcNow, "test message", default(CancellationToken));

            // then
            Assert.AreEqual(expectedEventCount, mockTaskClient.EventsReceived.Count);
            if (expectedEventCount != 0)
            {
                var taskEvent = mockTaskClient.EventsReceived[0] as JobStartedEvent;
                Assert.IsNotNull(taskEvent);
            }
        }
Ejemplo n.º 7
0
        private static async Task TestReportJobStarted(ReleaseStatus releaseStatus, bool returnNullRelease, int expectedEventCount)
        {
            // given
            VstsMessage vstsContext = new TestVstsMessage
            {
                VstsHub           = HubType.Release,
                VstsUri           = new Uri("http://vstsUri"),
                VstsPlanUri       = new Uri("http://vstsPlanUri"),
                ReleaseProperties = new VstsReleaseProperties(),
            };

            var mockBuildClient = new MockBuildClient()
            {
                MockBuild = new Build()
                {
                    Status = BuildStatus.None
                },
                ReturnNullBuild = false,
            };
            var mockReleaseClient = new MockReleaseClient()
            {
                MockRelease = new Release()
                {
                    Status = releaseStatus
                },
                ReturnNullRelease = returnNullRelease,
            };
            var mockTaskClient = new MockTaskClient();

            Assert.AreNotEqual(vstsContext.VstsUri, vstsContext.VstsPlanUri, "need to be different to ensure we can test correct one is used");
            var reportingHelper = new TestableJobStatusReportingHelper(vstsContext, new TraceLogger(), mockTaskClient, mockReleaseClient, mockBuildClient);

            // when
            await reportingHelper.ReportJobStarted(DateTime.UtcNow, "test message", default(CancellationToken));

            // then
            Assert.AreEqual(expectedEventCount, mockTaskClient.EventsReceived.Count);
            if (expectedEventCount != 0)
            {
                var taskEvent = mockTaskClient.EventsReceived[0] as JobStartedEvent;
                Assert.IsNotNull(taskEvent);
            }
        }
        public async Task ExecuteIsInstrumentedTest()
        {
            // given
            var handler = new MockVstsHandler()
            {
                MockExecuteFunc = (msg) => Task.FromResult(new VstsScheduleResult())
            };
            var traceBrokerInstrumentation = new TraceBrokerInstrumentation();
            var testVstsMessage            = new TestVstsMessage()
            {
                RequestType = RequestType.Execute
            };

            // when
            var instrumentedHandler = new HandlerWithInstrumentation <TestVstsMessage>(traceBrokerInstrumentation, handler);
            await instrumentedHandler.Execute(testVstsMessage, default(CancellationToken));

            // then
            Assert.AreEqual(2, traceBrokerInstrumentation.Events.Count(x => x.Equals(testVstsMessage.RequestType.ToString())));
        }
Ejemplo n.º 9
0
        private static async Task TestReportJobStarted(BuildStatus buildStatus, bool returnNullBuild, int expectedEventCount)
        {
            // given
            VstsMessage vstsContext = new TestVstsMessage
            {
                VstsHub         = HubType.Build,
                VstsUri         = new Uri("http://vstsUri"),
                VstsPlanUri     = new Uri("http://vstsPlanUri"),
                BuildProperties = new VstsBuildProperties(),
            };

            var mockBuildClient = new MockBuildClient()
            {
                MockBuild = new Build()
                {
                    Status = buildStatus
                },
                ReturnNullBuild = returnNullBuild,
            };
            var mockTaskClient    = new MockTaskClient();
            var mockReleaseClient = new MockReleaseClient();
            var reportingHelper   = new TestableJobStatusReportingHelper(vstsContext, new TraceLogger(), mockTaskClient, mockReleaseClient, mockBuildClient)
            {
                //CreateBuildClient = (uri, s) => ReportingBrokerJobCompletedTests.ReturnMockBuildClientIfUrlValid(uri, vstsContext, mockBuildClient),
                //CreateReleaseClient = (uri, t) => mockReleaseClient
            };

            // when
            await reportingHelper.ReportJobStarted(DateTime.UtcNow, "test message", default(CancellationToken));

            // then
            Assert.AreEqual(expectedEventCount, mockTaskClient.EventsReceived.Count);
            if (expectedEventCount != 0)
            {
                var taskEvent = mockTaskClient.EventsReceived[0] as JobStartedEvent;
                Assert.IsNotNull(taskEvent);
            }
        }
Ejemplo n.º 10
0
        private async Task TestReportJobCompleted(BuildStatus buildStatus, bool returnNullBuild, bool isPassed, int expectedEventCount, TaskResult expectedResult, int expectedRecordCount = 0, string timeLineRecordName = null)
        {
            // given
            Guid        parentId    = Guid.NewGuid();
            Guid        childId     = Guid.NewGuid();
            VstsMessage vstsContext = new TestVstsMessage
            {
                JobId           = parentId,
                VstsHub         = HubType.Build,
                VstsUri         = new Uri("http://vstsUri"),
                VstsPlanUri     = new Uri("http://vstsPlanUri"),
                BuildProperties = new VstsBuildProperties(),
            };
            var mockBuildClient = new MockBuildClient()
            {
                MockBuild = new Build()
                {
                    Status = buildStatus
                },
                ReturnNullBuild = returnNullBuild,
            };
            var mockReleaseClient = new MockReleaseClient()
            {
                MockRelease = new Release()
                {
                    Status = ReleaseStatus.Undefined
                },
                ReturnNullRelease = false,
            };

            var timelineRecords = new List <Microsoft.TeamFoundation.DistributedTask.WebApi.TimelineRecord>
            {
                new Microsoft.TeamFoundation.DistributedTask.WebApi.TimelineRecord()
                {
                    Id = parentId
                },
                new Microsoft.TeamFoundation.DistributedTask.WebApi.TimelineRecord()
                {
                    Id       = childId,
                    ParentId = parentId
                },
                new Microsoft.TeamFoundation.DistributedTask.WebApi.TimelineRecord()
                {
                    // Should be ignored
                    Id = Guid.NewGuid()
                }
            };

            if (!string.IsNullOrEmpty(timeLineRecordName))
            {
                timelineRecords.Add(new Microsoft.TeamFoundation.DistributedTask.WebApi.TimelineRecord()
                {
                    Id   = Guid.NewGuid(),
                    Name = timeLineRecordName
                });
            }

            var mockTaskHttpClient = new MockTaskClient()
            {
                GetRecordsReturnCollection = timelineRecords
            };

            var reportingHelper = new VstsReportingHelper(vstsContext, new TraceBrokerInstrumentation(), new Dictionary <string, string>(), timeLineRecordName)
            {
                CreateBuildClient    = (uri, s) => ReturnMockBuildClientIfUrlValid(uri, vstsContext, mockBuildClient),
                CreateReleaseClient  = (uri, s) => mockReleaseClient,
                CreateTaskHttpClient = (uri, s, i, r) => mockTaskHttpClient
            };

            // when
            await reportingHelper.ReportJobCompleted(DateTime.UtcNow, "test message", isPassed, default(CancellationToken));

            // then
            Assert.AreEqual(expectedEventCount, mockTaskHttpClient.EventsReceived.Count);
            if (expectedEventCount != 0)
            {
                var taskEvent = mockTaskHttpClient.EventsReceived[0] as JobCompletedEvent;
                Assert.IsNotNull(taskEvent);
                Assert.AreEqual(taskEvent.Result, expectedResult);
            }

            Assert.AreEqual(expectedRecordCount, mockTaskHttpClient.TimelineRecordsUpdated.Count);
            if (expectedRecordCount != 0)
            {
                var records = string.IsNullOrEmpty(timeLineRecordName) ?
                              mockTaskHttpClient.TimelineRecordsUpdated.Where(rec => rec.Id == parentId || rec.Id == childId).ToList() :
                              mockTaskHttpClient.TimelineRecordsUpdated.Where(rec => rec.Name != null && rec.Name.Equals(timeLineRecordName, StringComparison.OrdinalIgnoreCase)).ToList();
                Assert.AreEqual(expectedRecordCount, records.Count);

                foreach (var record in records)
                {
                    Assert.IsNotNull(record);
                    Assert.AreEqual(expectedResult, record.Result);
                }
            }
        }