public void IntegrationStartIsAllowedWhenWithinLimit()
        {
            var extension = new IntegrationRequestThrottleExtension();
            var serverMock = this.mocks.StrictMock<ICruiseServer>();
            var config = new ExtensionConfiguration();
            Expect.Call(() => serverMock.IntegrationCompleted += null).IgnoreArguments();
            var startRaiser = Expect
                .Call(() => serverMock.IntegrationStarted += null)
                .IgnoreArguments()
                .GetEventRaiser();
            var eventArgs = new IntegrationStartedEventArgs(null, "TestProject");

            this.mocks.ReplayAll();
            extension.Initialise(serverMock, config);
            startRaiser.Raise(serverMock, eventArgs);

            this.mocks.VerifyAll();
            Assert.AreEqual(IntegrationStartedEventArgs.EventResult.Continue, eventArgs.Result);
        }
        private void server_IntegrationStarted(object sender, IntegrationStartedEventArgs e)
        {
            Log.Debug(string.Format("Checking if '{0}' can integrate", e.ProjectName));
            int numberOfRequests = 0;
            string[] currentRequests = new string[0];
            lock (updateLock)
            {
                if (!requests.Contains(e.ProjectName)) requests.Add(e.ProjectName);
                numberOfRequests = requests.Count;
                currentRequests = requests.ToArray();
            }
            if (numberOfRequests <= numberOfRequestsAllowed)
            {
                Log.Debug(string.Format("'{0}' can integrate", e.ProjectName));
                e.Result = IntegrationStartedEventArgs.EventResult.Continue;
            }
            else
            {
                Log.Debug(string.Format("'{0}' is delayed - number of requests ({1}) has been exceeded ({2})",
                    e.ProjectName,
                    numberOfRequestsAllowed,
                    numberOfRequests));
                bool isAllowed = false;
                for (int loop = 0; loop < numberOfRequestsAllowed; loop++)
                {
                    if (currentRequests[loop] == e.ProjectName)
                    {
                        isAllowed = true;
                        break;
                    }
                }

                if (isAllowed)
                {
                    e.Result = IntegrationStartedEventArgs.EventResult.Continue;
                }
                else
                {
                    e.Result = IntegrationStartedEventArgs.EventResult.Delay;
                }
            }
        }
Пример #3
0
 /// <summary>
 /// Fires the IntegrationStarted event.
 /// </summary>
 /// <param name="request">The integration request.</param>
 protected virtual IntegrationStartedEventArgs.EventResult FireIntegrationStarted(IntegrationRequest request)
 {
     IntegrationStartedEventArgs.EventResult result = IntegrationStartedEventArgs.EventResult.Continue;
     if (IntegrationStarted != null)
     {
         IntegrationStartedEventArgs args = new IntegrationStartedEventArgs(request,
             project.Name);
         IntegrationStarted(this, args);
         result = args.Result;
     }
     return result;
 }
Пример #4
0
 /// <summary>
 /// Pass this event onto any listeners.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="args"></param>
 private void OnIntegrationStarted(object sender, IntegrationStartedEventArgs args)
 {
     args.Result = FireIntegrationStarted(args.Request, args.ProjectName);
 }
        public void IntegrationIsSuccessfulWhenSufficientSpace()
        {
            // Initialise the file system
            var fileSystem = mocks.DynamicMock<IFileSystem>();
            SetupResult.For(fileSystem.GetFreeDiskSpace("c:\\"))
                .Return(104857600);

            // Initialise the server
            var server = mocks.DynamicMock<ICruiseServer>();
            SetupResult.For(server.RetrieveService(typeof(IFileSystem)))
                .Return(fileSystem);
            server.IntegrationStarted += null;
            LastCall.IgnoreArguments();
            var eventRaiser = LastCall.GetEventRaiser();

            // Initialise the extension
            var extension = new DiskSpaceMonitorExtension();
            var configuration = new ExtensionConfiguration();
            configuration.Items = new XmlElement[] {
                CreateSizeElement("Mb", 1, "C:\\")
            };
            mocks.ReplayAll();

            // Run the actual test
            extension.Initialise(server, configuration);
            var args = new IntegrationStartedEventArgs(null, "Project 1");
            eventRaiser.Raise(null, args);
            Assert.AreEqual(IntegrationStartedEventArgs.EventResult.Continue, args.Result);
        }
        public void IntegrationStartAllowedAtTopOfQueue()
        {
            var extension = new IntegrationRequestThrottleExtension();
            var serverMock = this.mocks.StrictMock<ICruiseServer>();
            var config = new ExtensionConfiguration();
            var completeRaiser = Expect
                .Call(() => serverMock.IntegrationCompleted += null)
                .IgnoreArguments()
                .GetEventRaiser();
            var startRaiser = Expect
                .Call(() => serverMock.IntegrationStarted += null)
                .IgnoreArguments()
                .GetEventRaiser();
            var eventArgs = new IntegrationStartedEventArgs(null, "TestProject");

            this.mocks.ReplayAll();
            extension.Initialise(serverMock, config);
            extension.NumberOfRequestsAllowed = 1;
            startRaiser.Raise(serverMock, new IntegrationStartedEventArgs(null, "First"));
            startRaiser.Raise(serverMock, eventArgs);
            startRaiser.Raise(serverMock, new IntegrationStartedEventArgs(null, "Third"));
            completeRaiser.Raise(
                serverMock,
                new IntegrationCompletedEventArgs(null, "First", IntegrationStatus.Success));
            startRaiser.Raise(serverMock, eventArgs);

            this.mocks.VerifyAll();
            Assert.AreEqual(IntegrationStartedEventArgs.EventResult.Continue, eventArgs.Result);
        }