/// <summary>
 /// Fires the <see cref="BuildQueueRemoved"/> event.
 /// </summary>
 /// <param name="buildQueue">The build queue that was added.</param>
 protected void FireBuildQueueRemoved(BuildQueue buildQueue)
 {
     if (BuildQueueRemoved != null)
     {
         var args = new BuildQueueChangedArgs(buildQueue);
         BuildQueueRemoved(this, args);
     }
 }
 /// <summary>
 /// Compare if two queues are the same.
 /// </summary>
 /// <param name="obj"></param>
 /// <returns></returns>
 public virtual bool Equals(BuildQueue obj)
 {
     if (obj == null)
     {
         return(false);
     }
     return(obj.Server.Equals(Server) &&
            (obj.Name == Name));
 }
 public void ServerReturnsUnderlyingServer()
 {
     var client = mocks.DynamicMock<CruiseServerClientBase>();
     var server = InitialiseServer();
     var status = new QueueSnapshot();
     var queue = new BuildQueue(client, server, status);
     mocks.ReplayAll();
     Assert.AreSame(server, queue.Server);
 }
 public void ConstructorDoesNotAllowNullClient()
 {
     try
     {
         var queue = new BuildQueue(null, null, null);
         Assert.Fail("ArgumentNullException was expected");
     }
     catch (ArgumentNullException) { }
 }
 public void ConstructorSetsBuildQueue()
 {
     var mocks = new MockRepository();
     var client = mocks.DynamicMock<CruiseServerClientBase>();
     var watcher = mocks.Stub<IServerWatcher>();
     var monitor = new Server(client, watcher);
     var queue = new BuildQueue(client, monitor, new QueueSnapshot());
     var args = new BuildQueueChangedArgs(queue);
     Assert.AreSame(queue, args.BuildQueue);
 }
 public void ConstructorDoesNotAllowNullServer()
 {
     var client = mocks.DynamicMock<CruiseServerClientBase>();
     mocks.ReplayAll();
     try
     {
         var queue = new BuildQueue(client, null, null);
         Assert.Fail("ArgumentNullException was expected");
     }
     catch (ArgumentNullException) { }
 }
Exemple #7
0
        /// <summary>
        /// Initialise a new build queue request.
        /// </summary>
        /// <param name="client">The underlying client.</param>
        /// <param name="buildQueue">The queue this project belongs to.</param>
        /// <param name="snapshot">The actual build queue request details.</param>
        public BuildQueueRequest(CruiseServerClientBase client, BuildQueue buildQueue, QueuedRequestSnapshot snapshot)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (buildQueue == null)
            {
                throw new ArgumentNullException("buildQueue");
            }
            if (snapshot == null)
            {
                throw new ArgumentNullException("snapshot");
            }

            this.client     = client;
            this.buildQueue = buildQueue;
            this.snapshot   = snapshot;
        }
Exemple #8
0
 /// <summary>
 /// Initialise a new <see cref="BuildQueueChangedArgs"/>.
 /// </summary>
 /// <param name="buildQueue">The build queue that changed.</param>
 public BuildQueueChangedArgs(BuildQueue buildQueue)
 {
     BuildQueue = buildQueue;
 }
 /// <summary>
 /// Compare if two queues are the same.
 /// </summary>
 /// <param name="obj"></param>
 /// <returns></returns>
 public virtual bool Equals(BuildQueue obj)
 {
     if (obj == null) return false;
     return obj.Server.Equals(Server) &&
         (obj.Name == Name);
 }
        /// <summary>
        /// Update the status based on the latest snapshot.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected virtual void OnWatcherUpdate(object sender, ServerUpdateArgs e)
        {
            var newProjects   = new List <Project>();
            var oldProjects   = new List <Project>();
            var newQueues     = new List <BuildQueue>();
            var oldQueues     = new List <BuildQueue>();
            var projectValues = new Dictionary <Project, ProjectStatus>();
            var queueValues   = new Dictionary <BuildQueue, QueueSnapshot>();

            syncLock.AcquireWriterLock(10000);
            try
            {
                Exception = e.Exception;
                if (e.Exception == null)
                {
                    // Check for any project differences
                    var oldProjectNames = new List <string>(projects.Keys);
                    foreach (var project in e.Snapshot.ProjectStatuses)
                    {
                        // Check if this project has already been loaded
                        var projectName = project.Name;
                        if (oldProjectNames.Contains(projectName))
                        {
                            projectValues.Add(projects[projectName], project);
                            oldProjectNames.Remove(projectName);
                        }
                        else
                        {
                            // Otherwise this is a new project
                            var newProject = new Project(client, this, project);
                            newProjects.Add(newProject);
                        }
                    }

                    // Check for any queue differences
                    var oldQueueNames = new List <string>(buildQueues.Keys);
                    foreach (var queue in e.Snapshot.QueueSetSnapshot.Queues)
                    {
                        // Check if this queue has already been loaded
                        var queueName = queue.QueueName;
                        if (oldQueueNames.Contains(queueName))
                        {
                            queueValues.Add(buildQueues[queueName], queue);
                            oldQueueNames.Remove(queueName);
                        }
                        else
                        {
                            // Otherwise this is a new queue
                            var newQueue = new BuildQueue(client, this, queue);
                            newQueues.Add(newQueue);
                        }
                    }

                    // Store the old projects and queues
                    foreach (var project in oldProjectNames)
                    {
                        oldProjects.Add(projects[project]);
                    }
                    foreach (var queue in oldQueueNames)
                    {
                        oldQueues.Add(buildQueues[queue]);
                    }

                    // Perform the actual update
                    foreach (var project in oldProjectNames)
                    {
                        projects.Remove(project);
                    }
                    foreach (var queue in oldQueueNames)
                    {
                        buildQueues.Remove(queue);
                    }
                    foreach (var project in newProjects)
                    {
                        projects.Add(project.Name, project);
                    }
                    foreach (var queue in newQueues)
                    {
                        buildQueues.Add(queue.Name, queue);
                    }
                }
            }
            finally
            {
                syncLock.ReleaseWriterLock();
            }

            // Update all the projects and queues
            foreach (var value in projectValues)
            {
                value.Key.Update(value.Value);
            }
            foreach (var value in queueValues)
            {
                value.Key.Update(value.Value);
            }

            // Tell any listeners about any changes
            foreach (var project in newProjects)
            {
                FireProjectAdded(project);
            }
            foreach (var queue in newQueues)
            {
                FireBuildQueueAdded(queue);
            }
            foreach (var project in oldProjects)
            {
                FireProjectRemoved(project);
            }
            foreach (var queue in oldQueues)
            {
                FireBuildQueueRemoved(queue);
            }
        }
 public void RequestsReturnsRequestsFromStatus()
 {
     var client = mocks.DynamicMock<CruiseServerClientBase>();
     var server = InitialiseServer();
     var status = new QueueSnapshot
     {
         Requests = {
                 new QueuedRequestSnapshot{
                     ProjectName = "Project 1"
                 }
             }
     };
     var queue = new BuildQueue(client, server, status);
     mocks.ReplayAll();
 }
 public void NameReturnsQueueNameFromSnapshot()
 {
     var client = mocks.DynamicMock<CruiseServerClientBase>();
     var server = InitialiseServer();
     var status = new QueueSnapshot { QueueName = "Test BuildQueue" };
     var queue = new BuildQueue(client, server, status);
     mocks.ReplayAll();
     Assert.AreEqual(status.QueueName, queue.Name);
 }
        public void UpdateFiresPropertyChangedWhenMessageIsRemoved()
        {
            mocks = new MockRepository();
            var client = mocks.DynamicMock<CruiseServerClientBase>();
            var server = InitialiseServer();
            var status = new QueueSnapshot
            {
                Requests = {
                        new QueuedRequestSnapshot{
                            ProjectName = "Project 1"
                        },
                        new QueuedRequestSnapshot{
                            ProjectName = "Project 2"
                        }
                    }
            };
            var queue = new BuildQueue(client, server, status);
            mocks.ReplayAll();
            var eventFired = false;
            queue.Update(status);

            var newStatus = new QueueSnapshot
            {
                Requests = {
                        new QueuedRequestSnapshot{
                            ProjectName = "Project 2"
                        }
                    }
            };
            queue.BuildQueueRequestRemoved += (o, e) =>
            {
                eventFired = true;
            };
            queue.Update(newStatus);
            Assert.IsTrue(eventFired, "BuildQueueRequestRemoved for Requests change not fired");
        }
 public void UpdateValidatesArguments()
 {
     var client = mocks.DynamicMock<CruiseServerClientBase>();
     var server = InitialiseServer();
     var status = new QueueSnapshot { QueueName = "Testing" };
     var queue = new BuildQueue(client, server, status);
     mocks.ReplayAll();
     try
     {
         queue.Update(null);
         Assert.Fail("ArgumentNullException was expected");
     }
     catch (ArgumentNullException) { }
 }