public void CompletingAnIntegrationRemovesItFromActiveRequests()
 {
     var project = new ProjectStub();
     var queue = new Queue();
     var context = new IntegrationContext(project);
     queue.AskToIntegrate(context);
     context.Complete();
     Assert.AreEqual(0, queue.GetActiveRequests().Count());
     Assert.AreEqual(0, queue.GetPendingRequests().Count());
 }
 public void AskToIntegrateWillTriggerProjectIfFirst()
 {
     var project = new ProjectStub();
     var queue = new Queue();
     var context = new IntegrationContext(project);
     queue.AskToIntegrate(context);
     var canIntegrate = context.Wait(TimeSpan.FromSeconds(5));
     Assert.IsTrue(canIntegrate);
     var active = queue.GetActiveRequests();
     Assert.AreEqual(1, active.Count());
     Assert.AreEqual(0, queue.GetPendingRequests().Count());
     Assert.AreSame(active.First(), context);
 }
 public void CompletingReleasingSubsequentItems()
 {
     var queue = new Queue();
     var project1 = new ProjectStub();
     var project2 = new ProjectStub();
     var context1 = new IntegrationContext(project1);
     var context2 = new IntegrationContext(project2);
     queue.AskToIntegrate(context1);
     queue.AskToIntegrate(context2);
     context1.Complete();
     var active = queue.GetActiveRequests();
     Assert.AreEqual(1, active.Count());
     Assert.AreEqual(0, queue.GetPendingRequests().Count());
     Assert.AreSame(context2, active.First());
 }
 public void AskToIntegrateWillQueueSubsequentItems()
 {
     var queue = new Queue();
     var project1 = new ProjectStub();
     var project2 = new ProjectStub();
     var context1 = new IntegrationContext(project1);
     var context2 = new IntegrationContext(project2);
     queue.AskToIntegrate(context1);
     queue.AskToIntegrate(context2);
     var active = queue.GetActiveRequests();
     var pending = queue.GetPendingRequests();
     Assert.AreEqual(1, active.Count());
     Assert.AreEqual(1, pending.Count());
     Assert.AreSame(active.First(), context1);
     Assert.AreSame(pending.First(), context2);
 }
 public void ValidateDetectsDuplicateChildItems()
 {
     var errorAdded = false;
     var queue1 = new Queue("Queue");
     var queue2 = new Queue("Queue");
     var queue3 = new Queue("OtherQueue");
     var server = new Server("Server", queue1, queue2, queue3);
     var validationStub = new ValidationLogStub
                              {
                                  OnAddErrorMessage = (m, a) =>
                                                          {
                                                              Assert.AreEqual(
                                                                  "Duplicate {1} name detected: '{0}'", m);
                                                              CollectionAssert.AreEqual(
                                                                  new[] { "Queue", "child" },
                                                                  a);
                                                              errorAdded = true;
                                                          }
                              };
     server.Validate(validationStub);
     Assert.IsTrue(errorAdded);
 }
 public void LocateMatchesChild()
 {
     var childQueue = new Queue("ChildQueue");
     var queue = new Queue("RootQueue", childQueue);
     var server = new Server("Local", queue);
     var actual = server.Locate("urn:ccnet:local:rootQueue:childQueue");
     Assert.AreSame(childQueue, actual);
 }
 public void ListProjectsReturnsOnlyTheProjects()
 {
     var project = new Project();
     var childQueue = new Queue();
     var parentQueue = new Queue("Test", project, childQueue);
     var projects = parentQueue.ListProjects();
     var expected = new[] { project };
     CollectionAssert.AreEqual(expected, projects);
 }
 public void ValidateDetectsDuplicateChildItems()
 {
     var errorAdded = false;
     var project1 = new Project("Project");
     var project2 = new Project("Project");
     var project3 = new Project("OtherProject");
     var queue = new Queue("QueueName", project1, project2, project3);
     var validationStub = new ValidationLogStub
                              {
                                  OnAddErrorMessage = (m, a) =>
                                                          {
                                                              Assert.AreEqual(
                                                                  "Duplicate {1} name detected: '{0}'", m);
                                                              CollectionAssert.AreEqual(
                                                                  new[] { "Project", "child" },
                                                                  a);
                                                              errorAdded = true;
                                                          }
                              };
     queue.Validate(validationStub);
     Assert.IsTrue(errorAdded);
 }
 public void UniversalNameHandlesChildItem()
 {
     var child = new Queue("ChildQueue");
     var parent = new Queue("ParentQueue", child);
     new Server(parent)
         {
             Name = "ServerName"
         };
     var actual = child.UniversalName;
     Assert.AreEqual("urn:ccnet:ServerName:ParentQueue:ChildQueue", actual);
 }
 public void UniversalNameHandlesTopLevel()
 {
     var queue = new Queue("TestQueue");
     new Server(queue)
         {
             Name = "ServerName"
         };
     var actual = queue.UniversalName;
     Assert.AreEqual("urn:ccnet:ServerName:TestQueue", actual);
 }
 public void LocateMatchesTask()
 {
     var task = new Comment();
     var project = new Project("TestProject", task);
     var queue = new Queue("RootQueue", project);
     var server = new Server("Local", queue);
     var actual = server.Locate("urn:ccnet:local:testProject:comment");
     Assert.AreSame(task, actual);
 }
        public void ReadRoundRobinOfQueues()
        {
            var configuration = LoadConfiguration(
                            AssemblyHelper.RetrieveExampleFile("RoundRobinOfQueues"));

            Assert.IsNotNull(configuration);
            Assert.AreEqual("2.0", configuration.Version.ToString(2));
            var queue1 = new Queue("Queue1", new Project("Project1"), new Project("Project2"));
            var queue2 = new Queue("Queue2", new Project("Project3"), new Project("Project4"));
            this.VerifyChildren(
                configuration.Children,
                new RoundRobin("RoundRobin", queue1, queue2));
        }
 public void WriteSimpleQueue()
 {
     var project = new Project("Project1");
     Queue.SetPriority(project, 3);
     var configuration = new Queue(
         "Queue1",
         project,
         new Project("Project2"));
     PerformSerialisationTest(configuration, "SimpleQueue");
 }
        public void HandlesQueueOfQueues()
        {
            var integrations = new List<string>();
            var contexts = new List<IntegrationContext>();
            var projects = new Project[6];
            for (var loop = 0; loop < projects.Length; loop++)
            {
                var project = new Project("Project" + loop);
                projects[loop] = project;
            }

            var queue1 = new Queue("Queue1", projects[0], projects[1]);
            var queue2 = new Queue("Queue2", projects[2], projects[3]);
            var queue3 = new Queue("Queue3", projects[4], projects[5]);
            var queue4 = new Queue("Queue4", queue1, queue2, queue3)
                             {
                                 AllowedActive = 2
                             };

            // Trying to simulate async code here - need to fire the completion events in the
            // order they are released
            var completed = new List<IntegrationContext>();
            foreach (var project in projects)
            {
                var context = new IntegrationContext(project);
                contexts.Add(context);
                project.Host.AskToIntegrate(context);
                if (context.IsLocked)
                {
                    context.Released += (o, e) =>
                                            {
                                                var subContext = o as IntegrationContext;
                                                completed.Add(subContext);
                                                integrations.Add(subContext.Item.Name);
                                            };
                }
                else
                {
                    completed.Add(context);
                    integrations.Add(project.Name);
                }
            }

            // completed will be modified at the same time we are iterating through it so can't
            // use foreach here
            for (var loop = 0; loop < completed.Count; loop++)
            {
                completed[loop].Complete();
            }

            // These should both be empty at the end of the process
            Assert.AreEqual(0, queue4.GetActiveRequests().Count());
            Assert.AreEqual(0, queue4.GetPendingRequests().Count());

            // Check that there is the correct order
            var expected = new[]
                               {
                                   "Project0",
                                   "Project2",
                                   "Project4",
                                   "Project1",
                                   "Project3",
                                   "Project5"
                               };
            CollectionAssert.AreEqual(expected, integrations);
        }
 public void StartingAQueueWithAProjectSetsTheHost()
 {
     var project = new Project();
     var queue = new Queue("Test", project);
     Assert.AreSame(queue, project.Host);
 }
 public void AddingAQueueSetsItsHostToTheQueue()
 {
     var queue1 = new Queue();
     var queue2 = new Queue();
     queue1.Children.Add(queue2);
     Assert.AreSame(queue1, queue2.Host);
 }
 public void AddingAProjectSetsItsHostToTheQueue()
 {
     var queue = new Queue();
     var project = new Project();
     queue.Children.Add(project);
     Assert.AreSame(queue, project.Host);
 }
 public void ItemTypeIsQueue()
 {
     var item = new Queue();
     Assert.AreEqual("Queue", item.ItemType);
 }
 public void LocateReturnsNullIfItemIsNotProjectOrRootStructure()
 {
     var project = new Project("TestProject");
     var queue = new Queue("RootQueue", project);
     var server = new Server("Local", queue);
     var actual = server.Locate("urn:ccnet:local:somethingElse");
     Assert.IsNull(actual);
 }
 public void ValidateValidatesChildren()
 {
     var validated = false;
     var projectStub = new ProjectStub
                           {
                               OnValidate = vl => validated = true
                           };
     var validationMock = new Mock<IValidationLog>();
     var queue = new Queue("Test", projectStub);
     queue.Validate(validationMock.Object);
     Assert.IsTrue(validated);
 }
 public void UniversalNameHandlesProjectAsChild()
 {
     var project = new Project("ProjectName");
     var queue = new Queue("QueueName", project);
     new Server(queue)
         {
             Name = "ServerName"
         };
     var actual = project.UniversalName;
     Assert.AreEqual("urn:ccnet:ServerName:ProjectName", actual);
 }
 public void WriteQueueOfQueues()
 {
     var queue1 = new Queue("Queue1", new Project("Project1"), new Project("Project2"));
     var queue2 = new Queue("Queue2", new Project("Project3"), new Project("Project4"));
     var configuration = new Queue("Queue3", queue1, queue2)
                             {
                                 AllowedActive = 2
                             };
     PerformSerialisationTest(configuration, "QueueOfQueues");
 }
 public void RemovingAChildResetsItsParent()
 {
     var project = new Project();
     var queue = new Queue("Test", project);
     queue.Children.Remove(project);
     Assert.IsNull(project.Host);
 }
 public void WriteRoundRobinOfQueues()
 {
     var queue1 = new Queue("Queue1", new Project("Project1"), new Project("Project2"));
     var queue2 = new Queue("Queue2", new Project("Project3"), new Project("Project4"));
     var configuration = new RoundRobin("RoundRobin", queue1, queue2);
     PerformSerialisationTest(configuration, "RoundRobinOfQueues");
 }
 public void ValidateDetectsDuplicateProjects()
 {
     var errorAdded = false;
     var project1 = new Project("Project");
     var project2 = new Project("Project");
     var childQueue = new Queue("Test", project2);
     var project3 = new Project("OtherProject");
     var server = new Server("Server", project1, childQueue, project3);
     var validationStub = new ValidationLogStub
                              {
                                  OnAddErrorMessage = (m, a) =>
                                                          {
                                                              Assert.AreEqual(
                                                                  "Duplicate {1} name detected: '{0}'", m);
                                                              CollectionAssert.AreEqual(
                                                                  new[] { "Project", "project" },
                                                                  a);
                                                              errorAdded = true;
                                                          }
                              };
     server.Validate(validationStub);
     Assert.IsTrue(errorAdded);
 }