public void TestSerialisation() { var period1 = new PermissionWindowPeriod((int)DayOfWeek.Monday, new TimeSpan(0, 0, 0), new TimeSpan(6, 0, 0)); var period2 = new PermissionWindowPeriod((int)DayOfWeek.Monday, new TimeSpan(17, 0, 0), new TimeSpan(23, 59, 59)); var permissionWindow = new PermissionWindow(CatalogueRepository); permissionWindow.SetPermissionWindowPeriods(new List <PermissionWindowPeriod> { period1, period2 }); var permissionPeriodConfig = permissionWindow.PermissionPeriodConfig; var newPermissionWindow = new PermissionWindow(CatalogueRepository); newPermissionWindow.PermissionPeriodConfig = permissionPeriodConfig; var periods = newPermissionWindow.PermissionWindowPeriods; Assert.AreEqual(2, periods.Count); var newPeriod1 = periods[0]; Assert.AreEqual((int)DayOfWeek.Monday, newPeriod1.DayOfWeek); Assert.AreEqual(6, newPeriod1.End.Hours); var newPeriod2 = periods[1]; Assert.AreEqual(17, newPeriod2.Start.Hours); }
public void TestCurrentlyOutsidePermissionPeriod() { var dtNow = DateTime.UtcNow; if ((dtNow.Hour == 23 && dtNow.Minute >= 50) || (dtNow.Hour == 0 && dtNow.Minute <= 3)) { Assert.Inconclusive("This test cannot run at midnight since it is afraid of the dark"); } var oneMinute = new TimeSpan(0, 1, 0); var utcTime = new TimeSpan(dtNow.Hour, dtNow.Minute, dtNow.Second); var period1 = new PermissionWindowPeriod((int)DateTime.Now.DayOfWeek, utcTime.Add(oneMinute), utcTime.Add(oneMinute)); var permissionWindow = new PermissionWindow(CatalogueRepository); permissionWindow.SetPermissionWindowPeriods(new List <PermissionWindowPeriod> { period1 }); Assert.IsFalse(permissionWindow.WithinPermissionWindow()); }
public void CacheHostOutwithPermissionWindow() { var rootDir = new DirectoryInfo(TestContext.CurrentContext.TestDirectory); var testDir = rootDir.CreateSubdirectory("C"); if (testDir.Exists) { Directory.Delete(testDir.FullName, true); } var loadDirectory = LoadDirectory.CreateDirectoryStructure(testDir, "Test"); var cp = WhenIHaveA <CacheProgress>(); var loadMetadata = cp.LoadProgress.LoadMetadata; loadMetadata.LocationOfFlatFiles = loadDirectory.RootPath.FullName; // This feels a bit nasty, but quick and much better than having the test wait for an arbitrary time period. var listener = new ExpectedNotificationListener("Download not permitted at this time, sleeping for 60 seconds"); cp.CacheFillProgress = DateTime.Now.AddDays(-1); cp.PermissionWindow_ID = 1; var permissionWindow = new PermissionWindow(Repository); permissionWindow.RequiresSynchronousAccess = true; permissionWindow.ID = 1; permissionWindow.Name = "Test Permission Window"; //Create a time period that we are outwith (1 hour ago to 30 minutes ago). TimeSpan start = DateTime.Now.TimeOfDay.Subtract(new TimeSpan(0, 1, 0, 0)); TimeSpan stop = DateTime.Now.TimeOfDay.Subtract(new TimeSpan(0, 0, 30, 0)); permissionWindow.SetPermissionWindowPeriods(new List <PermissionWindowPeriod>(new [] { new PermissionWindowPeriod( (int)DateTime.Now.DayOfWeek, start, stop) })); permissionWindow.SaveToDatabase(); cp.PermissionWindow_ID = permissionWindow.ID; cp.SaveToDatabase(); var dataFlowPipelineEngine = Mock.Of <IDataFlowPipelineEngine>(); // set up a factory stub to return our engine mock var cacheHost = new CachingHost(Repository) { CacheProgressList = new List <ICacheProgress> { cp } }; var stopTokenSource = new CancellationTokenSource(); var abortTokenSource = new CancellationTokenSource(); var cancellationToken = new GracefulCancellationToken(stopTokenSource.Token, abortTokenSource.Token); var task = Task.Run(() => cacheHost.Start(listener, cancellationToken), cancellationToken.CreateLinkedSource().Token); // Don't want to cancel before the DownloadUntilFinished loop starts and we receive the first "Download not permitted at this time, sleeping for 60 seconds" message listener.ReceivedMessage += abortTokenSource.Cancel; try { task.Wait(); } catch (AggregateException e) { Assert.AreEqual(1, e.InnerExceptions.Count); Assert.IsInstanceOf(typeof(TaskCanceledException), e.InnerExceptions[0], e.InnerExceptions[0].Message); } finally { testDir.Delete(true); } }