public Task GetNotifications(int number, bool recursive)
        {
            using var helper = new HelperTest();

            using var watcher = new Watcher();
            watcher.Add(new Request(helper.Folder, recursive));

            var added = 0;

            watcher.OnAddedAsync += (ft, t) =>
            {
                ++added;
                return(Task.CompletedTask);
            };

            // start
            watcher.Start();
            for (var i = 0; i < number; ++i)
            {
                helper.AddFile();
            }

            // wait a bit
            _ = SpinWait.SpinUntil(() =>
            {
                return(number == added);
            }, number * 1000);

            watcher.Stop();

            // stop
            Assert.AreEqual(number, added);
            return(Task.CompletedTask);
        }
        public async Task TestSimpleAddFilesNotification(int numberToAdd, bool recursive)
        {
            using var helper = new HelperTest();

            // the number of files we will be adding
            var numberAdded = 0;

            // first we need to create the watcher
            using (var watcher = new Watcher())
            {
                watcher.Add(new Request(helper.Folder, recursive));
                watcher.OnAddedAsync += (fse, token) =>
                {
                    TestContext.Out.WriteLine("Message to write to log");
                    if (fse.IsFile)
                    {
                        ++numberAdded;
                    }
                    return(Task.CompletedTask);
                };
                watcher.Start();
                for (var i = 0; i < numberToAdd; ++i)
                {
                    // create an empty file
                    helper.AddFile();
                    await Task.Yield();
                }

                // give a bit of time
                _ = SpinWait.SpinUntil(() => numberAdded >= numberToAdd, numberToAdd * 1000);
            }
            Assert.AreEqual(numberToAdd, numberAdded);
        }
Exemplo n.º 3
0
        public void IfWeHaveNoFoldersToWatchThenStartReturnsFalse()
        {
            using var helper  = new HelperTest();
            using var watcher = new Watcher();

            // start the watcher, we return false as we have not folders.
            Assert.IsFalse(watcher.Start());

            // stop it.
            watcher.Stop();
        }
        public void GetNotificationsMultipleWatchers(int number, bool recursive)
        {
            using var helper = new HelperTest();

            using var watcher1 = new Watcher();
            watcher1.Add(new Request(helper.Folder, recursive, new Rates(500)));
            using var watcher2 = new Watcher();
            watcher2.Add(new Request(helper.Folder, recursive, new Rates(500)));

            var added1 = 0;
            var added2 = 0;

            watcher1.OnAddedAsync += (ft, t) =>
            {
                Interlocked.Increment(ref added1);
                return(Task.CompletedTask);
            };
            watcher2.OnAddedAsync += (ft, t) =>
            {
                Interlocked.Increment(ref added2);
                return(Task.CompletedTask);
            };

            // start
            watcher1.Start();
            watcher2.Start();

            TestContext.Out.WriteLine("Waiting for watchers!");

            //we then need to wait a bit for all the workers to have started.
            var timeout = number * 1000;

            Assert.IsTrue(SpinWait.SpinUntil(() => watcher1.Ready() && watcher2.Ready(), timeout));

            TestContext.Out.WriteLine("All watchers ready!");

            for (var i = 0; i < number; ++i)
            {
                helper.AddFile();
            }

            // wait a bit
            SpinWait.SpinUntil(() => number == added1 && number == added2, timeout);

            watcher1.Stop();
            watcher2.Stop();

            // stop
            Assert.AreEqual(number, added1);
            Assert.AreEqual(number, added2);
        }
Exemplo n.º 5
0
        public void StartedWatcherWithNoFolderIsAlwaysReady()
        {
            using var helper  = new HelperTest();
            using var watcher = new Watcher();

            // start the watcher
            watcher.Start();

            // nothing was added, but we are ready
            Assert.IsTrue(watcher.Ready());

            // stop it.
            watcher.Stop();
        }
        public async Task RemoveAddedDelegateBeforeStop(int number, bool recursive)
        {
            var added = 0;

            Task fn(IFileSystemEvent ft, CancellationToken token)
            {
                ++added;
                return(Task.CompletedTask);
            };

            using var helper  = new HelperTest();
            using var watcher = new Watcher();
            watcher.Add(new Request(helper.Folder, recursive));
            watcher.Start();

            watcher.OnAddedAsync += fn;

            for (var i = 0; i < number; ++i)
            {
                helper.AddFile();
            }

            // wait a bit
            var stopWatch = new Stopwatch();

            stopWatch.Start();
            _ = SpinWait.SpinUntil(() =>
            {
                return(number == added);
            }, number * 1000);
            stopWatch.Stop();

            // check that they all added.
            Assert.AreEqual(number, added);

            // stop watching
            watcher.OnAddedAsync -= fn;

            // add some more
            for (var i = 0; i < number; ++i)
            {
                helper.AddFile();
            }

            await Task.Delay((int)stopWatch.ElapsedMilliseconds).ConfigureAwait(false);

            Assert.AreEqual(number, added);

            watcher.Stop();
        }
        public async Task DeleteWatchedFolder(bool recursive)
        {
            using var helper = new HelperTest();

            // create a folder will be actually watch
            var folder = helper.AddFolder();
            await Task.Delay(100).ConfigureAwait(false);

            // start watching it.
            using var watcher = new Watcher();
            watcher.Add(new Request(folder, recursive));
            watcher.Start();

            // try and delete it
            Assert.DoesNotThrow(() => Directory.Delete(folder, true));

            watcher.Stop();
        }
Exemplo n.º 8
0
        public async Task TestSimpleAddFilesNotification(int numberToAdd, bool recursive)
        {
            using var helper = new HelperTest();

            // the number of files we will be adding
            var numberAdded = 0;

            // first we need to create the watcher
            using (var watcher = new Watcher())
            {
                watcher.Add(new Request(helper.Folder, recursive));
                watcher.OnAddedAsync += (fse, token) =>
                {
                    TestContext.Out.WriteLine($"Adding {(fse.IsFile?"File":"Folder")}");
                    if (fse.IsFile)
                    {
                        Interlocked.Increment(ref numberAdded);
                    }
                    return(Task.CompletedTask);
                };
                watcher.Start();

                //we then need to wait a bit for all the workers to have started.
                TestContext.Out.WriteLine("Waiting for watchers!");

                //we then need to wait a bit for all the workers to have started.
                var timeout = (numberToAdd <= 2 ? 3 : numberToAdd) * 1000;
                Assert.IsTrue(SpinWait.SpinUntil(() => watcher.Ready(), timeout));

                TestContext.Out.WriteLine("All watchers ready!");

                for (var i = 0; i < numberToAdd; ++i)
                {
                    // create an empty file
                    helper.AddFile();
                    await Task.Yield();
                }

                // give a bit of time
                SpinWait.SpinUntil(() => numberAdded >= numberToAdd, timeout);
            }
            Assert.AreEqual(numberToAdd, numberAdded);
        }
        public void RemoveAddedDelegateBeforeStop(int number, bool recursive)
        {
            var added = 0;

            Task Fn(IFileSystemEvent ft, CancellationToken token)
            {
                Interlocked.Increment(ref added);
                return(Task.CompletedTask);
            }

            using var helper  = new HelperTest();
            using var watcher = new Watcher();
            watcher.Add(new Request(helper.Folder, recursive, new Rates(50)));
            watcher.Start();

            SpinWait.SpinUntil(() => watcher.Ready());

            watcher.OnAddedAsync += Fn;

            for (var i = 0; i < number; ++i)
            {
                helper.AddFile();
            }

            // wait a bit
            Assert.IsTrue(SpinWait.SpinUntil(() => number == added, number * 1000));

            // check that they all added.
            Assert.AreEqual(number, added);

            // stop watching
            watcher.OnAddedAsync -= Fn;

            // add some more
            for (var i = 0; i < number; ++i)
            {
                helper.AddFile();
            }

            Assert.AreEqual(number, added);

            watcher.Stop();
        }
        public async Task DeleteWatchedFolder(bool recursive)
        {
            using var helper = new HelperTest();

            // create a folder will be actually watch
            var folder = helper.AddFolder();
            await Task.Delay(100).ConfigureAwait(false);

            // start watching it.
            using var watcher = new Watcher();
            watcher.Add(new Request(folder, recursive));
            watcher.Start();

            //we then need to wait a bit for all the workers to have started.
            SpinWait.SpinUntil(() => watcher.Ready());

            // try and delete it
            Assert.DoesNotThrow(() => Directory.Delete(folder, true));

            watcher.Stop();
        }
Exemplo n.º 11
0
        public async Task StartWatcherBeforeAddingAnything(bool recursive)
        {
            using var helper  = new HelperTest();
            using var watcher = new Watcher();

            // start the watcher
            watcher.Start();

            // the number of files we actually added
            var       numberAdded = 0;
            const int numberToAdd = 10;
            var       timeout     = (numberToAdd <= 2 ? 3 : numberToAdd) * 1000;

            Assert.IsTrue(SpinWait.SpinUntil(() => watcher.Ready(), timeout));

            // and then add the folder we are after
            watcher.Add(new Request(helper.Folder, recursive));

            // then wait
            Assert.IsTrue(SpinWait.SpinUntil(() => watcher.Ready(), timeout));

            watcher.OnAddedAsync += (fse, token) =>
            {
                Interlocked.Increment(ref numberAdded);
                return(Task.CompletedTask);
            };

            TestContext.Out.WriteLine("All watchers ready!");

            for (var i = 0; i < numberToAdd; ++i)
            {
                // create an empty file
                helper.AddFile();
                await Task.Yield();
            }

            // give a bit of time
            SpinWait.SpinUntil(() => numberAdded >= numberToAdd, timeout);
        }