/// <summary> /// Triggers a build on the server and waits for the build to complete. /// </summary> /// <param name="projectName">The name of the project to build.</param> /// <param name="parameters">The parameters.</param> /// <returns>The status of the project.</returns> public ProjectStatus TriggerBuildAndWait(string projectName, params NameValuePair[] parameters) { // Generate the request var completionEvent = this.FindCompletionEvent(projectName); var request = new BuildIntegrationRequest { ProjectName = projectName, BuildValues = new List <NameValuePair>(parameters) }; // Attempt to force the build ValidateResponse(this.server.ForceBuild(request)); // Wait for the build to complete (or time-out) if (!completionEvent.WaitOne(this.TimeoutLength, false)) { // Attempt to cancel the build and tell the caller that we timed-out ValidateResponse(this.server.AbortBuild(request)); throw new HarnessException("Build did not complete within the time-out period"); } // Return the project status var status = ValidateResponse(this.server.GetProjectStatus(request)); return(status.Projects.Single(p => p.Name == projectName)); }
public void ToStringSerialisesAllValues() { BuildIntegrationRequest request = new BuildIntegrationRequest(); request.Identifier = "identifier"; request.ProjectName = "projectName"; request.ServerName = "serverName"; request.SessionToken = "sessionToken"; request.SourceName = "sourceName"; request.Timestamp = DateTime.Now; request.BuildCondition = BuildCondition.IfModificationExists; request.AddBuildValue("value1", "actual value"); string actual = request.ToString(); string expected = string.Format(System.Globalization.CultureInfo.CurrentCulture, "<integrationMessage xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + "timestamp=\"{4:yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz}\" identifier=\"{0}\" server=\"{1}\" source=\"{2}\" session=\"{3}\" project=\"{5}\" condition=\"{6}\">" + "<buildValue name=\"value1\" value=\"actual value\" />" + "</integrationMessage>", request.Identifier, request.ServerName, request.SourceName, request.SessionToken, request.Timestamp, request.ProjectName, request.BuildCondition); Assert.AreEqual(expected, actual); }
public void AddBuildValueAddsToUnderlyingList() { BuildIntegrationRequest request = new BuildIntegrationRequest(); request.AddBuildValue("value1", "actual value"); string actual = NameValuePair.FindNamedValue(request.BuildValues, "value1"); Assert.AreEqual("actual value", actual); }
/// <summary> /// Requests the specified project name. /// </summary> /// <param name="projectName">Name of the project.</param> /// <param name="integrationRequest">The integration request.</param> /// <remarks></remarks> public void Request(string projectName, IntegrationRequest integrationRequest) { BuildIntegrationRequest request = new BuildIntegrationRequest(null, projectName); request.BuildCondition = integrationRequest.BuildCondition; Response resp = cruiseServer.ForceBuild(request); ValidateResponse(resp); }
public void GetSetAllPropertiesWorks() { BuildIntegrationRequest request = new BuildIntegrationRequest(); var values = new List <NameValuePair>(); request.BuildCondition = BuildCondition.IfModificationExists; request.BuildValues = values; Assert.AreSame(values, request.BuildValues); Assert.AreEqual(BuildCondition.IfModificationExists, request.BuildCondition, "BuildCondition fails the get/set test"); }
public void InitialiseRequestWithSessionSetsTheCorrectValues() { string sessionToken = "the session"; DateTime now = DateTime.Now; BuildIntegrationRequest request = new BuildIntegrationRequest(sessionToken); Assert.IsFalse(string.IsNullOrEmpty(request.Identifier), "Identifier was not set"); Assert.AreEqual(Environment.MachineName, request.SourceName, "Source name doesn't match the machine name"); Assert.AreEqual(sessionToken, request.SessionToken, "SessionToken doesn't match the input token"); Assert.IsTrue((now <= request.Timestamp), "Timestamp was not set"); }
public void ToStringSerialisesDefaultValues() { BuildIntegrationRequest request = new BuildIntegrationRequest(); string actual = request.ToString(); string expected = string.Format(System.Globalization.CultureInfo.CurrentCulture, "<integrationMessage xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + "timestamp=\"{2:yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz}\" identifier=\"{0}\" source=\"{1}\" condition=\"{3}\" />", request.Identifier, request.SourceName, request.Timestamp, request.BuildCondition); Assert.AreEqual(expected, actual); }
/// <summary> /// Sends a build request to the server. /// </summary> /// <param name="projectName">The name of the project to use.</param> /// <param name="integrationRequest"></param> public override void Request(string projectName, IntegrationRequest integrationRequest) { if (string.IsNullOrEmpty(projectName)) { throw new ArgumentNullException("projectName"); } BuildIntegrationRequest request = new BuildIntegrationRequest(SessionToken, projectName); request.BuildCondition = integrationRequest.BuildCondition; request.ServerName = TargetServer; var resp = this.connection.SendMessage("ForceBuild", request); ValidateResponse(resp); }
public void InitialiseRequestWithSessionAndProjectSetsTheCorrectValues() { string sessionToken = "the session"; string projectName = "the project"; DateTime now = DateTime.Now; BuildIntegrationRequest request = new BuildIntegrationRequest(sessionToken, projectName); using (new AssertionScope()) { request.Identifier.Should().NotBeNullOrEmpty("Identifier should be set"); request.SourceName.Should().BeEquivalentTo(Environment.MachineName, "SourceName should match the machine name"); request.SessionToken.Should().BeEquivalentTo(sessionToken, "SessionToken should match the input token"); request.ProjectName.Should().BeEquivalentTo(projectName, "ProjectName should match the input project name"); request.Timestamp.Should().Be(now, "Timestamp must be set"); } }
/// <summary> /// Forces a build for the named project with some parameters. /// </summary> /// <param name="projectName">project to force</param> /// <param name="parameters">The parameters.</param> /// <param name="condition">The condition.</param> public override void ForceBuild(string projectName, List <NameValuePair> parameters, BuildCondition condition) { if (string.IsNullOrEmpty(projectName)) { throw new ArgumentNullException("projectName"); } BuildIntegrationRequest request = new BuildIntegrationRequest(SessionToken, projectName); request.BuildCondition = condition; request.BuildValues = parameters; request.ServerName = TargetServer; request.DisplayName = this.DisplayName; var resp = this.connection.SendMessage("ForceBuild", request); ValidateResponse(resp); }