public void ScheduleCAnBeStartedAndStopped()
        {
            var scheduleName = "testSchedule";
            var delay = 10;
            var chainName1 = "testChain";
            var chainName2 = "testChain2";

            var chains = new[]
                {
                    new MultipleSinkChain("id1", chainName1, new NullSource(), new ISnapshotConsumer[] {}),
                    new MultipleSinkChain("id2", chainName2, new NullSource(), new ISnapshotConsumer[] {})
                };

            var config = new ScheduleElement(scheduleName, delay, string.Join(",", chainName1, chainName2));

            var schedule = new Schedule(config, chains);

            var tokenSource = new CancellationTokenSource();
            var cancellationToken = tokenSource.Token;

            var task = Task.Factory.StartNew(() => schedule.Start(cancellationToken), cancellationToken);

            Thread.Sleep(1000);

            tokenSource.Cancel();

            task.Wait();
        }
        public void ScheduleCanBeInstantiatedUsingConfiguration()
        {
            var scheduleName = "testSchedule";
            var delay = 10;
            var chainName1 = "testChain";
            var chainName2 = "testChain2";

            var chains = new[]
                {
                    new MultipleSinkChain("id1", chainName1, new NullSource(), new ISnapshotConsumer[] {}),
                    new MultipleSinkChain("id2", chainName2, new NullSource(), new ISnapshotConsumer[] {})
                };

            var config = new ScheduleElement(scheduleName, delay, string.Join(",", "id1", "id2"));

            var schedule = new Schedule(config, chains);

            Assert.AreEqual(scheduleName, schedule.Name);
            Assert.AreEqual(delay * 1000, schedule.Delay);
            Assert.AreEqual(2, schedule.Chains.Count());
        }    
        public void SchedulesCanBeRunOnce()
        {
            var scheduleName = "testSchedule";
            var delay = 10;
            var chainName1 = "testChain";
            var chainName2 = "testChain2";

            var chains = new[]
                {
                    new MultipleSinkChain("id1", chainName1, new NullSource(), new ISnapshotConsumer[] {}),
                    new MultipleSinkChain("id2", chainName2, new NullSource(), new ISnapshotConsumer[] {})
                };

            var config = new ScheduleElement(scheduleName, delay, string.Join(",", chainName1, chainName2));

            var schedule = new Schedule(config, chains);

            schedule.RunOnce();

            // mock out source, sink and assert
        }