示例#1
0
        /// <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);
        }
示例#4
0
        /// <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);
        }