public void RefreshFiresProjectAddedWhenANewProjectIsFound()
 {
     var watcher = new TestWatcher();
     var monitor = InitialiseServer(watcher);
     mocks.ReplayAll();
     var hasFired = false;
     monitor.ProjectAdded += (o, e) =>
     {
         hasFired = true;
     };
     monitor.Refresh();
     watcher.Snapshot.ProjectStatuses = new ProjectStatus[]{
         new ProjectStatus {
             Name = "Project1"
         },
         new ProjectStatus{
             Name = "Project2"
         },
         new ProjectStatus{
             Name = "Project3"
         }
     };
     monitor.Refresh();
     Assert.IsTrue(hasFired);
 }
        public void RefreshFiresProjectAddedWhenANewProjectIsFound()
        {
            var watcher = new TestWatcher();
            var monitor = InitialiseServer(watcher);

            mocks.ReplayAll();
            var hasFired = false;

            monitor.ProjectAdded += (o, e) =>
            {
                hasFired = true;
            };
            monitor.Refresh();
            watcher.Snapshot.ProjectStatuses = new ProjectStatus[] {
                new ProjectStatus {
                    Name = "Project1"
                },
                new ProjectStatus {
                    Name = "Project2"
                },
                new ProjectStatus {
                    Name = "Project3"
                }
            };
            monitor.Refresh();
            Assert.IsTrue(hasFired);
        }
 public void RefreshCallsRefreshOnWatcher()
 {
     var watcher = new TestWatcher();
     var monitor = InitialiseServer(watcher);
     mocks.ReplayAll();
     monitor.Refresh();
     Assert.IsTrue(watcher.Refreshed);
 }
        public void RefreshCallsRefreshOnWatcher()
        {
            var watcher = new TestWatcher();
            var monitor = InitialiseServer(watcher);

            monitor.Refresh();
            Assert.IsTrue(watcher.Refreshed);
        }
        public void Exists_should_add_watch_triggered_by_DataChanged()
        {
            var path    = "/watch/a";
            var watcher = new TestWatcher();

            client.Exists(new ExistsRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.SetData(new SetDataRequest(path, new byte[] { 1, 2, 3 })).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.DataChanged, path);
        }
        public void Exists_should_add_watch_not_triggered_by_ChildrenChanged()
        {
            var path    = "/watch/a/b";
            var watcher = new TestWatcher();

            client.Exists(new ExistsRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.Create(new CreateRequest(path + "/f", CreateMode.Persistent)).EnsureSuccess();
            watcher.ShouldNotBeTriggered();
        }
        public void GetChildren_should_add_watch_not_triggered_by_ChildrenChanged_delete_nested_child()
        {
            var path    = "/watch/a";
            var watcher = new TestWatcher();

            client.GetChildren(new GetChildrenRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.Delete(new DeleteRequest(path + "/b/c")).EnsureSuccess();
            watcher.ShouldNotBeTriggered();
        }
        public void GetChildren_should_add_watch_not_triggered_by_ChildrenChanged_set_data_child()
        {
            var path    = "/watch/a/b";
            var watcher = new TestWatcher();

            client.GetChildren(new GetChildrenRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.SetData(new SetDataRequest(path + "/c", new byte[] { 1, 2, 3 })).EnsureSuccess();
            watcher.ShouldNotBeTriggered();
        }
        public void Exists_should_add_watch_triggered_by_Created()
        {
            var path    = "/watch/new";
            var watcher = new TestWatcher();

            client.Exists(new ExistsRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.Create(new CreateRequest(path, CreateMode.Persistent)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.Created, path);
        }
        public void Exists_should_add_watch_triggered_by_Deleted()
        {
            var path    = "/watch/a/e";
            var watcher = new TestWatcher();

            client.Exists(new ExistsRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.Delete(new DeleteRequest(path)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.Deleted, path);
        }
        public void GetChildren_should_add_watch_triggered_by_ChildrenChanged_delete_child()
        {
            var path    = "/watch/a/b";
            var watcher = new TestWatcher();

            client.GetChildren(new GetChildrenRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.Delete(new DeleteRequest(path + "/c")).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.ChildrenChanged, path);
        }
        public void GetChildren_should_not_add_watch_triggered_by_Created()
        {
            var path    = "/watch/new";
            var watcher = new TestWatcher();

            client.GetChildren(new GetChildrenRequest(path)
            {
                Watcher = watcher
            }).Status.Should().Be(ZooKeeperStatus.NodeNotFound);
            client.Create(new CreateRequest(path, CreateMode.Persistent)).EnsureSuccess();
            watcher.ShouldNotBeTriggered();
        }
        public void Should_not_be_triggered_by_dispose()
        {
            var path        = "/watch/a";
            var watcher     = new TestWatcher();
            var localClient = GetClient();

            localClient.GetData(new GetDataRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            localClient.Dispose();
            watcher.ShouldNotBeTriggered();
        }
        public void Exists_should_not_trigger_by_duplicated_events()
        {
            var path    = "/watch/a/e";
            var watcher = new TestWatcher();

            for (var times = 0; times < 5; times++)
            {
                client.Exists(new ExistsRequest(path)
                {
                    Watcher = watcher
                }).EnsureSuccess();
            }
            client.Delete(new DeleteRequest(path)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.Deleted, path);
        }
        public void Exists_should_be_trigger_by_duplicated_events_without_cache()
        {
            var path    = "/watch/a/e";
            var watcher = new TestWatcher();

            for (var times = 0; times < 5; times++)
            {
                client.Exists(new ExistsRequest(path)
                {
                    Watcher = watcher, IgnoreWatchersCache = true
                }).EnsureSuccess();
            }
            client.Delete(new DeleteRequest(path)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(Enumerable.Repeat((NodeChangedEventType.Deleted, path), 5).ToArray());
        }
        public void GetChildren_should_not_trigger_by_duplicated_events()
        {
            var path    = "/watch/a/b";
            var watcher = new TestWatcher();

            for (var times = 0; times < 5; times++)
            {
                client.GetChildren(new GetChildrenRequest(path)
                {
                    Watcher = watcher
                }).EnsureSuccess();
            }
            client.Delete(new DeleteRequest(path + "/c")).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.ChildrenChanged, path);
        }
        public void GetData_should_trigger_by_duplicated_events_without_reattach()
        {
            var path    = "/watch/a/b";
            var watcher = new TestWatcher();

            client.GetData(new GetDataRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.SetData(new SetDataRequest(path, new byte[] { 1, 2, 3 })).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.DataChanged, path);

            client.SetData(new SetDataRequest(path, new byte[] { 1, 2, 4 })).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.DataChanged, path);
        }
        public void Exists_should_trigger_by_duplicated_events_without_reattach()
        {
            var path    = "/watch/new";
            var watcher = new TestWatcher();

            client.Exists(new ExistsRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.Create(new CreateRequest(path, CreateMode.Persistent)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.Created, path);

            client.Delete(new DeleteRequest(path)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.Created, path);
        }
        public void GetChildren_should_trigger_by_duplicated_events_without_reattach()
        {
            var path    = "/watch/a/b";
            var watcher = new TestWatcher();

            client.GetChildren(new GetChildrenRequest(path)
            {
                Watcher = watcher
            }).EnsureSuccess();
            client.Create(new CreateRequest(path + "/f", CreateMode.Persistent)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.ChildrenChanged, path);

            client.Create(new CreateRequest(path + "/g", CreateMode.Persistent)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(NodeChangedEventType.ChildrenChanged, path);
        }
        public void RefreshUpdatesProjectDetails()
        {
            var watcher = new TestWatcher();
            var monitor = InitialiseServer(watcher);

            monitor.Refresh();
            watcher.Snapshot.ProjectStatuses = new ProjectStatus[] {
                new ProjectStatus {
                    Name        = "Project1",
                    BuildStatus = IntegrationStatus.Success
                },
                new ProjectStatus {
                    Name        = "Project2",
                    BuildStatus = IntegrationStatus.Failure
                }
            };
            monitor.Refresh();
            Assert.AreEqual(IntegrationStatus.Success, monitor.FindProject("Project1").BuildStatus);
            Assert.AreEqual(IntegrationStatus.Failure, monitor.FindProject("Project2").BuildStatus);
        }
        public void RefreshFiresProjectRemovedWhenAProjectIsMissing()
        {
            var watcher  = new TestWatcher();
            var monitor  = InitialiseServer(watcher);
            var hasFired = false;

            monitor.ProjectRemoved += (o, e) =>
            {
                hasFired = true;
                Assert.AreEqual(e.Project.Name, "Project2");
            };
            monitor.Refresh();
            watcher.Snapshot.ProjectStatuses = new ProjectStatus[] {
                new ProjectStatus {
                    Name = "Project1"
                }
            };
            monitor.Refresh();
            Assert.IsTrue(hasFired);
        }
        public void Should_not_be_triggered_on_client_disconnect(CreateMode createMode)
        {
            var path        = "/watch/new";
            var watcher     = new TestWatcher();
            var localClient = GetClient();

            localClient.Create(new CreateRequest(path, createMode)).EnsureSuccess();
            localClient.Exists(new ExistsRequest(path)
            {
                Watcher = watcher
            });

            Ensemble.Stop();
            WaitForDisconnectedState(localClient);
            Ensemble.Start();

            localClient.Delete(new DeleteRequest(path)).EnsureSuccess();
            watcher.ShouldBeTriggeredBy(
                (NodeChangedEventType.Deleted, path));
        }
        public void Should_not_be_triggered_on_client_session_expire(CreateMode createMode)
        {
            var path        = "/watch/new";
            var watcher     = new TestWatcher();
            var localClient = GetClient();

            localClient.Create(new CreateRequest(path, createMode)).EnsureSuccess();
            localClient.Exists(new ExistsRequest(path)
            {
                Watcher = watcher
            });

            KillSession(localClient, Ensemble.ConnectionString).GetAwaiter().GetResult();

            var result = localClient.Delete(new DeleteRequest(path));

            result.Status.Should().Be(createMode.IsEphemeral() ? ZooKeeperStatus.NodeNotFound : ZooKeeperStatus.Ok);

            watcher.ShouldNotBeTriggered();
        }
 public void RefreshFiresProjectRemovedWhenAProjectIsMissing()
 {
     var watcher = new TestWatcher();
     var monitor = InitialiseServer(watcher);
     mocks.ReplayAll();
     var hasFired = false;
     monitor.ProjectRemoved += (o, e) =>
     {
         hasFired = true;
         Assert.AreEqual(e.Project.Name, "Project2");
     };
     monitor.Refresh();
     watcher.Snapshot.ProjectStatuses = new ProjectStatus[]{
         new ProjectStatus {
             Name = "Project1"
         }
     };
     monitor.Refresh();
     Assert.IsTrue(hasFired);
 }
 public void RefreshUpdatesProjectDetails()
 {
     var watcher = new TestWatcher();
     var monitor = InitialiseServer(watcher);
     mocks.ReplayAll();
     monitor.Refresh();
     watcher.Snapshot.ProjectStatuses = new ProjectStatus[]{
         new ProjectStatus {
             Name = "Project1",
             BuildStatus = IntegrationStatus.Success
         },
         new ProjectStatus {
             Name = "Project2",
             BuildStatus = IntegrationStatus.Failure
         }
     };
     monitor.Refresh();
     Assert.AreEqual(IntegrationStatus.Success, monitor.FindProject("Project1").BuildStatus);
     Assert.AreEqual(IntegrationStatus.Failure, monitor.FindProject("Project2").BuildStatus);
 }