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; } } }
/// <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; }
/// <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); }