public void ContentChangeIndicatesFolderMove() { // Moves /a/b to /b string rootFolderId = "rootId"; string folderAName = "a"; string folderAId = "aid"; string folderBName = "b"; string folderBId = "bid"; string lastChangeToken = "changeToken"; Mock <IFileSystemInfoFactory> fsFactory = new Mock <IFileSystemInfoFactory>(); var folderBInfo = fsFactory.AddDirectory(Path.Combine(this.localRoot, folderAName, folderBName)); Mock <ISession> session = MockSessionUtil.GetSessionMockReturningFolderChange(DotCMIS.Enums.ChangeType.Updated, folderBId, folderBName, this.remoteRoot + "/" + folderBName, rootFolderId, lastChangeToken); var storage = this.GetInitializedStorage(); storage.ChangeLogToken = "oldtoken"; var mappedRootObject = new MappedObject("/", rootFolderId, MappedObjectType.Folder, null, storage.ChangeLogToken); storage.SaveMappedObject(mappedRootObject); var mappedAObject = new MappedObject(folderAName, folderAId, MappedObjectType.Folder, rootFolderId, storage.ChangeLogToken); storage.SaveMappedObject(mappedAObject); var mappedBObject = new MappedObject(folderBName, folderBId, MappedObjectType.Folder, folderAId, storage.ChangeLogToken); storage.SaveMappedObject(mappedBObject); var queue = this.CreateQueue(session, storage, fsFactory.Object); queue.RunStartSyncEvent(); folderBInfo.Verify(d => d.MoveTo(Path.Combine(this.localRoot, folderBName)), Times.Once()); }
public void ContentChangeIndicatesFolderDeletionOfExistingFolder() { var storage = this.GetInitializedStorage(); var name = "a"; string path = Path.Combine(this.localRoot, name); string id = "1"; Mock <IFileSystemInfoFactory> fsFactory = new Mock <IFileSystemInfoFactory>(); var dirInfo = new Mock <IDirectoryInfo>(); dirInfo.Setup(d => d.Exists).Returns(true); dirInfo.Setup(d => d.FullName).Returns(path); fsFactory.AddIDirectoryInfo(dirInfo.Object); var mappedObject = new MappedObject(name, id, MappedObjectType.Folder, null, null); storage.SaveMappedObject(mappedObject); storage.ChangeLogToken = "oldtoken"; Mock <ISession> session = MockSessionUtil.GetSessionMockReturningFolderChange(DotCMIS.Enums.ChangeType.Deleted, id); var queue = this.CreateQueue(session, storage, fsFactory.Object); queue.RunStartSyncEvent(); dirInfo.Verify(d => d.Delete(false), Times.Once()); Assert.That(storage.GetObjectByRemoteId(id), Is.Null); }
public void RemoteFolderDeletionWithoutLocalFolder() { Mock <IMetaDataStorage> storage = MockMetaDataStorageUtil.GetMetaStorageMockWithToken(); Mock <ISession> session = MockSessionUtil.GetSessionMockReturningFolderChange(DotCMIS.Enums.ChangeType.Deleted); ObservableHandler observer = this.RunQueue(session, storage); Assert.That(observer.List.Count, Is.EqualTo(0)); }
public void RemoteFolderCreation() { Mock <IMetaDataStorage> storage = MockMetaDataStorageUtil.GetMetaStorageMockWithToken(); Mock <ISession> session = MockSessionUtil.GetSessionMockReturningFolderChange(DotCMIS.Enums.ChangeType.Created); ObservableHandler observer = this.RunQueue(session, storage); observer.AssertGotSingleFolderEvent(MetaDataChangeType.CREATED); }
public void LocallyNotExistingRemoteDocumentUpdated() { Mock <IMetaDataStorage> storage = MockMetaDataStorageUtil.GetMetaStorageMockWithToken(); Mock <ISession> session = MockSessionUtil.GetSessionMockReturningDocumentChange(DotCMIS.Enums.ChangeType.Updated, DefaultId, null); ObservableHandler observer = this.RunQueue(session, storage); observer.AssertGotSingleFileEvent(MetaDataChangeType.CREATED, ContentChangeType.CREATED); }
public void RemoteDocumentCreationWithContent() { Mock <IMetaDataStorage> storage = MockMetaDataStorageUtil.GetMetaStorageMockWithToken(); Mock <ISession> session = MockSessionUtil.GetSessionMockReturningDocumentChange(DotCMIS.Enums.ChangeType.Created, DefaultId, "someStreamId"); ObservableHandler observer = this.RunQueue(session, storage); observer.AssertGotSingleFileEvent(MetaDataChangeType.CREATED, ContentChangeType.CREATED); }
public void ContentChangeIndicatesFolderRenameOfExistingFolder() { var storage = this.GetInitializedStorage(); string name = "a"; string newName = "b"; string parentId = "parentId"; string path = Path.Combine(this.localRoot, name); string newPath = Path.Combine(this.localRoot, newName); string id = "1"; string lastChangeToken = "changeToken"; Guid guid = Guid.NewGuid(); Mock <IFileSystemInfoFactory> fsFactory = new Mock <IFileSystemInfoFactory>(); var dirInfo = new Mock <IDirectoryInfo>(); dirInfo.Setup(d => d.Exists).Returns(true); dirInfo.Setup(d => d.FullName).Returns(path); dirInfo.Setup(d => d.Parent).Returns(Mock.Of <IDirectoryInfo>(r => r.FullName == this.localRoot)); fsFactory.AddIDirectoryInfo(dirInfo.Object); var mappedRootObject = new MappedObject("/", parentId, MappedObjectType.Folder, null, storage.ChangeLogToken); storage.SaveMappedObject(mappedRootObject); var mappedObject = new MappedObject(name, id, MappedObjectType.Folder, parentId, null) { Guid = guid }; storage.SaveMappedObject(mappedObject); storage.ChangeLogToken = "oldChangeToken"; Console.WriteLine(storage.ToFindString()); Mock <ISession> session = MockSessionUtil.GetSessionMockReturningFolderChange(DotCMIS.Enums.ChangeType.Updated, id, newName, this.remoteRoot + "/" + newName, parentId, lastChangeToken); session.SetupTypeSystem(); var queue = this.CreateQueue(session, storage, fsFactory.Object); dirInfo.Setup(d => d.MoveTo(It.IsAny <string>())) .Callback(() => { queue.AddEvent(Mock.Of <IFSMovedEvent>(fs => fs.IsDirectory == true && fs.OldPath == path && fs.LocalPath == newPath && fs.Type == WatcherChangeTypes.Renamed)); var newDirInfo = new Mock <IDirectoryInfo>(); newDirInfo.Setup(d => d.Exists).Returns(true); newDirInfo.Setup(d => d.FullName).Returns(newPath); newDirInfo.Setup(d => d.Uuid).Returns(guid); newDirInfo.Setup(d => d.Parent).Returns(Mock.Of <IDirectoryInfo>(r => r.FullName == this.localRoot)); fsFactory.AddIDirectoryInfo(newDirInfo.Object); }); queue.RunStartSyncEvent(); dirInfo.Verify(d => d.MoveTo(It.Is <string>(p => p.Equals(newPath))), Times.Once()); Assert.That(storage.GetObjectByRemoteId(id), Is.Not.Null); Assert.That(storage.GetObjectByRemoteId(id).Name, Is.EqualTo(newName)); Assert.That(storage.GetObjectByLocalPath(Mock.Of <IDirectoryInfo>(d => d.FullName == path)), Is.Null); Assert.That(storage.GetObjectByLocalPath(Mock.Of <IDirectoryInfo>(d => d.FullName == newPath)), Is.Not.Null); }
public void RemoteDeletionChangeTest() { Mock <IMetaDataStorage> storage = MockMetaDataStorageUtil.GetMetaStorageMockWithToken(); var file = Mock.Of <IFileInfo>(f => f.FullName == "path"); storage.AddLocalFile(file, DefaultId); Mock <ISession> session = MockSessionUtil.GetSessionMockReturningDocumentChange(DotCMIS.Enums.ChangeType.Deleted, DefaultId, null); ObservableHandler observer = this.RunQueue(session, storage); observer.AssertGotSingleFileEvent(MetaDataChangeType.DELETED, ContentChangeType.NONE); }
public void IgnoreDuplicatedContentChangesEventTestDeleted() { var queue = new Mock <ISyncEventQueue>(); Mock <IMetaDataStorage> storage = MockMetaDataStorageUtil.GetMetaStorageMockWithToken(); Mock <ISession> session = MockSessionUtil.GetSessionMockReturning3Changesin2Batches(DotCMIS.Enums.ChangeType.Deleted, true); var startSyncEvent = new StartNextSyncEvent(false); var changes = new ContentChanges(session.Object, storage.Object, queue.Object, this.maxNumberOfContentChanges, this.isPropertyChangesSupported); Assert.IsTrue(changes.Handle(startSyncEvent)); queue.Verify(foo => foo.AddEvent(It.IsAny <ContentChangeEvent>()), Times.Exactly(3)); }
public void RemoteSecurityChangeOfExistingFile() { Mock <IMetaDataStorage> storage = MockMetaDataStorageUtil.GetMetaStorageMockWithToken(); var path = Mock.Of <IFileInfo>(f => f.FullName == "path"); storage.AddLocalFile(path, DefaultId); Mock <ISession> session = MockSessionUtil.GetSessionMockReturningDocumentChange(DotCMIS.Enums.ChangeType.Security, DefaultId); ObservableHandler observer = this.RunQueue(session, storage); storage.Verify(s => s.GetObjectByRemoteId(DefaultId), Times.Once()); observer.AssertGotSingleFileEvent(MetaDataChangeType.CHANGED, ContentChangeType.NONE); }
public void GivesCorrectContentChangeEvent() { ContentChangeEvent contentChangeEvent = null; var queue = new Mock <ISyncEventQueue>(); queue.Setup(q => q.AddEvent(It.IsAny <ContentChangeEvent>())).Callback((ISyncEvent f) => { contentChangeEvent = f as ContentChangeEvent; }); string id = "myId"; Mock <IMetaDataStorage> storage = MockMetaDataStorageUtil.GetMetaStorageMockWithToken(); var session = MockSessionUtil.PrepareSessionMockForSingleChange(DotCMIS.Enums.ChangeType.Created, id); var changes = new ContentChanges(session.Object, storage.Object, queue.Object, this.maxNumberOfContentChanges, this.isPropertyChangesSupported); var startSyncEvent = new StartNextSyncEvent(false); Assert.IsTrue(changes.Handle(startSyncEvent)); queue.Verify(foo => foo.AddEvent(It.IsAny <ContentChangeEvent>()), Times.Once()); Assert.That(contentChangeEvent.Type, Is.EqualTo(DotCMIS.Enums.ChangeType.Created)); Assert.That(contentChangeEvent.ObjectId, Is.EqualTo(id)); }
public void ContentChangeIndicatesFolderCreation() { string rootFolderName = "/"; string rootFolderId = "root"; string folderName = "folder"; string parentId = "root"; string lastChangeToken = "changeToken"; Mock <IFileSystemInfoFactory> fsFactory = new Mock <IFileSystemInfoFactory>(); var dirInfo = fsFactory.AddDirectory(Path.Combine(this.localRoot, folderName)); string id = "1"; Mock <ISession> session = MockSessionUtil.GetSessionMockReturningFolderChange(DotCMIS.Enums.ChangeType.Created, id, folderName, this.remoteRoot + "/" + folderName, parentId, lastChangeToken); session.SetupTypeSystem(); var storage = this.GetInitializedStorage(); storage.ChangeLogToken = "oldtoken"; storage.SaveMappedObject(new MappedObject(rootFolderName, rootFolderId, MappedObjectType.Folder, null, "oldtoken")); var queue = this.CreateQueue(session, storage, fsFactory.Object); var fsFolderCreatedEvent = new Mock <IFSEvent>(); fsFolderCreatedEvent.Setup(f => f.IsDirectory).Returns(true); fsFolderCreatedEvent.Setup(f => f.LocalPath).Returns(Path.Combine(this.localRoot, folderName)); fsFolderCreatedEvent.Setup(f => f.Type).Returns(WatcherChangeTypes.Created); dirInfo.Setup(d => d.Create()).Callback(delegate { queue.AddEvent(fsFolderCreatedEvent.Object); }); queue.RunStartSyncEvent(); dirInfo.Verify(d => d.Create(), Times.Once()); var mappedObject = storage.GetObjectByRemoteId(id); Assert.That(mappedObject, Is.Not.Null); Assert.That(mappedObject.RemoteObjectId, Is.EqualTo(id), "RemoteObjectId incorrect"); Assert.That(mappedObject.Name, Is.EqualTo(folderName), "Name incorrect"); Assert.That(mappedObject.ParentId, Is.EqualTo(parentId), "ParentId incorrect"); Assert.That(mappedObject.LastChangeToken, Is.EqualTo(lastChangeToken), "LastChangeToken incorrect"); Assert.That(mappedObject.Type, Is.EqualTo(MappedObjectType.Folder), "Type incorrect"); }
private SingleStepEventQueue CreateQueue(Mock <ISession> session, IMetaDataStorage storage, ObservableHandler observer, IFileSystemInfoFactory fsFactory = null) { var manager = new SyncEventManager(); SingleStepEventQueue queue = new SingleStepEventQueue(manager); manager.AddEventHandler(observer); var connectionScheduler = new ConnectionScheduler(new RepoInfo(), queue, Mock.Of <ISessionFactory>(), Mock.Of <IAuthenticationProvider>()); manager.AddEventHandler(connectionScheduler); var changes = new ContentChanges(session.Object, storage, queue, this.maxNumberOfContentChanges, this.isPropertyChangesSupported); manager.AddEventHandler(changes); var transformer = new ContentChangeEventTransformer(queue, storage, fsFactory); manager.AddEventHandler(transformer); var ccaccumulator = new ContentChangeEventAccumulator(session.Object, queue); manager.AddEventHandler(ccaccumulator); var remoteFetcher = new RemoteObjectFetcher(session.Object, storage); manager.AddEventHandler(remoteFetcher); var localFetcher = new LocalObjectFetcher(storage.Matcher, fsFactory); manager.AddEventHandler(localFetcher); var watcher = new Strategy.WatcherConsumer(queue); manager.AddEventHandler(watcher); var localDetection = new LocalSituationDetection(); var remoteDetection = new RemoteSituationDetection(); var transmissionManager = new ActiveActivitiesManager(); var activityAggregator = new ActivityListenerAggregator(Mock.Of <IActivityListener>(), transmissionManager); var ignoreFolderFilter = new IgnoredFoldersFilter(); var ignoreFolderNameFilter = new IgnoredFolderNameFilter(); var ignoreFileNamesFilter = new IgnoredFileNamesFilter(); var invalidFolderNameFilter = new InvalidFolderNameFilter(); var filterAggregator = new FilterAggregator(ignoreFileNamesFilter, ignoreFolderNameFilter, invalidFolderNameFilter, ignoreFolderFilter); var syncMechanism = new SyncMechanism(localDetection, remoteDetection, queue, session.Object, storage, activityAggregator, filterAggregator, isServerAbleToUpdateModificationDate: true); manager.AddEventHandler(syncMechanism); var remoteFolder = MockSessionUtil.CreateCmisFolder(); var localFolder = new Mock <IDirectoryInfo>(); var generator = new CrawlEventGenerator(storage, fsFactory); var treeBuilder = new DescendantsTreeBuilder(storage, remoteFolder.Object, localFolder.Object, filterAggregator); var notifier = new CrawlEventNotifier(queue); var crawler = new DescendantsCrawler(queue, treeBuilder, generator, notifier, Mock.Of <IActivityListener>()); manager.AddEventHandler(crawler); var permissionDenied = new GenericHandleDublicatedEventsFilter <PermissionDeniedEvent, ConfigChangedEvent>(); manager.AddEventHandler(permissionDenied); var alreadyAddedFilter = new IgnoreAlreadyHandledFsEventsFilter(storage, fsFactory); manager.AddEventHandler(alreadyAddedFilter); var ignoreContentChangesFilter = new IgnoreAlreadyHandledContentChangeEventsFilter(storage, session.Object); manager.AddEventHandler(ignoreContentChangesFilter); var delayRetryAndNextSyncEventHandler = new DelayRetryAndNextSyncEventHandler(queue); manager.AddEventHandler(delayRetryAndNextSyncEventHandler); /* This is not implemented yet * var failedOperationsFilder = new FailedOperationsFilter(queue); * manager.AddEventHandler(failedOperationsFilder); */ var reportingFilter = new ReportingFilter(queue, ignoreFolderFilter, ignoreFileNamesFilter, ignoreFolderNameFilter, invalidFolderNameFilter); manager.AddEventHandler(reportingFilter); var debugHandler = new DebugLoggingHandler(); manager.AddEventHandler(debugHandler); var movedOrRenamed = new RemoteObjectMovedOrRenamedAccumulator(queue, storage, fsFactory); manager.AddEventHandler(movedOrRenamed); return(queue); }