Example #1
0
        public static void Main(string[] args)
        {
            var configBuilder = new ConfigurationBuilder();
            var config        = configBuilder.AddJsonFile("appsettings.json").Build();

            var serviceBusSettings = new ServiceBusSettings
            {
                ConnectionString   = config.GetSection("ServiceBus:ConnectionString").Value,
                QueueName          = config.GetSection("ServiceBus:QueueName").Value,
                PrefetchCount      = int.Parse(config.GetSection("Vsts:QueuePrefetchCount").Value),
                MaxConcurrentCalls = int.Parse(config.GetSection("Vsts:QueueMaxConcurrentCalls").Value)
            };

            var serviceBusQueueMessageHandlerSettings = new ServiceBusQueueMessageHandlerSettings
            {
                MaxRetryAttempts      = int.Parse(config.GetSection("Vsts:MaxRetryAttempts").Value),
                AbandonDelayMsecs     = int.Parse(config.GetSection("Vsts:AbandonDelayMsecs").Value),
                MaxAbandonDelayMsecs  = int.Parse(config.GetSection("Vsts:MaxAbandonDelayMsecs").Value),
                LockRefreshDelayMsecs = int.Parse(config.GetSection("Vsts:LockRefreshDelayMsecs").Value),
                TimeLineNamePrefix    = "Test",
                WorkerName            = "MicroService"
            };

            var cancellationTokenSource = new CancellationTokenSource();

            var sampleLogger                   = new SampleLogger();
            var clientScheduleHandler          = new ClientScheduleHandler(sampleLogger);
            var serviceBusQueueMessageListener = new ServiceBusQueueMessageListener(serviceBusSettings);
            var serviceBusQueueMessageHandler  = new ServiceBusQueueMessageHandler <VstsMessage>(serviceBusQueueMessageListener, clientScheduleHandler, serviceBusQueueMessageHandlerSettings, sampleLogger);

            var clientListener = new VstsRequestListener <VstsMessage>(serviceBusQueueMessageHandler, serviceBusQueueMessageListener, sampleLogger);

            Console.WriteLine(
                "Starting the VSTS request listener on queue '{0}' with prefetch count '{1}', max concurrent calls '{2}' and message handler settings [{3}]",
                serviceBusSettings.QueueName,
                serviceBusSettings.PrefetchCount,
                serviceBusSettings.MaxConcurrentCalls,
                serviceBusQueueMessageHandlerSettings);
            Console.WriteLine("Press any key to exit after receiving all the messages ...");
            clientListener.Start(cancellationTokenSource.Token);

            Console.ReadKey();

            Console.WriteLine("Shutting down VSTS request listener ...");
        }
Example #2
0
        private static async Task ProcessTestMessage(MockServiceBusMessage mockServiceBusMessage = null, MockServiceBusQueueMessageListener mockMessageListener = null, MockTaskClient mockTaskClient = null, MockVstsHandler handler = null, MockVstsReportingHelper mockReportingHelper = null, IBrokerInstrumentation instrumentation = null, int maxRetryAttempts = 1, IBuildClient mockBuildClient = null, IGitClient mockGitClient = null)
        {
            mockServiceBusMessage = mockServiceBusMessage ?? CreateMockMessage(CreateValidTestVstsMessage());
            mockTaskClient        = mockTaskClient ?? new MockTaskClient();
            mockBuildClient       = mockBuildClient ?? new MockBuildClient()
            {
                MockBuild = new Build()
                {
                    Status = BuildStatus.InProgress
                }
            };
            mockReportingHelper = mockReportingHelper ?? new MockVstsReportingHelper(new TestVstsMessage());
            var mockReleaseClient = new MockReleaseClient()
            {
                MockRelease = new Release()
                {
                    Status = ReleaseStatus.Active
                }
            };

            handler = handler ?? new MockVstsHandler {
                MockExecuteFunc = (vstsMessage) => Task.FromResult(new VstsScheduleResult()
                {
                    Message = "(test) mock execute requested", ScheduledId = "someId", ScheduleFailed = false
                })
            };
            instrumentation = instrumentation ?? new TraceBrokerInstrumentation();
            var settings = new ServiceBusQueueMessageHandlerSettings {
                MaxRetryAttempts = maxRetryAttempts, TimeLineNamePrefix = "someTimeline", WorkerName = "someWorker"
            };

            mockMessageListener = mockMessageListener ?? new MockServiceBusQueueMessageListener();
            var schedulingBroker = new ServiceBusQueueMessageHandler <TestVstsMessage>(queueClient: mockMessageListener, baseInstrumentation: instrumentation, scheduleHandler: handler, settings: settings);

            schedulingBroker.CreateTaskClient          = (uri, creds, instrumentationHandler, skipRaisePlanEvents) => mockTaskClient;
            schedulingBroker.CreateBuildClient         = (uri, creds) => mockBuildClient;
            schedulingBroker.CreateReleaseClient       = (uri, creds) => mockReleaseClient;
            schedulingBroker.CreateVstsReportingHelper = (vstsMessage, inst, props) => mockReportingHelper;
            var cancelSource = new CancellationTokenSource();
            await schedulingBroker.ReceiveAsync(mockServiceBusMessage, cancelSource.Token);
        }
        private static async Task ProcessTestMessage(MockServiceBusMessage mockServiceBusMessage = null, MockServiceBusQueueMessageListener mockMessageListener = null, MockTaskClient mockTaskClient = null, MockVstsHandler handler = null, MockJobStatusReportingHelper mockReportingHelper = null, ILogger logger = null, int maxRetryAttempts = 1, IBuildClient mockBuildClient = null)
        {
            mockServiceBusMessage = mockServiceBusMessage ?? CreateMockMessage(CreateValidTestVstsMessage());
            mockTaskClient        = mockTaskClient ?? new MockTaskClient();
            mockBuildClient       = mockBuildClient ?? new MockBuildClient()
            {
                MockBuild = new Build()
                {
                    Status = BuildStatus.InProgress
                }
            };
            mockReportingHelper = mockReportingHelper ?? new MockJobStatusReportingHelper(new TestVstsMessage());
            var mockReleaseClient = new MockReleaseClient()
            {
                MockRelease = new Release()
                {
                    Status = ReleaseStatus.Active
                }
            };

            handler = handler ?? new MockVstsHandler {
                MockExecuteFunc = (vstsMessage) => Task.FromResult(new VstsScheduleResult()
                {
                    Message = "(test) mock execute requested", ScheduledId = "someId", ScheduleFailed = false
                })
            };
            logger = logger ?? new TraceLogger();
            var settings = new ServiceBusQueueMessageHandlerSettings {
                MaxRetryAttempts = maxRetryAttempts, TimeLineNamePrefix = "someTimeline", WorkerName = "someWorker"
            };

            mockMessageListener = mockMessageListener ?? new MockServiceBusQueueMessageListener();
            var schedulingBroker = new TestableServiceBusQueueMessageHandler(mockMessageListener, handler, settings, logger, mockTaskClient, mockBuildClient, mockReportingHelper, mockReleaseClient);
            var cancelSource     = new CancellationTokenSource();
            await schedulingBroker.ReceiveAsync(mockServiceBusMessage, cancelSource.Token);
        }
Example #4
0
 public TestableServiceBusQueueMessageHandler(IServiceBusQueueMessageListener serviceBusQueueMessageListener, IVstsScheduleHandler <TestVstsMessage> handler, ServiceBusQueueMessageHandlerSettings settings, ILogger logger, ITaskClient taskClient, IBuildClient buildClient, IJobStatusReportingHelper jobStatusReportingHelper, IReleaseClient releaseClient)
     : base(serviceBusQueueMessageListener, handler, settings, logger)
 {
     this.taskClient               = taskClient;
     this.buildClient              = buildClient;
     this.releaseClient            = releaseClient;
     this.jobStatusReportingHelper = jobStatusReportingHelper;
 }