Ejemplo n.º 1
0
        public void GivenResource_WhenFileRemoved_ThenResourceDeleted()
        {
            // Arrange
            var directory = Directory.CreateDirectory(Guid.NewGuid().ToString());
            var resource  = new Resource
            {
                Name = Guid.NewGuid().ToString(),
                Path = directory.FullName,
                Hash = Guid.NewGuid().ToString(),
                Size = 200
            };

            var context = DbContextFactory.CreateImMemory();

            context.Resources.Add(resource);
            context.SaveChanges();

            // Act
            using (var monitor = new FolderMonitor(context, scanFrequencySeconds: 20))
            {
                monitor.StartMonitoring(
                    new[] { directory.FullName });
                Thread.Sleep((int)TimeSpan.FromSeconds(10).TotalMilliseconds);
            }

            // Assert
            Assert.Empty(context.Resources);

            directory.Delete();
        }
Ejemplo n.º 2
0
        public void GivenFolder_WhenFolderEmpty_ThenFolderScanned()
        {
            // Arrange
            var directory = Directory.CreateDirectory(Guid.NewGuid().ToString());

            var context = DbContextFactory.CreateImMemory();
            var monitor = new FolderMonitor(context, scanFrequencySeconds: 20);

            // Act
            var recorded = Record.Exception(
                () => Assert.Raises <ResourceAddedEventArgs>(
                    handler => monitor.ResourceAdded += handler,
                    handler => monitor.ResourceAdded -= handler,
                    () =>
            {
                using (monitor)
                {
                    monitor.StartMonitoring(new[] { directory.FullName });
                    Thread.Sleep((int)TimeSpan.FromSeconds(5).TotalMilliseconds);
                }
            }));

            // Assert
            Assert.IsType <RaisesException>(recorded);
            Assert.Empty(context.Resources);

            directory.Delete();
        }
Ejemplo n.º 3
0
        public void GivenTrackedFile_WhenFileChanged_ThenFileUpdated()
        {
            // Arrange
            var directory = Directory.CreateDirectory(Guid.NewGuid().ToString());

            var fileName = Guid.NewGuid().ToString();

            using (var writer = File.CreateText(Path.Combine(directory.FullName, fileName)))
            {
                writer.WriteLine("Hello world!");
            }

            var resource = new Resource
            {
                Name = fileName,
                Path = directory.FullName,
                Hash = Guid.NewGuid().ToString(),
                Size = 0
            };

            var context = DbContextFactory.CreateImMemory();

            context.Resources.Add(resource);
            context.SaveChanges();

            // Act
            var monitor = new FolderMonitor(context, scanFrequencySeconds: 20);

            var raised = Assert.Raises <ResourceChangedEventArgs>(
                handler => monitor.ResourceChanged += handler,
                handler => monitor.ResourceChanged -= handler,
                () =>
            {
                using (monitor)
                {
                    monitor.StartMonitoring(
                        new[] { directory.FullName });
                    Thread.Sleep((int)TimeSpan.FromSeconds(5).TotalMilliseconds);
                }
            });

            // Assert
            Assert.NotNull(raised);
            Assert.Equal(monitor, raised.Sender);

            var fileInfo = new FileInfo(Path.Combine(directory.FullName, fileName));

            AssertEventArgs(fileInfo, raised.Arguments);

            resource = context.Resources.FirstOrDefault(r => r.Name == fileInfo.Name);
            Assert.NotNull(resource);
            AssertResource(fileInfo, resource);

            fileInfo.Delete();
            directory.Delete();
        }
Ejemplo n.º 4
0
        public void GivenFolders_WhenOneFolderNotEmpty_ThenNewResourcesAdded()
        {
            // Arrange
            var emptyDir    = Directory.CreateDirectory(Guid.NewGuid().ToString());
            var notEmptyDir = Directory.CreateDirectory(Guid.NewGuid().ToString());

            var filePath = Path.Combine(notEmptyDir.FullName, Guid.NewGuid().ToString());

            using (var writer = File.CreateText(filePath))
            {
                writer.WriteLine("Hello world!");
            }

            // Act
            var context = DbContextFactory.CreateImMemory();
            var monitor = new FolderMonitor(context, scanFrequencySeconds: 20);

            var raised = Assert.Raises <ResourceAddedEventArgs>(
                handler => monitor.ResourceAdded += handler,
                handler => monitor.ResourceAdded -= handler,
                () =>
            {
                using (monitor)
                {
                    monitor.StartMonitoring(
                        new[] { emptyDir.FullName, notEmptyDir.FullName });
                    Thread.Sleep((int)TimeSpan.FromSeconds(5).TotalMilliseconds);
                }
            });

            // Assert
            Assert.NotNull(raised);
            Assert.Equal(monitor, raised.Sender);

            var fileInfo = new FileInfo(filePath);

            AssertEventArgs(fileInfo, raised.Arguments);

            var resource = context.Resources.FirstOrDefault(r => r.Name == fileInfo.Name);

            Assert.NotNull(resource);
            AssertResource(fileInfo, resource);

            fileInfo.Delete();
            notEmptyDir.Delete();
            emptyDir.Delete();
        }