Ejemplo n.º 1
0
 public void AddEventToStoppedQueue()
 {
     using (SyncEventQueue queue = new SyncEventQueue(new Mock <SyncEventManager>().Object)){
         queue.StopListener();
         WaitFor(queue, (q) => { return(q.IsStopped); });
         queue.AddEvent(new Mock <ISyncEvent>().Object);
     }
 }
Ejemplo n.º 2
0
 public void EventlessStartStop()
 {
     using (SyncEventQueue queue = new SyncEventQueue(new Mock <ISyncEventManager>().Object)) {
         WaitFor(queue, (q) => { return(!q.IsStopped); });
         Assert.False(queue.IsStopped);
         queue.StopListener();
         WaitFor(queue, (q) => { return(q.IsStopped); });
         Assert.True(queue.IsStopped);
     }
 }
Ejemplo n.º 3
0
 public void SubscribeThrowsExceptionIfCategorizedObserverIsNull()
 {
     using (SyncEventQueue queue = new SyncEventQueue(Mock.Of <ISyncEventManager>())) {
         Assert.Throws <ArgumentNullException>(
             () => {
             using (var unsubscriber = queue.CategoryCounter.Subscribe((IObserver <Tuple <EventCategory, int> >)null)) {
             }
         });
     }
 }
Ejemplo n.º 4
0
 public void SubscribeThrowsExceptionIfAllObserverIsNull()
 {
     using (SyncEventQueue queue = new SyncEventQueue(Mock.Of <ISyncEventManager>())) {
         Assert.Throws <ArgumentNullException>(
             () => {
             using (var unsubscriber = queue.FullCounter.Subscribe((IObserver <int>)null)) {
             }
         });
     }
 }
Ejemplo n.º 5
0
        public void WaitForStop()
        {
            Task t;

            using (SyncEventQueue queue = new SyncEventQueue(new Mock <ISyncEventManager>().Object)) {
                t = Task.Factory.StartNew(() => { Thread.Sleep(100); queue.StopListener(); });
                queue.WaitForStopped();
                Assert.True(queue.IsStopped);
            }

            t.Wait();
        }
Ejemplo n.º 6
0
        public void AddEvent()
        {
            var managerMock = new Mock <SyncEventManager>();
            var eventMock   = new Mock <ISyncEvent>();

            using (SyncEventQueue queue = new SyncEventQueue(managerMock.Object)){
                queue.AddEvent(eventMock.Object);
                queue.AddEvent(eventMock.Object);
                queue.StopListener();
                WaitFor(queue, (q) => { return(q.IsStopped); });
                Assert.True(queue.IsStopped);
            }
            managerMock.Verify(foo => foo.Handle(eventMock.Object), Times.Exactly(2));
        }
Ejemplo n.º 7
0
        public void ExceptionsInManagerAreHandled()
        {
            var managerMock = new Mock <ISyncEventManager>();

            managerMock.Setup(m => m.Handle(It.IsAny <ISyncEvent>())).Throws(new Exception("Generic Exception Message"));
            var eventMock = new Mock <ISyncEvent>();

            eventMock.Setup(e => e.ToString()).Returns("Mocked Event");
            using (SyncEventQueue queue = new SyncEventQueue(managerMock.Object)) {
                queue.AddEvent(eventMock.Object);
                queue.StopListener();
                WaitFor(queue, (q) => { return(q.IsStopped); });
                Assert.True(queue.IsStopped);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public RepoBase(RepoInfo repoInfo, IActivityListener activityListener)
        {
            EventManager = new SyncEventManager();
            EventManager.AddEventHandler(new DebugLoggingHandler());
            EventManager.AddEventHandler(new GenericSyncEventHandler <RepoConfigChangedEvent>(0, RepoInfoChanged));
            Queue     = new SyncEventQueue(EventManager);
            RepoInfo  = repoInfo;
            LocalPath = repoInfo.TargetDirectory;
            Name      = repoInfo.Name;
            RemoteUrl = repoInfo.Address;

            this.activityListener = activityListener;

            if (repoInfo.IsSuspended)
            {
                Status = SyncStatus.Suspend;
            }

            // Folder lock.
            // Disabled for now. Can be an interesting feature, but should be made opt-in, as
            // most users would be surprised to see this file appear.
            // folderLock = new FolderLock(LocalPath);

            Watcher = new Watcher(LocalPath);
            Watcher.EnableRaisingEvents = true;


            // Main loop syncing every X seconds.
            remote_timer.Elapsed += delegate
            {
                // Synchronize.
                SyncInBackground();
            };
            remote_timer.AutoReset = true;
            Logger.Info("Repo " + repoInfo.Name + " - Set poll interval to " + repoInfo.PollInterval + "ms");
            remote_timer.Interval = repoInfo.PollInterval;

            //Partial sync interval..
            local_timer.Elapsed += delegate
            {
                // Run partial sync.
                SyncInBackground(false);
            };
            local_timer.AutoReset = false;
            local_timer.Interval  = delay_interval;
        }
Ejemplo n.º 9
0
        public void PutConnectionEventToQueueIfConnectionExceptionOccursOnHandling()
        {
            var manager = new Mock <ISyncEventManager>();
            var connectionRequiredEvent = Mock.Of <ISyncEvent>();
            var connectionException     = new CmisConnectionException("unknown host");

            manager.Setup(m => m.Handle(connectionRequiredEvent)).Throws(connectionException);
            using (var underTest = new SyncEventQueue(manager.Object)) {
                var observer = new Mock <IObserver <int> >();
                observer.Setup(o => o.OnNext(It.Is <int>(i => i == 0))).Callback(() => {
                    underTest.StopListener();
                });
                using (var unsubscriber = underTest.FullCounter.Subscribe(observer.Object)) {
                    underTest.AddEvent(connectionRequiredEvent);
                    Assert.That(underTest.WaitForStopped(10000), Is.True);
                }
            }

            manager.Verify(m => m.Handle(It.Is <CmisConnectionExceptionEvent>(e => e.Exception == connectionException)), Times.Once());
        }