Пример #1
0
        public void Dequeue()
        {
            var setup = new QueueSetup <object>()
            {
                Name     = "test",
                Priority = QueuePriority.High,
            };

            var random = new Random();
            var scale  = new Range <byte>();

            scale.Maximum = (byte)random.Next(byte.MinValue, byte.MaxValue);
            scale.Minimum = (byte)random.Next(byte.MinValue, scale.Maximum);

            var throughput = Substitute.For <IQueueThroughput>();

            throughput.Scale(setup.Priority).Returns(scale);
            throughput.CheckScaleEvery(setup.Priority).Returns((byte)random.Next(1, 300));

            var f    = new DequeueFactory(ConnectionString, throughput);
            var task = f.Dequeue <object>(setup);

            Assert.IsNotNull(task);
            var scaler = task as StorageQueueAutoScaler <object>;

            Assert.IsNotNull(scaler);
            Assert.AreEqual(scale.Minimum, scaler.InstanceCount.Minimum);
            Assert.AreEqual(scale.Maximum, scaler.InstanceCount.Maximum);

            throughput.Received().Scale(setup.Priority);
            throughput.Received().CheckScaleEvery(setup.Priority);
        }
Пример #2
0
        public IEnumerable <IRunnable> Tasks(AppConfig config)
        {
            // List of tasks to run
            var tasks = new List <IRunnable>(new IRunnable[] {
                // Initialization task
                new InitTask(),

                // Initialize Table; creates table if it doesn't already exist
                new InitializeStorageTask(new TableStorage(config.TableName, config.ConnectionString)),

                // Initialize Container; creates container if it doesn't already exist
                new InitializeStorageTask(new Container(config.ContainerName, config.ConnectionString)),

                // Initialize Container; creates container if it doesn't already exist
                new InitializeStorageTask(new StorageQueue(config.GenericQueueName, config.ConnectionString)),

                //basic task
                new Recurring(),

                //Task once daily on the (specified/current) hour
                new OnceDaily(config.ConnectionString),

                //Backoff task
                new Backoff(),

                //Self governing task
                new Adaptive(),

                //Dequeue task, Backoff behavior
                new BackoffRunner(new CompanyDequeuer(config.GenericQueueName, config.ConnectionString)),

                //Dequeue task, Adaptive behavior
                new AdaptiveRunner(new CompanyDequeuer(config.GenericQueueName, config.ConnectionString)),

                //Dequeue task, Recurring behavior
                new RecurringRunner(new CompanyDequeuer(config.GenericQueueName, config.ConnectionString)),

                //Auto Scaling Task
                new DynamicScaler(config),
            });

            ///Dequeue examples
            var f = new DequeueFactory(config.ConnectionString);

            tasks.AddRange(f.Dequeue <CompanyProcessor, CompanyModel>(config.SlowQueueName));
            tasks.AddRange(f.Dequeue <CompanyProcessor, CompanyModel>(config.ModerateQueueName, QueuePriority.Medium));
            tasks.AddRange(f.Dequeue <CompanyProcessor, CompanyModel>(config.FastQueueName, QueuePriority.High));
            tasks.AddRange(f.Shards <CompanyProcessor, CompanyModel>(config.ShardQueueName, 10));

            //Cordinated Tasks between Instances
            var coordinated = new Coordinated(config.ConnectionString);

            // Add once to ensure that Table is created for Instances to communicate with
            tasks.AddRange(coordinated.Tasks());
            // Add your coordinated task
            tasks.Add(coordinated);

            return(tasks);
        }
Пример #3
0
        public void InitializeNames()
        {
            var f     = new DequeueFactory(ConnectionString);
            var tasks = f.Initialize(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString());

            Assert.IsNotNull(tasks);
            Assert.AreEqual(3, tasks.Count());
        }
Пример #4
0
        public void InitializeName()
        {
            var f    = new DequeueFactory(ConnectionString);
            var task = f.Initialize(Guid.NewGuid().ToString());

            Assert.IsNotNull(task);
            Assert.IsNotNull(task as InitializeStorageTask);
        }
Пример #5
0
        public void TasksSetupsNull()
        {
            var f     = new DequeueFactory(ConnectionString);
            var tasks = f.Tasks <object>((IEnumerable <QueueSetup <object> >)null);

            Assert.IsNotNull(tasks);

            Assert.That(() => tasks.Count(), Throws.TypeOf <ArgumentNullException>());
        }
Пример #6
0
        public void InitializeNamesNull()
        {
            var f     = new DequeueFactory(ConnectionString);
            var tasks = f.Initialize((string[])null);

            Assert.IsNotNull(tasks);

            Assert.That(() => tasks.Count(), Throws.TypeOf <ArgumentNullException>());
        }
        /// <summary>
        /// Load Tasks
        /// </summary>
        /// <param name="config">Task Configuration</param>
        /// <returns>Runnable Tasks</returns>
        public virtual IEnumerable <IRunnable> Tasks(ITaskConfiguration config)
        {
            var tasks = new List <IRunnable>();

            tasks.AddRange(this.Initialize(config));

            var factory = new DequeueFactory(config.ConnectionString);

            tasks.AddRange(factory.Tasks <ImageQueued>(new ImageDequeueSetup(config)));

            return(tasks);
        }
Пример #8
0
        public void ShardsZeroCount()
        {
            var f     = new DequeueFactory(ConnectionString);
            var tasks = f.Shards <HelpP, object>("testing", 0);

            Assert.IsNotNull(tasks);
            Assert.AreEqual(2 * 2, tasks.Count());

            var t = (from n in tasks
                     where n.GetType() == typeof(InitializeStorageTask)
                     select true).FirstOrDefault();

            Assert.IsTrue(t);
        }
Пример #9
0
        public void TasksSimple()
        {
            var f     = new DequeueFactory(ConnectionString);
            var tasks = f.Tasks <object>("test", () => { return(null); });

            Assert.IsNotNull(tasks);
            Assert.AreEqual(2, tasks.Count());

            var t = (from n in tasks
                     where n.GetType() == typeof(InitializeStorageTask)
                     select true).FirstOrDefault();

            Assert.IsTrue(t);
        }
Пример #10
0
        public void Tasks()
        {
            var setup = new QueueSetup <object>()
            {
                Name     = "test",
                Priority = QueuePriority.Low,
            };
            var f     = new DequeueFactory(ConnectionString);
            var tasks = f.Tasks(setup);

            Assert.IsNotNull(tasks);
            Assert.AreEqual(2, tasks.Count());

            var t = (from n in tasks
                     where n.GetType() == typeof(InitializeStorageTask)
                     select true).FirstOrDefault();

            Assert.IsTrue(t);
        }
        public void Tasks()
        {
            var setup = new QueueSetup<object>()
            {
                Name = "test",
                Priority = QueuePriority.Low,
            };
            var f = new DequeueFactory(ConnectionString);
            var tasks = f.Tasks(setup);

            Assert.IsNotNull(tasks);
            Assert.AreEqual(2, tasks.Count());

            var t = (from n in tasks
                     where n.GetType() == typeof(InitializeStorageTask)
                     select true).FirstOrDefault();

            Assert.IsTrue(t);
        }
        public void TasksMultiple()
        {
            var random = new Random();
            var count = random.Next(1, 20);
            var setups = new List<IQueueSetup<object>>();
            for (var i = 0; i < count; i++)
            {
                var setup = new QueueSetup<object>()
                {
                    Name = "test",
                    Priority = QueuePriority.Low,
                };

                setups.Add(setup);
            }
            var f = new DequeueFactory(ConnectionString);
            var tasks = f.Tasks(setups);

            Assert.IsNotNull(tasks);
            Assert.AreEqual(count * 2, tasks.Count());
        }
Пример #13
0
        public void TasksMultiple()
        {
            var random = new Random();
            var count  = random.Next(1, 20);
            var setups = new List <IQueueSetup <object> >();

            for (var i = 0; i < count; i++)
            {
                var setup = new QueueSetup <object>()
                {
                    Name     = "test",
                    Priority = QueuePriority.Low,
                };

                setups.Add(setup);
            }
            var f     = new DequeueFactory(ConnectionString);
            var tasks = f.Tasks(setups);

            Assert.IsNotNull(tasks);
            Assert.AreEqual(count * 2, tasks.Count());
        }
        public void TasksSetupsNull()
        {
            var f = new DequeueFactory(ConnectionString);
            var tasks = f.Tasks<object>((IEnumerable<QueueSetup<object>>)null);

            Assert.IsNotNull(tasks);
            Assert.AreEqual(2, tasks.Count());
        }
        public void TasksSimpleProcessorNull()
        {
            var f = new DequeueFactory(ConnectionString);
            var tasks = f.Tasks<object>("test", null);

            Assert.IsNotNull(tasks);
            Assert.AreEqual(2, tasks.Count());

            var t = (from n in tasks
                     where n.GetType() == typeof(InitializeStorageTask)
                     select true).FirstOrDefault();

            Assert.IsTrue(t);
        }
 public void TasksSimpleQueueNameNull()
 {
     var f = new DequeueFactory(ConnectionString);
     var tasks = f.Tasks<object>(null, () => { return null; });
 }
 public void DequeueTaskSetupNull()
 {
     var df = new DequeueFactory(ConnectionString);
     df.Dequeue<object>(null);
 }
        public void Dequeue()
        {
            var setup = new QueueSetup<object>()
            {
                Name = "test",
                Priority = QueuePriority.High,
            };

            var random = new Random();
            var scale = new Range<byte>();

            scale.Maximum = (byte)random.Next(byte.MinValue, byte.MaxValue);
            scale.Minimum = (byte)random.Next(byte.MinValue, scale.Maximum);
            
            var throughput = Substitute.For<IQueueThroughput>();
            throughput.Scale(setup.Priority).Returns(scale);
            throughput.CheckScaleEvery(setup.Priority).Returns((byte)random.Next(1, 300));

            var f = new DequeueFactory(ConnectionString, throughput);
            var task = f.Dequeue<object>(setup);

            Assert.IsNotNull(task);
            var scaler = task as StorageQueueAutoScaler<object>;
            Assert.IsNotNull(scaler);
            Assert.AreEqual(scale.Minimum, scaler.InstanceCount.Minimum);
            Assert.AreEqual(scale.Maximum, scaler.InstanceCount.Maximum);

            throughput.Received().Scale(setup.Priority);
            throughput.Received().CheckScaleEvery(setup.Priority);
        }
Пример #19
0
        public void TasksSimpleProcessorNull()
        {
            var f = new DequeueFactory(ConnectionString);

            Assert.That(() => f.Tasks <object>("test", null), Throws.TypeOf <ArgumentNullException>());
        }
Пример #20
0
        public void TasksSimpleQueueNameNull()
        {
            var f = new DequeueFactory(ConnectionString);

            Assert.That(() => f.Tasks <object>(null, () => { return(null); }), Throws.TypeOf <ArgumentException>());
        }
Пример #21
0
        public void DequeueTaskSetupNull()
        {
            var df = new DequeueFactory(ConnectionString);

            Assert.That(() => df.Dequeue <object>(null), Throws.TypeOf <ArgumentNullException>());
        }
Пример #22
0
        public void InitializeNameNull()
        {
            var f = new DequeueFactory(ConnectionString);

            Assert.That(() => f.Initialize((string)null), Throws.TypeOf <ArgumentException>());
        }
Пример #23
0
        public void ShardsNameNull()
        {
            var f = new DequeueFactory(ConnectionString);

            Assert.That(() => f.Shards <HelpP, object>(null), Throws.TypeOf <ArgumentException>());
        }