public void WaitForRequestShouldBlockUntilNewBuildIsRequested()
        {
            int processedRequests            = 0;
            int processedForcedBuildRequests = 0;
            int processedModExistsRequests   = 0;

            Thread spawningThread = new Thread(new ThreadStart(SpawnNewThreads));

            spawningThread.Start();

            completedThreads = 0;
            while (completedThreads < totalThreads)
            {
                processedRequests++;
                BuildCondition condition = queue.WaitForRequest();
                if (condition == BuildCondition.ForceBuild)
                {
                    processedForcedBuildRequests++;
                }
                else if (condition == BuildCondition.IfModificationExists)
                {
                    processedModExistsRequests++;
                }
                else
                {
                    Assert.Fail("Unexpected build request");
                }
            }

            Assert.IsTrue(spawningThread.Join(30000), "Build request threads did not complete within 30 seconds.");

            Assert.AreEqual(totalThreads * 2, processedRequests, "Not all threads which started, completed.");
            Assert.AreEqual(totalThreads, processedForcedBuildRequests, "Not all force build requests were received.");
            Assert.AreEqual(totalThreads, processedModExistsRequests, "Not all modification exists requests were received.");
        }
        private bool ShouldRunIntegration()
        {
            lock (syncCheck)
            {
                if (this.ShouldForceBuild)
                {
                    this.ShouldForceBuild = false;
                    this.IntegrationResult.BuildCondition = BuildCondition.ForceBuild;
                    return(true);
                }

                BuildCondition ShouldIntegration = _trigger.ShouldRunIntegration();

                if (ShouldIntegration != BuildCondition.NoBuild)
                {
                    try
                    {
                        this.IntegrationResult = resultManager.StartNewIntegration();
                        this.IntegrationResult.BuildCondition = ShouldIntegration;
                        return(true);
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex);
                        return(false);
                    }
                }
                return(false);
            }
        }
        public BuildCondition ShouldRunIntegration()
        {
            BuildCondition buildCondition = InnerTrigger.ShouldRunIntegration();

            if (buildCondition == BuildCondition.NoBuild)
            {
                return(buildCondition);
            }
            IntegrationCompleted();             // reset inner trigger

            try
            {
                ProjectStatus currentStatus = GetCurrentProjectStatus();
                if (lastStatus == null)
                {
                    lastStatus = currentStatus;
                    return(BuildCondition.NoBuild);
                }
                if (currentStatus.LastBuildDate > lastStatus.LastBuildDate && currentStatus.BuildStatus == TriggerStatus)
                {
                    lastStatus = currentStatus;
                    return(buildCondition);
                }
            }
            catch (Exception ex) { }

            return(BuildCondition.NoBuild);
        }
 /// <summary>
 /// Initialise a new <see cref="IntegrationRequest"/>.
 /// </summary>
 /// <param name="buildCondition"></param>
 /// <param name="source"></param>
 /// <param name="userName"></param>
 public IntegrationRequest(BuildCondition buildCondition, string source, string userName)
 {
     this.buildCondition = buildCondition;
     this.source         = source;
     this.requestTime    = DateTime.Now;
     UserName            = userName;
 }
 /// <summary>
 /// Initialise a new <see cref="IntegrationRequest"/>.
 /// </summary>
 /// <param name="buildCondition"></param>
 /// <param name="source"></param>
 /// <param name="userName"></param>
 public IntegrationRequest(BuildCondition buildCondition, string source, string userName)
 {
     this.buildCondition = buildCondition;
     this.source = source;
     this.requestTime = DateTime.Now;
     UserName = userName;
 }
Exemple #6
0
 public void Build([FromBody] BuildCondition buildCondition)
 {
     if (buildCondition.PageCountLimit.HasValue)
     {
         buildCondition.PageCountLimit = DEFAULT_PAGE_COUNT_LIMIT;
     }
 }
 private BuildCondition DetermineBuildCondition(BuildCondition buildCondition)
 {
     if (LastIntegrationResult.IsInitial())
     {
         return BuildCondition.ForceBuild;
     }
     return buildCondition;
 }
 private BuildCondition DetermineBuildCondition(BuildCondition buildCondition)
 {
     if (LastIntegrationResult.IsInitial())
     {
         return(BuildCondition.ForceBuild);
     }
     return(buildCondition);
 }
        /// <summary>
        /// Fires this instance.
        /// </summary>
        /// <returns></returns>
        /// <remarks></remarks>
        public virtual IntegrationRequest Fire()
        {
            BuildCondition buildCondition = ShouldRunIntegration();

            if (buildCondition == BuildCondition.NoBuild)
            {
                return(null);
            }
            return(new IntegrationRequest(buildCondition, Name, null));
        }
 public void RequestBuild(BuildCondition condition)
 {
     lock (this)
     {
         if (request.IsHigherPriority(condition))
         {
             request = new BuildRequest(condition);
             latch.Set();
         }
     }
 }
Exemple #11
0
        public void TestShouldRunIntegrationInnerNoBuild()
        {
            ProjectTriggerFilter TestSubject = new ProjectTriggerFilter();

            RecorderITrigger TriggerRecorder = new RecorderITrigger();

            TriggerRecorder.Recordings.ShouldRunIntegrationRecording.ReturnValue = BuildCondition.NoBuild;

            TestSubject.InnerTrigger = TriggerRecorder;

            BuildCondition Condition = TestSubject.ShouldRunIntegration();

            Assert.AreEqual(BuildCondition.NoBuild, Condition);
        }
Exemple #12
0
        public void TestShouldRunIntegrationBlockedByInclusionFilterCauseBuilding()
        {
            ProjectTriggerFilter TestSubject = new ProjectTriggerFilter();

            RecorderITrigger TriggerRecorder = new RecorderITrigger();

            TriggerRecorder.Recordings.ShouldRunIntegrationRecording.ReturnValue = BuildCondition.IfModificationExists;

            TestSubject.InnerTrigger = TriggerRecorder;

            TestSubject.ProjectFilters = new ProjectFilterList();

            ProjectFilter Project = new ProjectFilter();

            Project.Project   = "TestProject";
            Project.ServerUri = "TestUri";

            Project.InclusionFilters.Activities = new ProjectActivity[1] {
                ProjectActivity.Sleeping
            };
            Project.InclusionFilters.Conditions = new IntegrationStatus[1] {
                IntegrationStatus.Success
            };

            RecorderIRemotingService RemotingRecorder = new RecorderIRemotingService();
            RecorderICruiseManager   CruiseRecorder   = new RecorderICruiseManager();
            ProjectStatus            Stati            = new ProjectStatus();

            Stati.Name        = "TestProject";
            Stati.Activity    = ProjectActivity.Building;
            Stati.BuildStatus = IntegrationStatus.Success;

            CruiseRecorder.Recordings.GetProjectStatusRecording.ReturnValue = new ProjectStatus[1] {
                Stati
            };
            RemotingRecorder.Recordings.ConnectTypeStringRecording.ReturnValue = CruiseRecorder;
            Project.RemoteService = RemotingRecorder;

            TestSubject.ProjectFilters.Add(Project);

            BuildCondition Condition = TestSubject.ShouldRunIntegration();

            Assert.IsTrue(RemotingRecorder.Recordings.ConnectTypeStringRecording.Called);
            Assert.AreEqual("TestUri", RemotingRecorder.Recordings.ConnectTypeStringRecording.PassedStringuri);
            Assert.AreEqual(typeof(ICruiseManager), RemotingRecorder.Recordings.ConnectTypeStringRecording.PassedTypeproxyType);

            Assert.IsTrue(CruiseRecorder.Recordings.GetProjectStatusRecording.Called);

            Assert.AreEqual(BuildCondition.NoBuild, Condition);
        }
        public BuildCondition ShouldRunIntegration()
        {
            BuildCondition overallCondition = BuildCondition.NoBuild;

            foreach (ITrigger trigger in triggers)
            {
                // Assumes ordering of elements of enum
                BuildCondition condition = trigger.ShouldRunIntegration();
                if (condition > overallCondition)
                {
                    overallCondition = condition;
                }
            }
            return(overallCondition);
        }
Exemple #14
0
        public override BuildCondition ShouldRunIntegration()
        {
            BuildCondition condition = base.ShouldRunIntegration();

            if (condition == BuildCondition.NoBuild)
            {
                return(condition);
            }

            Log.Debug(string.Format("More than {0} seconds since last integration, checking url.", IntervalSeconds));
            if (HasUrlChanged())
            {
                return(BuildCondition);
            }
            return(BuildCondition.NoBuild);
        }
            public BuildCondition WaitForRequest()
            {
                if (!HasPendingRequests())
                {
                    latch.WaitOne();
                }

                lock (this)
                {
                    BuildCondition result = request.Condition;
                    request = NoBuildRequested;
                    latch.Reset();

                    Debug.Assert(result != BuildCondition.NoBuild);
                    return(result);
                }
            }
Exemple #16
0
 public Card(
     string id,
     string name,
     CardType type,
     int age,
     BuildCondition buildCondition,
     string[] chainTo,
     int nPlayersPlayable
     )
 {
     this.ID   = id;
     this.Name = name;
     this.Type = type;
     this.Age  = age;
     this.CardBuildCondition = buildCondition;
     this.ChainTo            = chainTo;
     this.NPlayersPlayable   = nPlayersPlayable;
 }
        public BuildCondition ShouldRunIntegration()
        {
            BuildCondition ShouldRun = this.InnerTrigger.ShouldRunIntegration();

            if (ShouldRun == BuildCondition.NoBuild)
            {
                return(BuildCondition.NoBuild);
            }

            foreach (ProjectFilter Project in this.ProjectFilters)
            {
                if (!Project.IsAllowed())
                {
                    return(BuildCondition.NoBuild);
                }
            }

            return(ShouldRun);
        }
        private bool ShouldRunIntegration()
        {
            if (this.ShouldForceBuild)
            {
                this.ShouldForceBuild = false;
                this.IntegrationResult.BuildCondition = BuildCondition.ForceBuild;
                return(true);
            }

            BuildCondition ShouldIntegration = _trigger.ShouldRunIntegration();

            if (ShouldIntegration != BuildCondition.NoBuild)
            {
                this.IntegrationResult = resultManager.StartNewIntegration();
                this.IntegrationResult.BuildCondition = ShouldIntegration;
                return(true);
            }
            return(false);
        }
Exemple #19
0
 public ProjectStatus(ProjectIntegratorState status, IntegrationStatus buildStatus, 
     ProjectActivity activity, string name, string webURL, DateTime lastBuildDate, TimeSpan lastBuildDuration,
     string lastBuildLabel, string lastSuccessfulBuildLabel, DateTime nextBuildTime,
     string forcee, Modification[] modifications, DateTime currentBuildStartTime, BuildCondition buildCondition)
 {
     this.status = status;
     this.buildStatus = buildStatus;
     this.activity = activity;
     this.name = name;
     this.webURL = webURL;
     this.lastBuildDate = lastBuildDate;
     this.lastBuildLabel = lastBuildLabel;
     this.lastSuccessfulBuildLabel = lastSuccessfulBuildLabel;
     this.nextBuildTime = nextBuildTime;
     this._Forcee = forcee;
     this._Modifications = modifications;
     this.currentBuildStartTime = currentBuildStartTime;
     this.buildCondition = buildCondition;
     this.lastBuildDuration = lastBuildDuration;
 }
Exemple #20
0
 public ProjectStatus(ProjectIntegratorState status, IntegrationStatus buildStatus,
                      ProjectActivity activity, string name, string webURL, DateTime lastBuildDate, TimeSpan lastBuildDuration,
                      string lastBuildLabel, string lastSuccessfulBuildLabel, DateTime nextBuildTime,
                      string forcee, Modification[] modifications, DateTime currentBuildStartTime, BuildCondition buildCondition)
 {
     this.status                   = status;
     this.buildStatus              = buildStatus;
     this.activity                 = activity;
     this.name                     = name;
     this.webURL                   = webURL;
     this.lastBuildDate            = lastBuildDate;
     this.lastBuildLabel           = lastBuildLabel;
     this.lastSuccessfulBuildLabel = lastSuccessfulBuildLabel;
     this.nextBuildTime            = nextBuildTime;
     this._Forcee                  = forcee;
     this._Modifications           = modifications;
     this.currentBuildStartTime    = currentBuildStartTime;
     this.buildCondition           = buildCondition;
     this.lastBuildDuration        = lastBuildDuration;
 }
        public void TestIntegrationPropertyToString()
        {
            const int               integer           = 5;
            string                  integerString     = integer.ToString();
            const BuildCondition    buildCondition    = BuildCondition.ForceBuild;
            const IntegrationStatus integrationStatus = IntegrationStatus.Success;

            ArrayList arrayList = new ArrayList();

            arrayList.Add("foo");
            arrayList.Add("5");
            arrayList.Add("bar");

            const string customDelimiter           = "-";
            const string defaultConvertedArrayList = "\"foo" + StringUtil.DEFAULT_DELIMITER + "5" + StringUtil.DEFAULT_DELIMITER + "bar\"";
            const string customConvertedArrayList  = "\"foo" + customDelimiter + "5" + customDelimiter + "bar\"";

            Assert.AreEqual(StringUtil.IntegrationPropertyToString(integer), integerString);
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(integerString), integerString);
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(buildCondition), buildCondition.ToString());
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(integrationStatus), integrationStatus.ToString());
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(arrayList), defaultConvertedArrayList);

            Assert.AreEqual(StringUtil.IntegrationPropertyToString(integer, customDelimiter), integerString);
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(integerString, customDelimiter), integerString);
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(buildCondition, customDelimiter), buildCondition.ToString());
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(integrationStatus, customDelimiter), integrationStatus.ToString());
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(arrayList, customDelimiter), customConvertedArrayList);

            Assert.AreEqual(StringUtil.IntegrationPropertyToString(null), null);

            ArrayList arrayList2 = new ArrayList();

            arrayList2.Add("foo");
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(arrayList2), "foo");
            Assert.AreEqual(StringUtil.IntegrationPropertyToString(arrayList2, customDelimiter), "foo");
        }
Exemple #22
0
        public BuildCondition ShouldRunIntegration()
        {
            Log.Info(string.Format("{0}:Begin", System.Reflection.MethodBase.GetCurrentMethod().Name));

            BuildCondition ShouldRun = this.InnerTrigger.ShouldRunIntegration();

            if (ShouldRun == BuildCondition.NoBuild)
            {
                return(BuildCondition.NoBuild);
            }

            foreach (ProjectFilter Project in this.ProjectFilters)
            {
                if (!Project.IsAllowed())
                {
                    Log.Info(string.Format("{0}:this.InnerTrigger.IntegrationNotRun()", System.Reflection.MethodBase.GetCurrentMethod().Name));
                    this.InnerTrigger.IntegrationNotRun();
                    return(BuildCondition.NoBuild);
                }
            }

            Log.Info(string.Format("{0}:ShouldRun={1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ShouldRun.ToString()));
            return(ShouldRun);
        }
        /// <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);
        }
        static void Main(string[] args)
        {
            OptionSet opts = new OptionSet();

            opts.Add("h|?|help", "display this help screen", delegate(string v) { help = v != null; })
            .Add("s|server=", "the CruiseControl.Net server to send the commands to (required for all actions except help)", delegate(string v) { server = v; })
            .Add("t|target=", "the target server for all messages", delegate(string v) { target = v; })
            .Add("p|project=", "the project to use (required for all actions except help and retrieve)", delegate(string v) { project = v; })
            .Add("a|all", "lists all the projects (only valid for retrieve)", delegate(string v) { all = v != null; })
            .Add("q|quiet", "run in quiet mode (do not print messages)", delegate(string v) { quiet = v != null; })
            .Add("ime|ifmodificationexists", "only force the build if modification exist", delegate(string v) { condition = v != null ? BuildCondition.IfModificationExists : BuildCondition.ForceBuild; })
            .Add("r|params=", "a semicolon separated list of name value pairs", delegate(string v) { string_params = v; })
            .Add("f|params_file=", "the name of a XML file containing the parameters values to use when forcing a build. If specified at the same time as this flag, the values from the command line are ignored", delegate(string v) { params_filename = v; })
            .Add("x|xml", "outputs the details in XML format instead of plain text (only valid for retrieve)", delegate(string v) { xml = v != null; })
            .Add("user="******"the user of the user account to use", v => { userName = v; })
            .Add("pwd=", "the password to use for the user", v => { password = v; });
            try
            {
                extra = opts.Parse(args);
            }
            catch (OptionException e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
                return;
            }

            if ((extra.Count == 1) && !help)
            {
                command = (CommandType)Enum.Parse(typeof(CommandType), extra[0], true);
            }
            else
            {
                DisplayHelp(opts);
                return;
            }

            try
            {
                switch (command)
                {
                case CommandType.Help:
                    DisplayHelp(opts);
                    break;

                case CommandType.Retrieve:
                    RunRetrive();
                    break;

                case CommandType.ForceBuild:
                    RunForceBuild();
                    break;

                case CommandType.AbortBuild:
                    RunAbortBuild();
                    break;

                case CommandType.StartProject:
                    RunStartProject();
                    break;

                case CommandType.StopProject:
                    RunStopProject();
                    break;

                default:
                    throw new CruiseControlException("Unknown action: " + command.ToString());
                }
            }
            catch (Exception error)
            {
                WriteError("ERROR: An unknown error has occurred!", error);
            }
        }
 /// <summary>
 /// Forces a build.
 /// </summary>
 /// <param name="condition">The condition.</param>
 public void ForceBuild(BuildCondition condition)
 {
     this.client.ForceBuild(this.Name, new List<NameValuePair>(), condition);
 }
 public BuildRequest(BuildCondition condition)
 {
     this.condition = condition;
 }
Exemple #27
0
 /// <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 virtual void ForceBuild(string projectName, List <NameValuePair> parameters, BuildCondition condition)
 {
     this.ForceBuild(projectName, parameters);
 }
		public IntegrationRequest Request(BuildCondition buildCondition)
		{
			return new IntegrationRequest(buildCondition, Source, null);
		}
 /// <summary>
 /// Forces a build.
 /// </summary>
 /// <param name="condition">The condition.</param>
 public void ForceBuild(BuildCondition condition)
 {
     this.client.ForceBuild(this.Name, new List <NameValuePair>(), condition);
 }
 public IntegrationRequest Request(BuildCondition buildCondition)
 {
     return(new IntegrationRequest(buildCondition, Source, null));
 }
        static void Main(string[] args)
        {
           	OptionSet opts = new OptionSet();
            opts.Add("h|?|help", "display this help screen", delegate(string v) { help = v != null; })
                .Add("s|server=", "the CruiseControl.Net server to send the commands to (required for all actions except help)", delegate(string v) { server = v; })
                .Add("t|target=", "the target server for all messages", delegate(string v) { target = v; })
                .Add("p|project=", "the project to use (required for all actions except help and retrieve)", delegate(string v) { project = v; })
                .Add("a|all", "lists all the projects (only valid for retrieve)", delegate(string v) { all = v != null; })
                .Add("q|quiet", "run in quiet mode (do not print messages)", delegate(string v) { quiet = v != null; })
                .Add("ime|ifmodificationexists", "only force the build if modification exist", delegate(string v) { condition = v != null ? BuildCondition.IfModificationExists : BuildCondition.ForceBuild; })
                .Add("r|params=", "a semicolon separated list of name value pairs", delegate(string v) { string_params = v; })
                .Add("f|params_file=", "the name of a XML file containing the parameters values to use when forcing a build. If specified at the same time as this flag, the values from the command line are ignored", delegate(string v) { params_filename = v; })             
 				.Add("x|xml", "outputs the details in XML format instead of plain text (only valid for retrieve)", delegate(string v) { xml = v != null; })
                .Add("user="******"the user of the user account to use", v => { userName = v; })
                .Add("pwd=", "the password to use for the user", v => { password = v;})
                .Add("volunteer_name=", "the name to use when volunteering (defaults to Environment.UserName)", v => { volunteer_name = v; });
        	try
        	{
        		extra = opts.Parse(args);
        	}
        	catch (OptionException e)
        	{
				Console.WriteLine(e.Message);
				Console.WriteLine(e.StackTrace);
				return;
			}
        	
        	if((extra.Count == 1) && !help)
        	{
        		command = (CommandType) Enum.Parse(typeof(CommandType), extra[0], true);
        	}
        	else
        	{
        		DisplayHelp(opts);
        		return;
        	}
        	
            try
            {                
                switch (command)
                {
                    case CommandType.Help:
                        DisplayHelp(opts);
                        break;
                    case CommandType.Retrieve:
                        RunRetrive();
                        break;
                    case CommandType.ForceBuild:
                        RunForceBuild();
                        break;
                    case CommandType.AbortBuild:
                        RunAbortBuild();
                        break;
                    case CommandType.StartProject:
                        RunStartProject();
                        break;
                    case CommandType.StopProject:
                        RunStopProject();
                        break;
                    case CommandType.Volunteer:
                        RunVolunteer();
                        break;
                    default:
                        throw new CruiseControlException("Unknown action: " + command.ToString());
                }
            }
            catch (Exception error)
            {
                WriteError("ERROR: An unknown error has occurred!", error);
            }
        }
			public void RequestBuild(BuildCondition condition)
			{
				lock (this)
				{
					if (request.IsHigherPriority(condition))
					{
						request = new BuildRequest(condition);
						latch.Set();
					}
				}
			}
			public BuildRequest(BuildCondition condition)
			{
				this.condition = condition;
			}
			public bool IsHigherPriority(BuildCondition condition)
			{
				return this.condition < condition;
			}
        /// <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);
        }
 public bool IsHigherPriority(BuildCondition condition)
 {
     return(this.condition < condition);
 }