public async Task AllInitialFilesProcessed() { var initialFiles = ThreeInOrder; var manager = new Manager(new MockStorage(initialFiles)); var uploadTester = new MockUploader(); var done = new TaskCompletionSource <int>(); var uploadsSeen = 0; object l = new object(); uploadTester.SetUploadCallback(async rf => { await ShortRandomDelay(); lock (l) { uploadsSeen++; if (uploadsSeen >= 3) { done.SetResult(uploadsSeen); } } }); manager.Start(new NoNewFilesMonitor(), new PreMatchNoNewFilesMonitor(), new MockAnalizer(), uploadTester); var finished = await Task.WhenAny(Task.Delay(4000), done.Task); await finished; Assert.AreEqual(3, uploadsSeen); }
public async Task InitialFilesEndInorder() { var initialFiles = ThreeInOrder; var manager = new Manager(new MockStorage(initialFiles)); var uploadTester = new MockUploader(); var promise = new TaskCompletionSource <int>(); Task done = promise.Task; var uploadsSeen = 0; var l = new object(); ReplayFile lastUploadFinished = null; uploadTester.SetUploadCallback(async rf => { await ShortRandomDelay(); if (lastUploadFinished != null) { try { Assert.IsTrue(rf.Created >= lastUploadFinished.Created, $"upload completed out of order, {lastUploadFinished} completed after {rf}"); } catch (Exception e) { promise.TrySetException(e); } } lastUploadFinished = rf; var isDone = false; lock (l) { uploadsSeen++; isDone = uploadsSeen >= 3; } if (isDone) { promise.TrySetResult(uploadsSeen); } }); manager.Start(new NoNewFilesMonitor(), new PreMatchNoNewFilesMonitor(), new MockAnalizer(), uploadTester); await done; }