public void ReturnsCorrectProjectDetailsFromProjectsAndQueuesXml()
        {
            DashboardXmlParser parser = new DashboardXmlParser();

            CruiseServerSnapshot snapshot = parser.ExtractAsCruiseServerSnapshot(CRUISE_SERVER_XML);

            Assert.IsNotNull(snapshot);

            Assert.AreEqual(2, snapshot.ProjectStatuses.Length);
            AssertProjectsSerializedCorrectly(snapshot);

            Assert.AreEqual(2, snapshot.QueueSetSnapshot.Queues.Count);
            QueueSnapshot queueSnapshot1 = snapshot.QueueSetSnapshot.Queues[0];

            Assert.AreEqual("Queue1", queueSnapshot1.QueueName);
            Assert.AreEqual("projectName", queueSnapshot1.Requests[0].ProjectName);
            Assert.AreEqual(ProjectActivity.CheckingModifications, queueSnapshot1.Requests[0].Activity);
            Assert.AreEqual("SVNTest", queueSnapshot1.Requests[1].ProjectName);
            Assert.AreEqual(ProjectActivity.Pending, queueSnapshot1.Requests[1].Activity);

            QueueSnapshot queueSnapshot2 = snapshot.QueueSetSnapshot.Queues[1];

            Assert.AreEqual("Queue2", queueSnapshot2.QueueName);
            Assert.AreEqual("Missing", queueSnapshot2.Requests[0].ProjectName);
            Assert.AreEqual(ProjectActivity.Building, queueSnapshot2.Requests[0].Activity);
        }
Esempio n. 2
0
        public void GetIntegrationQueueSnapshotForSingleProjectOnSingleQueue()
        {
            project1Mock.SetupGet(project => project.CurrentActivity).Returns(ProjectActivity.CheckingModifications);
            queueNotifier1Mock.Setup(notifier => notifier.NotifyEnteringIntegrationQueue()).Verifiable();
            integrationQueue1.Enqueue(integrationQueueItem1);

            QueueSetSnapshot queueSetSnapshot = integrationQueues.GetIntegrationQueueSnapshot();

            Assert.IsNotNull(queueSetSnapshot);
            Assert.AreEqual(2, queueSetSnapshot.Queues.Count);

            QueueSnapshot queueSnapshot = queueSetSnapshot.Queues[0];

            Assert.IsNotNull(queueSnapshot);
            Assert.IsFalse(queueSnapshot.IsEmpty);
            Assert.AreEqual(TestQueueName, queueSnapshot.QueueName);
            Assert.AreEqual(1, queueSnapshot.Requests.Count);
            Assert.AreEqual(queueSnapshot, queueSetSnapshot.FindByName(TestQueueName));

            QueuedRequestSnapshot queuedRequestSnapshot = queueSnapshot.Requests[0];

            Assert.AreEqual("ProjectOne", queuedRequestSnapshot.ProjectName);
            Assert.AreEqual(ProjectActivity.CheckingModifications, queuedRequestSnapshot.Activity);

            QueueSnapshot queueSnapshot2 = queueSetSnapshot.Queues[1];

            Assert.IsNotNull(queueSnapshot2);
            Assert.IsTrue(queueSnapshot2.IsEmpty);

            VerifyAll();
            queueNotifier1Mock.VerifyNoOtherCalls();
        }
Esempio n. 3
0
        public void GetIntegrationQueueSnapshotForMultipleProjectsOnSingleQueue()
        {
            project1Mock.SetupGet(project => project.CurrentActivity).Returns(ProjectActivity.CheckingModifications);
            queueNotifier1Mock.Setup(notifier => notifier.NotifyEnteringIntegrationQueue()).Verifiable();
            integrationQueue1.Enqueue(integrationQueueItem1);

            // Second item is different project but same queue
            project2Mock.SetupGet(project => project.QueueName).Returns(TestQueueName);
            project2Mock.SetupGet(project => project.CurrentActivity).Returns(ProjectActivity.Pending);
            queueNotifier2Mock.Setup(notifier => notifier.NotifyEnteringIntegrationQueue()).Verifiable();
            integrationQueue1.Enqueue(integrationQueueItem2);

            QueueSetSnapshot queueSetSnapshot = integrationQueues.GetIntegrationQueueSnapshot();

            Assert.AreEqual(2, queueSetSnapshot.Queues.Count);

            QueueSnapshot queueSnapshot = queueSetSnapshot.Queues[0];

            Assert.AreEqual(2, queueSnapshot.Requests.Count);

            QueuedRequestSnapshot firstQueuedRequestSnapshot = queueSnapshot.Requests[0];

            Assert.AreEqual("ProjectOne", firstQueuedRequestSnapshot.ProjectName);
            Assert.AreEqual(ProjectActivity.CheckingModifications, firstQueuedRequestSnapshot.Activity);

            QueuedRequestSnapshot secondQueuedRequestSnapshot = queueSnapshot.Requests[1];

            Assert.AreEqual("ProjectTwo", secondQueuedRequestSnapshot.ProjectName);
            Assert.AreEqual(ProjectActivity.Pending, secondQueuedRequestSnapshot.Activity);

            VerifyAll();
            queueNotifier1Mock.VerifyNoOtherCalls();
            queueNotifier2Mock.VerifyNoOtherCalls();
        }
        public void GetIntegrationQueueSnapshotForMultipleProjectsOnSingleQueue()
        {
            project1Mock.SetupResult("CurrentActivity", ProjectActivity.CheckingModifications);
            queueNotifier1Mock.Expect("NotifyEnteringIntegrationQueue");
            queueNotifier1Mock.ExpectNoCall("NotifyExitingIntegrationQueue", typeof(bool));
            integrationQueue1.Enqueue(integrationQueueItem1);

            // Second item is different project but same queue
            project2Mock.ExpectAndReturn("QueueName", TestQueueName);
            project2Mock.SetupResult("CurrentActivity", ProjectActivity.Pending);
            queueNotifier2Mock.Expect("NotifyEnteringIntegrationQueue");
            queueNotifier2Mock.ExpectNoCall("NotifyExitingIntegrationQueue", typeof(bool));
            integrationQueue1.Enqueue(integrationQueueItem2);

            QueueSetSnapshot queueSetSnapshot = integrationQueues.GetIntegrationQueueSnapshot();

            Assert.AreEqual(2, queueSetSnapshot.Queues.Count);

            QueueSnapshot queueSnapshot = queueSetSnapshot.Queues[0];

            Assert.AreEqual(2, queueSnapshot.Requests.Count);

            QueuedRequestSnapshot firstQueuedRequestSnapshot = queueSnapshot.Requests[0];

            Assert.AreEqual("ProjectOne", firstQueuedRequestSnapshot.ProjectName);
            Assert.AreEqual(ProjectActivity.CheckingModifications, firstQueuedRequestSnapshot.Activity);

            QueuedRequestSnapshot secondQueuedRequestSnapshot = queueSnapshot.Requests[1];

            Assert.AreEqual("ProjectTwo", secondQueuedRequestSnapshot.ProjectName);
            Assert.AreEqual(ProjectActivity.Pending, secondQueuedRequestSnapshot.Activity);

            VerifyAll();
        }
        public void QueueNameGetSetTest()
        {
            QueueSnapshot activity = new QueueSnapshot();

            activity.QueueName = "testing";
            Assert.AreEqual("testing", activity.QueueName);
        }
        public void GetIntegrationQueueSnapshotForSingleProjectOnSingleQueue()
        {
            project1Mock.SetupResult("CurrentActivity", ProjectActivity.CheckingModifications);
            queueNotifier1Mock.Expect("NotifyEnteringIntegrationQueue");
            queueNotifier1Mock.ExpectNoCall("NotifyExitingIntegrationQueue", typeof(bool));
            integrationQueue1.Enqueue(integrationQueueItem1);

            QueueSetSnapshot queueSetSnapshot = integrationQueues.GetIntegrationQueueSnapshot();

            Assert.IsNotNull(queueSetSnapshot);
            Assert.AreEqual(2, queueSetSnapshot.Queues.Count);

            QueueSnapshot queueSnapshot = queueSetSnapshot.Queues[0];

            Assert.IsNotNull(queueSnapshot);
            Assert.IsFalse(queueSnapshot.IsEmpty);
            Assert.AreEqual(TestQueueName, queueSnapshot.QueueName);
            Assert.AreEqual(1, queueSnapshot.Requests.Count);
            Assert.AreEqual(queueSnapshot, queueSetSnapshot.FindByName(TestQueueName));

            QueuedRequestSnapshot queuedRequestSnapshot = queueSnapshot.Requests[0];

            Assert.AreEqual("ProjectOne", queuedRequestSnapshot.ProjectName);
            Assert.AreEqual(ProjectActivity.CheckingModifications, queuedRequestSnapshot.Activity);

            QueueSnapshot queueSnapshot2 = queueSetSnapshot.Queues[1];

            Assert.IsNotNull(queueSnapshot2);
            Assert.IsTrue(queueSnapshot2.IsEmpty);

            VerifyAll();
        }
Esempio n. 7
0
 public IntegrationQueueTreeNodeTag(IntegrationQueueTreeNodeAdaptor adaptor, QueueSnapshot queueSnapshot,
                                    QueuedRequestSnapshot queuedRequestSnapshot, int queueIndex)
 {
     this.Adaptor               = adaptor;
     this.QueueSnapshot         = queueSnapshot;
     this.QueuedRequestSnapshot = queuedRequestSnapshot;
     this.QueueIndex            = queueIndex;
 }
Esempio n. 8
0
        public void ServerReturnsUnderlyingServer()
        {
            var client = mocks.Create <CruiseServerClientBase>().Object;
            var server = InitialiseServer();
            var status = new QueueSnapshot();
            var queue  = new BuildQueue(client, server, status);

            Assert.AreSame(server, queue.Server);
        }
Esempio n. 9
0
        /// <summary>
        /// Wraps the specified queue status.
        /// </summary>
        /// <param name="owningClient">The owning client.</param>
        /// <param name="queueStatus">The queue status.</param>
        /// <param name="connection">The connection.</param>
        /// <returns>
        /// The new <see cref="CCProject"/>.
        /// </returns>
        internal static CCQueue Wrap(CruiseServerClientBase owningClient, QueueSnapshot queueStatus, CCConnection connection)
        {
            var queue = new CCQueue(owningClient, queueStatus.QueueName, queueStatus.Requests)
            {
                Connection = connection
            };

            return(queue);
        }
        /// <summary>
        /// Initialise a new build queue.
        /// </summary>
        /// <param name="client">The underlying client.</param>
        /// <param name="server">The server this queue belongs to.</param>
        /// <param name="buildQueue">The actual build queue details.</param>
        public BuildQueue(CruiseServerClientBase client,Server server, QueueSnapshot buildQueue)
        {
            if (client == null) throw new ArgumentNullException("client");
            if (server == null) throw new ArgumentNullException("server");
            if (buildQueue == null) throw new ArgumentNullException("buildQueue");

            this.client = client;
            this.server = server;
            this.buildQueue = buildQueue;
        }
        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);
        }
Esempio n. 12
0
        public void NameReturnsQueueNameFromSnapshot()
        {
            var client = mocks.Create <CruiseServerClientBase>().Object;
            var server = InitialiseServer();
            var status = new QueueSnapshot {
                QueueName = "Test BuildQueue"
            };
            var queue = new BuildQueue(client, server, status);

            Assert.AreEqual(status.QueueName, queue.Name);
        }
        public void DetectQueueSetChangedWithDifferingProjectStatus()
        {
            snapshot1.Queues.Add(new QueueSnapshot("Test1"));
            snapshot2.Queues.Add(new QueueSnapshot("Test1"));
            QueueSnapshot queue1 = snapshot1.Queues[0];
            QueueSnapshot queue2 = snapshot2.Queues[0];

            queue1.Requests.Add(new QueuedRequestSnapshot("Project1", ProjectActivity.CheckingModifications));
            queue2.Requests.Add(new QueuedRequestSnapshot("Project1", ProjectActivity.Building));
            AssertQueueSetChanged(true, snapshot1, snapshot2);
        }
Esempio n. 14
0
        public ProbeResult Execute <T>(T snapshot)
        {
            QueueSnapshot data = snapshot as QueueSnapshot;
            ProbeResult   result;

            if (_config.IsNull() || _config.Probes.IsNull())
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.NA, out var article);
                result = new NotApplicableProbeResult(null,
                                                      null,
                                                      Metadata.Id,
                                                      Metadata.Name,
                                                      ComponentType,
                                                      article);

                NotifyObservers(result);

                return(result);
            }

            var probeData = new List <ProbeData>
            {
                new ProbeDataImpl("Messages.Incoming.Total", data.Messages.Incoming.Total.ToString()),
                new ProbeDataImpl("QueueLowFlowThreshold", _config.Probes.QueueLowFlowThreshold.ToString())
            };

            if (data.Messages.Incoming.Total <= _config.Probes.QueueLowFlowThreshold)
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Unhealthy, out var article);
                result = new UnhealthyProbeResult(data.Node,
                                                  data.Identifier,
                                                  Metadata.Id,
                                                  Metadata.Name,
                                                  ComponentType,
                                                  probeData,
                                                  article);
            }
            else
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Healthy, out var article);
                result = new HealthyProbeResult(data.Node,
                                                data.Identifier,
                                                Metadata.Id,
                                                Metadata.Name,
                                                ComponentType,
                                                probeData,
                                                article);
            }

            NotifyObservers(result);

            return(result);
        }
        private static void WriteQueueSnapshot(XmlWriter xmlWriter, QueueSnapshot queue)
        {
            xmlWriter.WriteStartElement("Queue");
            xmlWriter.WriteAttributeString("name", queue.QueueName);

            foreach (QueuedRequestSnapshot request in queue.Requests)
            {
                WriteQueuedRequestSnapshot(xmlWriter, request);
            }

            xmlWriter.WriteEndElement();
        }
Esempio n. 16
0
        public void ToStringSerialisesAllValues()
        {
            QueueSnapshot queueSnapshot = new QueueSnapshot("queue1");

            queueSnapshot.Requests.Add(new QueuedRequestSnapshot("test project", ProjectActivity.Pending));
            QueueSetSnapshot queueSetSnapshot = new QueueSetSnapshot();

            queueSetSnapshot.Queues.Add(queueSnapshot);
            ProjectStatus        projectStatus = new ProjectStatus("test project", IntegrationStatus.Success, DateTime.Now);
            CruiseServerSnapshot snapshot      = new CruiseServerSnapshot(
                new ProjectStatus[] { projectStatus },
                queueSetSnapshot);
            SnapshotResponse response = new SnapshotResponse();

            response.ErrorMessages.Add(new ErrorMessage("Error 1"));
            response.ErrorMessages.Add(new ErrorMessage("Error 2"));
            response.RequestIdentifier = "request";
            response.Result            = ResponseResult.Success;
            response.Timestamp         = DateTime.Now;
            response.Snapshot          = snapshot;
            string actual   = response.ToString();
            string expected = string.Format(System.Globalization.CultureInfo.CurrentCulture, "<snapshotResponse 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}\" result=\"{1}\">" +
                                            "<error>Error 1</error>" +
                                            "<error>Error 2</error>" +
                                            "<snapshot>" +
                                            "<projects>" +
                                            "<projectStatus showForceBuildButton=\"true\" showStartStopButton=\"true\" serverName=\"{6}\" status=\"Running\" buildStatus=\"Success\" name=\"test project\" " +
                                            "queuePriority=\"0\" lastBuildDate=\"{3:yyyy-MM-ddTHH:mm:ss.FFFFFFF}\" nextBuildTime=\"{4:yyyy-MM-ddTHH:mm:ss.FFFFFFF}\">" +
                                            "<activity type=\"Sleeping\" />" +
                                            "<parameters />" +
                                            "</projectStatus>" +
                                            "</projects>" +
                                            "<queueSet>" +
                                            "<queue name=\"queue1\">" +
                                            "<queueRequest projectName=\"test project\" time=\"{5:yyyy-MM-ddTHH:mm:ss.FFFFFFF}\">" +
                                            "<activity type=\"Pending\" />" +
                                            "</queueRequest>" +
                                            "</queue>" +
                                            "</queueSet>" +
                                            "</snapshot>" +
                                            "</snapshotResponse>",
                                            response.RequestIdentifier,
                                            response.Result,
                                            response.Timestamp,
                                            projectStatus.LastBuildDate,
                                            projectStatus.NextBuildTime,
                                            DateTime.MinValue,
                                            Environment.MachineName);

            XDocument.Parse(actual).Should().BeEquivalentTo(XDocument.Parse(expected));
        }
        private CruiseServerSnapshot CreateEmptyQueuesSnapshot()
        {
            QueueSetSnapshot queueSetSnapshot = new QueueSetSnapshot();

            QueueSnapshot queueSnapshot1 = new QueueSnapshot("Queue1");

            queueSetSnapshot.Queues.Add(queueSnapshot1);

            QueueSnapshot queueSnapshot2 = new QueueSnapshot("Queue2");

            queueSetSnapshot.Queues.Add(queueSnapshot2);

            return(new CruiseServerSnapshot(null, queueSetSnapshot));
        }
        public void DetectQueueSetNotChanged()
        {
            snapshot1.Queues.Add(new QueueSnapshot("Test1"));
            snapshot2.Queues.Add(new QueueSnapshot("Test1"));
            QueueSnapshot queue1 = snapshot1.Queues[0];
            QueueSnapshot queue2 = snapshot2.Queues[0];

            // Same number of projects with no content
            AssertQueueSetChanged(false, snapshot1, snapshot2);

            // Same number of projects with content
            queue1.Requests.Add(new QueuedRequestSnapshot("Project1", ProjectActivity.CheckingModifications));
            queue2.Requests.Add(new QueuedRequestSnapshot("Project1", ProjectActivity.CheckingModifications));
            AssertQueueSetChanged(false, snapshot1, snapshot2);
        }
Esempio n. 19
0
 public void RequestsReturnsRequestsFromStatus()
 {
     var client = mocks.Create <CruiseServerClientBase>().Object;
     var server = InitialiseServer();
     var status = new QueueSnapshot
     {
         Requests =
         {
             new QueuedRequestSnapshot {
                 ProjectName = "Project 1"
             }
         }
     };
     var queue = new BuildQueue(client, server, status);
 }
Esempio n. 20
0
        public QueueSnapshot GetQueueSnapShot(int queueId)
        {
            QueueSnapshot snapShot = new QueueSnapshot();

                List<PDSFill> selectedPDSFillList = new List<PDSFill>();

                 var pdsQueues = new List<PDSQueue>()
                            {
                                new PDSQueue { StateId = (int)QueueStates.DUE, Name="DUE", Code="DUE"},
                                new PDSQueue { StateId = (int)QueueStates.ThirdPartyRejects, Name="3RD PARTY REJECTS", Code="MAR"},
                                new PDSQueue { StateId = (int)QueueStates.PrintLabel, Name="PRINT LABEL", Code="PLABEL"},
                                new PDSQueue { StateId = (int)QueueStates.RPHVerificaiton, Name="RPH VERIFICATION", Code="RPH"},
                                new PDSQueue { StateId = (int)QueueStates.WillCall, Name="WILL CALL",  Code="WILLCALL"}
                            };

                 using (var context = new PDSEntities())
                 {
                     var groupedFills = context.PDSFills.GroupBy(p => p.State);

                     foreach (var fillGroup in groupedFills)
                     {
                         int stateId = fillGroup.Key.Value;

                         if (pdsQueues.Count(p => p.StateId == stateId) > 0)
                         {
                             pdsQueues.Single(p => p.StateId == stateId).Count = fillGroup.Count();
                         }
                         if (fillGroup.Key.Value == queueId)
                         {
                             selectedPDSFillList = fillGroup.ToList();
                         }
                     }
                 }

                List<Fill> selectedFills = new List<Fill>();
                foreach (var pdsFill in selectedPDSFillList)
                {
                    var fill = new Fill();
                    MapPDSFilltoFill(pdsFill, fill);
                    selectedFills.Add(fill);

                }

                snapShot.Queues = pdsQueues;
                snapShot.SelectedQueueFills = selectedFills;

                return snapShot;
        }
Esempio n. 21
0
        public void UpdateValidatesArguments()
        {
            var client = mocks.Create <CruiseServerClientBase>().Object;
            var server = InitialiseServer();
            var status = new QueueSnapshot {
                QueueName = "Testing"
            };
            var queue = new BuildQueue(client, server, status);

            try
            {
                queue.Update(null);
                Assert.Fail("ArgumentNullException was expected");
            }
            catch (ArgumentNullException) { }
        }
        private CruiseServerSnapshot CreatePopulatedQueuesSnapshot()
        {
            CruiseServerSnapshot cruiseServerSnapshot = CreateEmptyQueuesSnapshot();
            QueueSetSnapshot     queueSetSnapshot     = cruiseServerSnapshot.QueueSetSnapshot;

            QueueSnapshot queueSnapshot1 = queueSetSnapshot.Queues[0];

            QueuedRequestSnapshot queuedRequestSnapshot1 = new QueuedRequestSnapshot("Project1", ProjectActivity.CheckingModifications);

            queueSnapshot1.Requests.Add(queuedRequestSnapshot1);

            QueuedRequestSnapshot queuedRequestSnapshot2 = new QueuedRequestSnapshot("Project2", ProjectActivity.Pending);

            queueSnapshot1.Requests.Add(queuedRequestSnapshot2);

            return(cruiseServerSnapshot);
        }
Esempio n. 23
0
        /// <summary>
        /// Initialise a new build queue.
        /// </summary>
        /// <param name="client">The underlying client.</param>
        /// <param name="server">The server this queue belongs to.</param>
        /// <param name="buildQueue">The actual build queue details.</param>
        public BuildQueue(CruiseServerClientBase client, Server server, QueueSnapshot buildQueue)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }
            if (server == null)
            {
                throw new ArgumentNullException("server");
            }
            if (buildQueue == null)
            {
                throw new ArgumentNullException("buildQueue");
            }

            this.client     = client;
            this.server     = server;
            this.buildQueue = buildQueue;
        }
        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");
        }
Esempio n. 25
0
        private static QueueSnapshot BuildQueueSnapshot(IIntegrationQueue queue)
        {
            QueueSnapshot queueSnapshot = new QueueSnapshot(queue.Name);

            for (int index = 0; index < queue.Count; index++)
            {
                IIntegrationQueueItem integrationQueueItem = (IIntegrationQueueItem)queue[index];
                // The first request in the queue shows it's real activity of CheckingModifications or Building
                // Everything else is in a pending state.
                ProjectActivity projectActivity = ProjectActivity.Pending;
                if (index == 0)
                {
                    projectActivity = integrationQueueItem.Project.CurrentActivity;
                }
                QueuedRequestSnapshot queuedRequestSnapshot = new QueuedRequestSnapshot(
                    integrationQueueItem.Project.Name,
                    projectActivity,
                    integrationQueueItem.IntegrationRequest.RequestTime);
                queueSnapshot.Requests.Add(queuedRequestSnapshot);
            }
            return(queueSnapshot);
        }
        public void GetIntegrationQueueSnapshotForMultipleQueues()
        {
            project1Mock.SetupResult("CurrentActivity", ProjectActivity.CheckingModifications);
            queueNotifier1Mock.Expect("NotifyEnteringIntegrationQueue");
            queueNotifier1Mock.ExpectNoCall("NotifyExitingIntegrationQueue", typeof(bool));
            integrationQueue1.Enqueue(integrationQueueItem1);

            // Second item is different project and different queue
            project2Mock.SetupResult("CurrentActivity", ProjectActivity.Pending);
            queueNotifier2Mock.Expect("NotifyEnteringIntegrationQueue");
            queueNotifier2Mock.ExpectNoCall("NotifyExitingIntegrationQueue", typeof(bool));
            integrationQueue2.Enqueue(integrationQueueItem2);

            QueueSetSnapshot queueSetSnapshot = integrationQueues.GetIntegrationQueueSnapshot();

            Assert.AreEqual(2, queueSetSnapshot.Queues.Count);

            foreach (QueueSnapshot namedQueueSnapshot in queueSetSnapshot.Queues)
            {
                Assert.AreEqual(1, namedQueueSnapshot.Requests.Count);
            }

            QueueSnapshot firstQueueSnapshot = queueSetSnapshot.Queues[0];

            Assert.AreEqual(1, firstQueueSnapshot.Requests.Count);
            QueuedRequestSnapshot firstQueuedRequestSnapshot = firstQueueSnapshot.Requests[0];

            Assert.AreEqual("ProjectOne", firstQueuedRequestSnapshot.ProjectName);

            QueueSnapshot secondQueueSnapshot = queueSetSnapshot.Queues[1];

            Assert.AreEqual(1, secondQueueSnapshot.Requests.Count);
            QueuedRequestSnapshot secondQueuedRequestSnapshot = secondQueueSnapshot.Requests[0];

            Assert.AreEqual("ProjectTwo", secondQueuedRequestSnapshot.ProjectName);

            VerifyAll();
        }
Esempio n. 27
0
        public ProbeResult Execute <T>(T snapshot)
        {
            QueueSnapshot data = snapshot as QueueSnapshot;
            ProbeResult   result;

            var probeData = new List <ProbeData>
            {
                new ProbeDataImpl("Messages.Incoming.Rate", data.Messages.Incoming.Rate.ToString()),
                new ProbeDataImpl("Messages.Acknowledged.Rate", data.Messages.Acknowledged.Rate.ToString())
            };

            if (data.Messages.Incoming.Rate > data.Messages.Acknowledged.Rate)
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Warning, out var article);
                result = new WarningProbeResult(data.Node,
                                                data.Identifier,
                                                Metadata.Id,
                                                Metadata.Name,
                                                ComponentType,
                                                probeData,
                                                article);
            }
            else
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Healthy, out var article);
                result = new HealthyProbeResult(data.Node,
                                                data.Identifier,
                                                Metadata.Id,
                                                Metadata.Name,
                                                ComponentType,
                                                probeData,
                                                article);
            }

            NotifyObservers(result);

            return(result);
        }
Esempio n. 28
0
        public ProbeResult Execute <T>(T snapshot)
        {
            QueueSnapshot data = snapshot as QueueSnapshot;
            ProbeResult   result;

            var probeData = new List <ProbeData>
            {
                new ProbeDataImpl("Memory.PagedOut.Total", data.Memory.PagedOut.Total.ToString())
            };

            if (data.Memory.PagedOut.Total > 0)
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Unhealthy, out var article);
                result = new UnhealthyProbeResult(data.Node,
                                                  data.Identifier,
                                                  Metadata.Id,
                                                  Metadata.Name,
                                                  ComponentType,
                                                  probeData,
                                                  article);
            }
            else
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Healthy, out var article);
                result = new HealthyProbeResult(data.Node,
                                                data.Identifier,
                                                Metadata.Id,
                                                Metadata.Name,
                                                ComponentType,
                                                probeData,
                                                article);
            }

            NotifyObservers(result);

            return(result);
        }
Esempio n. 29
0
        public void UpdateFiresPropertyChangedWhenMessageIsAdded()
        {
            mocks = new MockRepository(MockBehavior.Default);
            var client = mocks.Create <CruiseServerClientBase>().Object;
            var server = InitialiseServer();
            var status = new QueueSnapshot
            {
                Requests =
                {
                    new QueuedRequestSnapshot {
                        ProjectName = "Project 1"
                    }
                }
            };
            var queue      = new BuildQueue(client, server, status);
            var eventFired = false;

            var newStatus = new QueueSnapshot
            {
                Requests =
                {
                    new QueuedRequestSnapshot {
                        ProjectName = "Project 1"
                    },
                    new QueuedRequestSnapshot {
                        ProjectName = "Project 2"
                    }
                }
            };

            queue.BuildQueueRequestAdded += (o, e) =>
            {
                eventFired = true;
            };
            queue.Update(newStatus);
            Assert.IsTrue(eventFired, "BuildQueueRequestAdded for Requests change not fired");
        }
Esempio n. 30
0
        private QueueSetSnapshot ConvertDashboardQueues(DashboardQueue[] dashboardQueues)
        {
            QueueSetSnapshot queueSetSnapshot = new QueueSetSnapshot();

            if (dashboardQueues != null)
            {
                foreach (DashboardQueue dashboardQueue in dashboardQueues)
                {
                    QueueSnapshot queueSnapshot = new QueueSnapshot(dashboardQueue.Name);
                    if (dashboardQueue.Requests != null)
                    {
                        foreach (DashboardQueuedRequest dashboardQueuedRequest in dashboardQueue.Requests)
                        {
                            QueuedRequestSnapshot queuedRequestSnapshot = new QueuedRequestSnapshot(
                                dashboardQueuedRequest.ProjectName,
                                new ProjectActivity(dashboardQueuedRequest.Activity));
                            queueSnapshot.Requests.Add(queuedRequestSnapshot);
                        }
                    }
                    queueSetSnapshot.Queues.Add(queueSnapshot);
                }
            }
            return(queueSetSnapshot);
        }
        /// <summary>
        /// Updates the details on a build queue.
        /// </summary>
        /// <param name="value">The new build queue details.</param>
        public void Update(QueueSnapshot value)
        {
            // Validate the arguments
            if (value == null) throw new ArgumentNullException("value");

            // Find all the changed properties
            var changes = new List<string>();
            var newRequests = new List<BuildQueueRequest>();
            var oldRequests = new List<BuildQueueRequest>();

            lock (syncLock)
            {
                // Check for any request differences
                var requestValues = new Dictionary<BuildQueueRequest, QueuedRequestSnapshot>();
                var oldRequestNames = new List<string>(requests.Keys);
                foreach (var request in value.Requests)
                {
                    // Check if this request has already been loaded
                    var requestName = request.ProjectName;
                    if (oldRequestNames.Contains(requestName))
                    {
                        requestValues.Add(requests[requestName], request);
                        oldRequestNames.Remove(requestName);
                    }
                    else
                    {
                        // Otherwise this is a new request
                        var newRequest = new BuildQueueRequest(client, this, request);
                        newRequests.Add(newRequest);
                    }
                }

                // Store the old request
                foreach (var request in oldRequestNames)
                {
                    oldRequests.Add(requests[request]);
                }

                // Perform the actual update
                foreach (var request in oldRequestNames)
                {
                    requests.Remove(request);
                }
                foreach (var request in newRequests)
                {
                    if (!requests.ContainsKey(request.Name))
                    {
                        requests.Add(request.Name, request);
                    }
                }
                buildQueue = value;

                // Update all the requests
                foreach (var requestValue in requestValues)
                {
                    requestValue.Key.Update(requestValue.Value);
                }
            }

            // Tell any listeners about any changes
            foreach (var request in newRequests)
            {
                FireBuildQueueRequestAdded(request);
            }
            foreach (var request in oldRequests)
            {
                FireBuildQueueRequestRemoved(request);
            }
            foreach (var change in changes)
            {
                FirePropertyChanged(change);
            }
        }
Esempio n. 32
0
        public ProbeResult Execute <T>(T snapshot)
        {
            ProbeResult   result;
            QueueSnapshot data = snapshot as QueueSnapshot;

            if (_config.IsNull() || _config.Probes.IsNull())
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.NA, out var article);
                result = new NotApplicableProbeResult(data.IsNotNull() ? data.Node : null,
                                                      data.IsNotNull() ? data.Identifier : null,
                                                      Metadata.Id,
                                                      Metadata.Name,
                                                      ComponentType,
                                                      article);

                NotifyObservers(result);

                return(result);
            }

            var probeData = new List <ProbeData>
            {
                new ProbeDataImpl("ConsumerUtilization", data.ConsumerUtilization.ToString()),
                new ProbeDataImpl("ConsumerUtilizationThreshold", _config.Probes.ConsumerUtilizationThreshold.ToString())
            };

            if (data.ConsumerUtilization >= _config.Probes.ConsumerUtilizationThreshold &&
                data.ConsumerUtilization < 1.0M &&
                _config.Probes.ConsumerUtilizationThreshold <= 1.0M)
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Warning, out var article);
                result = new WarningProbeResult(data.Node,
                                                data.Identifier,
                                                Metadata.Id,
                                                Metadata.Name,
                                                ComponentType,
                                                probeData,
                                                article);
            }
            else if (data.ConsumerUtilization < _config.Probes.ConsumerUtilizationThreshold &&
                     _config.Probes.ConsumerUtilizationThreshold <= 1.0M)
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Unhealthy, out var article);
                result = new UnhealthyProbeResult(data.Node,
                                                  data.Identifier,
                                                  Metadata.Id,
                                                  Metadata.Name,
                                                  ComponentType,
                                                  probeData,
                                                  article);
            }
            else
            {
                _kb.TryGet(Metadata.Id, ProbeResultStatus.Healthy, out var article);
                result = new HealthyProbeResult(data.Node,
                                                data.Identifier,
                                                Metadata.Id,
                                                Metadata.Name,
                                                ComponentType,
                                                probeData,
                                                article);
            }

            NotifyObservers(result);

            return(result);
        }
Esempio n. 33
0
        /// <summary>
        /// Updates the details on a build queue.
        /// </summary>
        /// <param name="value">The new build queue details.</param>
        public void Update(QueueSnapshot value)
        {
            // Validate the arguments
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            // Find all the changed properties
            var changes     = new List <string>();
            var newRequests = new List <BuildQueueRequest>();
            var oldRequests = new List <BuildQueueRequest>();

            lock (syncLock)
            {
                // Check for any request differences
                var requestValues   = new Dictionary <BuildQueueRequest, QueuedRequestSnapshot>();
                var oldRequestNames = new List <string>(requests.Keys);
                foreach (var request in value.Requests)
                {
                    // Check if this request has already been loaded
                    var requestName = request.ProjectName;
                    if (oldRequestNames.Contains(requestName))
                    {
                        requestValues.Add(requests[requestName], request);
                        oldRequestNames.Remove(requestName);
                    }
                    else
                    {
                        // Otherwise this is a new request
                        var newRequest = new BuildQueueRequest(client, this, request);
                        newRequests.Add(newRequest);
                    }
                }

                // Store the old request
                foreach (var request in oldRequestNames)
                {
                    oldRequests.Add(requests[request]);
                }

                // Perform the actual update
                foreach (var request in oldRequestNames)
                {
                    requests.Remove(request);
                }
                foreach (var request in newRequests)
                {
                    if (!requests.ContainsKey(request.Name))
                    {
                        requests.Add(request.Name, request);
                    }
                }
                buildQueue = value;

                // Update all the requests
                foreach (var requestValue in requestValues)
                {
                    requestValue.Key.Update(requestValue.Value);
                }
            }

            // Tell any listeners about any changes
            foreach (var request in newRequests)
            {
                FireBuildQueueRequestAdded(request);
            }
            foreach (var request in oldRequests)
            {
                FireBuildQueueRequestRemoved(request);
            }
            foreach (var change in changes)
            {
                FirePropertyChanged(change);
            }
        }