예제 #1
0
        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);
        }
예제 #2
0
        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());
        }
예제 #3
0
        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);
            }
        }