public void StartNewFileMonitorInNewFolderAsync_SubscribesANewListener_CreatedListenerIsSubscribed()
        {
            //Arrange:
            ISubfolderMonitorListener _fakeListener = Substitute.For <ISubfolderMonitorListener>();

            _fakeProjectionPipelineFactory.CreateFileMonitorListener(Arg.Any <PermStorageFolderStructure>(),
                                                                     Arg.Any <BlockingCollection <TempProjectionInfo> >()).Returns(_fakeListener);

            //Act:
            Task task = _uut.StartNewFileMonitorInNewFolderAsync("path", "folder");

            Task.WaitAll(task);

            _fakeFileMonitor.Created += Raise.EventWith(new object(),
                                                        new SearchDirectoryArgs("path", "name", _fakeFileMonitor));

            //Assert:
            _fakeListener.Received(1).OnNewFileDetected(Arg.Any <object>(), Arg.Any <SearchDirectoryArgs>());
        }
예제 #2
0
        private IReconstructionProcessor StartPipeline(IFileMonitor fileMonitor, PermStorageFolderStructure folderStructure)
        {
            BlockingCollection <TempProjectionInfo> queue1 = new BlockingCollection <TempProjectionInfo>();
            BlockingCollection <PermProjectionInfo> queue2 = new BlockingCollection <PermProjectionInfo>();

            var eventHandler = _projectionPipelineFactory.CreateFileMonitorListener(folderStructure, queue1);

            fileMonitor.Created  += eventHandler.OnNewFileDetected;
            fileMonitor.Finished += eventHandler.OnMonitorFinished;

            var copier = _projectionPipelineFactory.CreateProjectionCopier(queue1, queue2, folderStructure);

            TaskWatcher.AddTask(copier.StartCopyingFiles());

            var reconstructionProcessor = _projectionPipelineFactory.CreateReconstructionProcessor(queue2, folderStructure);

            TaskWatcher.AddTask(reconstructionProcessor.StartConsumingProjections());
            return(reconstructionProcessor);
        }