public void EventsGetForwarded() { var manager = new Mock<ISyncEventManager>(); var queue = new SingleStepEventQueue(manager.Object); var syncEvent = new Mock<ISyncEvent>(); queue.AddEvent(syncEvent.Object); queue.Step(); manager.Verify(m => m.Handle(syncEvent.Object), Times.Once()); }
public void StartAndStopWorks() { var manager = new Mock<ISyncEventManager>(); var queue = new SingleStepEventQueue(manager.Object); var syncEvent = new Mock<ISyncEvent>(); queue.AddEvent(syncEvent.Object); Assert.That(queue.IsStopped, Is.False, "Queue should not start immediatly"); queue.Step(); Assert.That(queue.IsStopped, Is.True, "Queue should be Stopped if empty again"); }
public void QueueSwallowsExceptionsIfConfigured() { var manager = new Mock <ISyncEventManager>(); manager.Setup(m => m.Handle(It.IsAny <ISyncEvent>())).Throws(new Exception()); var queue = new SingleStepEventQueue(manager.Object); queue.SwallowExceptions = true; queue.RunStartSyncEvent(); }
public void EventsGetForwarded() { var manager = new Mock <ISyncEventManager>(); var queue = new SingleStepEventQueue(manager.Object); var syncEvent = new Mock <ISyncEvent>(); queue.AddEvent(syncEvent.Object); queue.Step(); manager.Verify(m => m.Handle(syncEvent.Object), Times.Once()); }
public void Init() { this.subfolder = SubfolderBase + Guid.NewGuid().ToString(); Console.WriteLine("Working on " + this.subfolder); // RepoInfo this.repoInfo = new RepoInfo { AuthenticationType = AuthenticationType.BASIC, LocalPath = Path.Combine(config[1].ToString(), this.subfolder), RemotePath = config[2].ToString() + "/" + this.subfolder, Address = new XmlUri(new Uri(config[3].ToString())), User = config[4].ToString(), RepositoryId = config[6].ToString() }; this.repoInfo.RemotePath = this.repoInfo.RemotePath.Replace("//", "/"); this.repoInfo.SetPassword(config[5].ToString()); // FileSystemDir this.localRootDir = new DirectoryInfo(this.repoInfo.LocalPath); this.localRootDir.Create(); // Repo var activityListener = new Mock <IActivityListener>(); var transmissionManager = new ActiveActivitiesManager(); var activityAggregator = new ActivityListenerAggregator(activityListener.Object, transmissionManager); var queue = new SingleStepEventQueue(new SyncEventManager()); this.repo = new CmisRepoMock(this.repoInfo, activityAggregator, queue); // Session var cmisParameters = new Dictionary <string, string>(); cmisParameters[SessionParameter.BindingType] = BindingType.AtomPub; cmisParameters[SessionParameter.AtomPubUrl] = this.repoInfo.Address.ToString(); cmisParameters[SessionParameter.User] = this.repoInfo.User; cmisParameters[SessionParameter.Password] = this.repoInfo.GetPassword().ToString(); cmisParameters[SessionParameter.RepositoryId] = this.repoInfo.RepositoryId; SessionFactory factory = SessionFactory.NewInstance(); this.session = factory.CreateSession(cmisParameters); IFolder root = (IFolder)this.session.GetObjectByPath(config[2].ToString()); foreach (var child in root.GetChildren()) { if (child is IFolder && child.Name == this.subfolder) { (child as IFolder).DeleteTree(true, null, true); } } root.Refresh(); this.remoteRootDir = root.CreateFolder(this.subfolder); }
public void StartAndStopWorks() { var manager = new Mock <ISyncEventManager>(); var queue = new SingleStepEventQueue(manager.Object); var syncEvent = new Mock <ISyncEvent>(); queue.AddEvent(syncEvent.Object); Assert.That(queue.IsStopped, Is.False, "Queue should not start immediatly"); queue.Step(); Assert.That(queue.IsStopped, Is.True, "Queue should be Stopped if empty again"); }
public void QueueIsFifo() { var manager = new Mock<ISyncEventManager>(); var queue = new SingleStepEventQueue(manager.Object); var syncEvent1 = new Mock<ISyncEvent>(); var syncEvent2 = new Mock<ISyncEvent>(); queue.AddEvent(syncEvent1.Object); queue.AddEvent(syncEvent2.Object); queue.Step(); manager.Verify(m => m.Handle(syncEvent1.Object), Times.Once()); manager.Verify(m => m.Handle(syncEvent2.Object), Times.Never()); queue.Step(); manager.Verify(m => m.Handle(syncEvent1.Object), Times.Once()); manager.Verify(m => m.Handle(syncEvent2.Object), Times.Once()); }
public void QueueIsFifo() { var manager = new Mock <ISyncEventManager>(); var queue = new SingleStepEventQueue(manager.Object); var syncEvent1 = new Mock <ISyncEvent>(); var syncEvent2 = new Mock <ISyncEvent>(); queue.AddEvent(syncEvent1.Object); queue.AddEvent(syncEvent2.Object); queue.Step(); manager.Verify(m => m.Handle(syncEvent1.Object), Times.Once()); manager.Verify(m => m.Handle(syncEvent2.Object), Times.Never()); queue.Step(); manager.Verify(m => m.Handle(syncEvent1.Object), Times.Once()); manager.Verify(m => m.Handle(syncEvent2.Object), Times.Once()); }
private void WaitUntilQueueIsNotEmpty(SingleStepEventQueue queue, int timeout = 10000) { int waited = 0; while (queue.Queue.IsEmpty) { int interval = 20; // Wait for event to kick in Thread.Sleep(interval); waited += interval; if (waited > timeout) { Assert.Fail("Timeout exceeded"); } } }
public void DropAllFSEventsIfConfigured([Values(true, false)] bool dropAll) { var manager = new SyncEventManager(); var handler = new Mock <SyncEventHandler>() { CallBase = true }; handler.Setup(h => h.Priority).Returns(EventHandlerPriorities.CRITICAL); var underTest = new SingleStepEventQueue(manager); manager.AddEventHandler(handler.Object); underTest.DropAllLocalFileSystemEvents = dropAll; underTest.AddEvent(Mock.Of <IFSEvent>()); underTest.AddEvent(Mock.Of <ISyncEvent>()); underTest.Run(); handler.Verify(h => h.Handle(It.IsAny <IFSEvent>()), dropAll ? Times.Never() : Times.Once()); handler.Verify(h => h.Handle(It.IsAny <ISyncEvent>()), dropAll ? Times.Once() : Times.Exactly(2)); }
protected void WaitUntilQueueIsNotEmpty(SingleStepEventQueue queue = null, int timeout = 10000) { if (queue == null) { queue = this.repo.SingleStepQueue; } int waited = 0; while (queue.Queue.IsEmpty) { int interval = 20; // Wait for event to kick in Thread.Sleep(interval); waited += interval; if (waited > timeout) { Assert.Fail("Timeout exceeded"); } } }
private void SetupMocks() { this.listener = new ActivityListenerAggregator(Mock.Of <IActivityListener>(), new TransmissionManager()); var subfolder = Guid.NewGuid().ToString(); this.queue = new SingleStepEventQueue(new SyncEventManager()); this.queue.SwallowExceptions = true; this.repoInfo = new RepoInfo { AuthenticationType = AuthenticationType.BASIC, LocalPath = Path.Combine(config[1].ToString(), subfolder), RemotePath = config[2].ToString() + "/" + subfolder, Address = new XmlUri(new Uri(config[3].ToString())), User = config[4].ToString(), RepositoryId = config[6].ToString() }; // FileSystemDir this.localPath = new DirectoryInfo(this.repoInfo.LocalPath); this.localPath.Create(); if (!new DirectoryInfoWrapper(this.localPath).IsExtendedAttributeAvailable()) { Assert.Fail(string.Format("The local path {0} does not support extended attributes", this.localPath.FullName)); } }
public CmisRepoMock(RepoInfo repoInfo, ActivityListenerAggregator activityListener, SingleStepEventQueue queue) : base(repoInfo, activityListener, true, queue) { this.SingleStepQueue = queue; }
public void Init() { string testName = this.GetType().Name; object[] attributes = this.GetType().GetCustomAttributes(true); foreach (var attr in attributes) { if (attr is TestNameAttribute) { testName = (attr as TestNameAttribute).Name; } } this.subfolder = testName + "_" + Guid.NewGuid().ToString(); Console.WriteLine("Working on " + this.subfolder); // RepoInfo this.repoInfo = new RepoInfo { AuthenticationType = AuthenticationType.BASIC, LocalPath = Path.Combine(config[1].ToString(), this.subfolder), RemotePath = config[2].ToString() + "/" + this.subfolder, Address = new XmlUri(new Uri(config[3].ToString())), User = config[4].ToString(), RepositoryId = config[6].ToString(), Binding = config[7] != null ? config[7].ToString() : BindingType.AtomPub }; this.repoInfo.RemotePath = this.repoInfo.RemotePath.Replace("//", "/"); this.repoInfo.SetPassword(config[5].ToString()); // FileSystemDir this.localRootDir = new DirectoryInfo(this.repoInfo.LocalPath); this.localRootDir.Create(); if (!new DirectoryInfoWrapper(this.localRootDir).IsExtendedAttributeAvailable()) { Assert.Fail(string.Format("The local path {0} does not support extended attributes", this.localRootDir.FullName)); } // Repo var activityListener = new Mock <IActivityListener>(); this.transmissionManager = new TransmissionManager(); var activityAggregator = new ActivityListenerAggregator(activityListener.Object, this.transmissionManager); var queue = new SingleStepEventQueue(new SyncEventManager()); this.repo = new FullRepoTests.CmisRepoMock(this.repoInfo, activityAggregator, queue); // Session var cmisParameters = new Dictionary <string, string>(); cmisParameters[SessionParameter.BindingType] = repoInfo.Binding; switch (repoInfo.Binding) { case BindingType.AtomPub: cmisParameters[SessionParameter.AtomPubUrl] = this.repoInfo.Address.ToString(); break; case BindingType.Browser: cmisParameters[SessionParameter.BrowserUrl] = this.repoInfo.Address.ToString(); break; default: Assert.Fail(string.Format("Unknown binding type {0}", repoInfo.Binding)); break; } cmisParameters[SessionParameter.User] = this.repoInfo.User; cmisParameters[SessionParameter.Password] = this.repoInfo.GetPassword().ToString(); cmisParameters[SessionParameter.RepositoryId] = this.repoInfo.RepositoryId; cmisParameters[SessionParameter.UserAgent] = Utils.CreateUserAgent(); SessionFactory factory = SessionFactory.NewInstance(); this.session = factory.CreateSession(cmisParameters); this.ContentChangesActive = this.session.AreChangeEventsSupported(); IFolder root = (IFolder)this.session.GetObjectByPath(config[2].ToString()); this.remoteRootDir = root.CreateFolder(this.subfolder); }
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); }
private ObservableHandler RunQueue(Mock<ISession> session, Mock<IMetaDataStorage> storage) { var manager = new SyncEventManager(); var observer = new ObservableHandler(); manager.AddEventHandler(observer); SingleStepEventQueue queue = new SingleStepEventQueue(manager); var changes = new ContentChanges(session.Object, storage.Object, queue, this.maxNumberOfContentChanges, this.isPropertyChangesSupported); manager.AddEventHandler(changes); var transformer = new ContentChangeEventTransformer(queue, storage.Object); manager.AddEventHandler(transformer); var accumulator = new ContentChangeEventAccumulator(session.Object, queue); manager.AddEventHandler(accumulator); queue.RunStartSyncEvent(); return observer; }
public TestRepository( RepoInfo repoInfo, ActivityListenerAggregator activityListener, SingleStepEventQueue queue) : base(repoInfo, activityListener, true, queue) { }
public void QueueSwallowsExceptionsIfConfigured() { var manager = new Mock<ISyncEventManager>(); manager.Setup(m => m.Handle(It.IsAny<ISyncEvent>())).Throws(new Exception()); var queue = new SingleStepEventQueue(manager.Object); queue.SwallowExceptions = true; queue.RunStartSyncEvent(); }
public void Init() { string testName = this.GetType().Name; object[] attributes = this.GetType().GetCustomAttributes(true); foreach (var attr in attributes) { if (attr is TestNameAttribute) { testName = (attr as TestNameAttribute).Name; } } this.subfolder = testName + "_" + Guid.NewGuid().ToString(); Console.WriteLine("Working on " + this.subfolder); // RepoInfo this.repoInfo = new RepoInfo { AuthenticationType = AuthenticationType.BASIC, LocalPath = Path.Combine(config[1].ToString(), this.subfolder), RemotePath = config[2].ToString() + "/" + this.subfolder, Address = new XmlUri(new Uri(config[3].ToString())), User = config[4].ToString(), RepositoryId = config[6].ToString(), Binding = config[7] != null ? config[7].ToString() : BindingType.AtomPub }; this.repoInfo.RemotePath = this.repoInfo.RemotePath.Replace("//", "/"); this.repoInfo.SetPassword(config[5].ToString()); // FileSystemDir this.localRootDir = new DirectoryInfo(this.repoInfo.LocalPath); this.localRootDir.Create(); if (!new DirectoryInfoWrapper(this.localRootDir).IsExtendedAttributeAvailable()) { Assert.Fail(string.Format("The local path {0} does not support extended attributes", this.localRootDir.FullName)); } // Repo var activityListener = new Mock<IActivityListener>(); this.transmissionManager = new TransmissionManager(); var activityAggregator = new ActivityListenerAggregator(activityListener.Object, this.transmissionManager); var queue = new SingleStepEventQueue(new SyncEventManager()); this.repo = new FullRepoTests.CmisRepoMock(this.repoInfo, activityAggregator, queue); // Session var cmisParameters = new Dictionary<string, string>(); cmisParameters[SessionParameter.BindingType] = repoInfo.Binding; switch (repoInfo.Binding) { case BindingType.AtomPub: cmisParameters[SessionParameter.AtomPubUrl] = this.repoInfo.Address.ToString(); break; case BindingType.Browser: cmisParameters[SessionParameter.BrowserUrl] = this.repoInfo.Address.ToString(); break; default: Assert.Fail(string.Format("Unknown binding type {0}", repoInfo.Binding)); break; } cmisParameters[SessionParameter.User] = this.repoInfo.User; cmisParameters[SessionParameter.Password] = this.repoInfo.GetPassword().ToString(); cmisParameters[SessionParameter.RepositoryId] = this.repoInfo.RepositoryId; cmisParameters[SessionParameter.UserAgent] = Utils.CreateUserAgent(); SessionFactory factory = SessionFactory.NewInstance(); this.session = factory.CreateSession(cmisParameters); this.ContentChangesActive = this.session.AreChangeEventsSupported(); IFolder root = (IFolder)this.session.GetObjectByPath(config[2].ToString()); this.remoteRootDir = root.CreateFolder(this.subfolder); }
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 TransmissionManager(); 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, Mock.Of<IFileTransmissionStorage>(), activityAggregator, filterAggregator); manager.AddEventHandler(syncMechanism); var remoteFolder = MockSessionUtil.CreateCmisFolder(); remoteFolder.Setup(r => r.Path).Returns(this.remoteRoot); var localFolder = new Mock<IDirectoryInfo>(); localFolder.Setup(f => f.FullName).Returns(this.localRoot); var generator = new CrawlEventGenerator(storage, fsFactory); var ignoreStorage = new IgnoredEntitiesStorage(new IgnoredEntitiesCollection(), storage); var treeBuilder = new DescendantsTreeBuilder(storage, remoteFolder.Object, localFolder.Object, filterAggregator, ignoreStorage); 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, new SymlinkFilter()); manager.AddEventHandler(reportingFilter); var debugHandler = new DebugLoggingHandler(); manager.AddEventHandler(debugHandler); var movedOrRenamed = new RemoteObjectMovedOrRenamedAccumulator(queue, storage, fsFactory); manager.AddEventHandler(movedOrRenamed); return queue; }
public void InitialState() { var manager = new Mock<ISyncEventManager>(); var queue = new SingleStepEventQueue(manager.Object); Assert.That(queue.IsStopped, Is.True, "Queue starts stopped"); }
public void DropAllFSEventsIfConfigured([Values(true, false)]bool dropAll) { var manager = new SyncEventManager(); var handler = new Mock<SyncEventHandler>() { CallBase = true }; handler.Setup(h => h.Priority).Returns(EventHandlerPriorities.CRITICAL); var underTest = new SingleStepEventQueue(manager); manager.AddEventHandler(handler.Object); underTest.DropAllLocalFileSystemEvents = dropAll; underTest.AddEvent(Mock.Of<IFSEvent>()); underTest.AddEvent(Mock.Of<ISyncEvent>()); underTest.Run(); handler.Verify(h => h.Handle(It.IsAny<IFSEvent>()), dropAll ? Times.Never() : Times.Once()); handler.Verify(h => h.Handle(It.IsAny<ISyncEvent>()), dropAll ? Times.Once() : Times.Exactly(2)); }
private void SetupMocks() { this.listener = new ActivityListenerAggregator(Mock.Of<IActivityListener>(), new TransmissionManager()); var subfolder = Guid.NewGuid().ToString(); this.queue = new SingleStepEventQueue(new SyncEventManager()); this.queue.SwallowExceptions = true; this.repoInfo = new RepoInfo { AuthenticationType = AuthenticationType.BASIC, LocalPath = Path.Combine(config[1].ToString(), subfolder), RemotePath = config[2].ToString() + "/" + subfolder, Address = new XmlUri(new Uri(config[3].ToString())), User = config[4].ToString(), RepositoryId = config[6].ToString() }; // FileSystemDir this.localPath = new DirectoryInfo(this.repoInfo.LocalPath); this.localPath.Create(); if (!new DirectoryInfoWrapper(this.localPath).IsExtendedAttributeAvailable()) { Assert.Fail(string.Format("The local path {0} does not support extended attributes", this.localPath.FullName)); } }
public void QueueRethrowsExceptionsByDefault() { var manager = new Mock<ISyncEventManager>(); manager.Setup(m => m.Handle(It.IsAny<ISyncEvent>())).Throws<Exception>(); var queue = new SingleStepEventQueue(manager.Object); Assert.Throws<Exception>(() => queue.RunStartSyncEvent()); }