예제 #1
0
        public void Setup()
        {
            var parameters = new TestJobParams("Test Job",
                                               1);

            var ser = JsonConvert.SerializeObject(parameters);

            _jobDefinition = new JobQueueItemEntity
            {
                JobId      = Guid.NewGuid(),
                Name       = "jobDefinition Name",
                Serialized = ser,
                Type       = "NodeTest.JobHandlers.TestJobParams"
            };
            _nodeStartupNotification = new NodeStartupNotificationToManagerFake(_nodeConfigurationFake,
                                                                                new FakeHttpSender());
            _jobDetailSender = new JobDetailSender(_nodeConfigurationFake, new FakeHttpSender());
            _trySendJobDetailToManagerTimer =
                new TrySendJobDetailToManagerTimer(_nodeConfigurationFake,
                                                   _jobDetailSender);

            _pingToManagerFake = new PingToManagerFake();

            _sendJobDoneTimer = new SendJobDoneTimerFake(_nodeConfigurationFake,
                                                         _jobDetailSender,
                                                         new FakeHttpSender());

            _sendJobCanceledTimer = new SendJobCanceledTimerFake(_nodeConfigurationFake,
                                                                 _jobDetailSender,
                                                                 new FakeHttpSender());

            _sendJobFaultedTimer = new SendJobFaultedTimerFake(_nodeConfigurationFake,
                                                               _jobDetailSender,
                                                               new FakeHttpSender());
        }
예제 #2
0
        public void ShouldBeAbleToInvokeAHandler()
        {
            var invokehandler = Container.Resolve <InvokeHandler>();

            var jobParams = new TestJobParams("Test Job", 1);

            IEnumerable <object> returnObjects = null;

            invokehandler.Invoke(jobParams,
                                 new CancellationTokenSource(),
                                 _ => {},
                                 ref returnObjects
                                 );
        }
예제 #3
0
        public void ShouldBeAbleToInvokeAHandlerAndGetExitObjectInReturn()
        {
            var invokehandler = Container.Resolve <InvokeHandler>();

            var jobParams = new TestJobParams("Test Job", 1);

            IEnumerable <object> returnObjects = null;

            invokehandler.Invoke(jobParams,
                                 new CancellationTokenSource(),
                                 _ => { },
                                 ref returnObjects
                                 );

            Assert.IsNotNull(returnObjects);
            var list = ((List <object>)returnObjects);

            Assert.True(list.Count > 0);
            Assert.IsNotNull(list.FirstOrDefault(x => x is ExitApplication));
        }
예제 #4
0
        public void PrepareToStartJobShouldReturnConflictWhenAlreadyProcessingJob()
        {
            _workerWrapper = new WorkerWrapper(new ShortRunningInvokeHandlerFake(),
                                               _nodeConfigurationFake,
                                               _nodeStartupNotification,
                                               _pingToManagerFake,
                                               _sendJobDoneTimer,
                                               _sendJobCanceledTimer,
                                               _sendJobFaultedTimer,
                                               _trySendJobDetailToManagerTimer,
                                               _jobDetailSender);

            _nodeController = new NodeController(_workerWrapper)
            {
                Request       = new HttpRequestMessage(),
                Configuration = new HttpConfiguration()
            };

            var parameters = new TestJobParams("Test Job",
                                               1);
            var ser = JsonConvert.SerializeObject(parameters);

            var jobToDo2 = new JobQueueItemEntity
            {
                JobId      = Guid.NewGuid(),
                Name       = "Another name",
                Serialized = ser,
                Type       = "NodeTest.JobHandlers.TestJobParams"
            };

            _nodeController.PrepareToStartJob(_jobQueueItemEntity);

            var actionResult = _nodeController.PrepareToStartJob(jobToDo2);

            Assert.IsTrue(actionResult.ExecuteAsync(new CancellationToken())
                          .Result.StatusCode ==
                          HttpStatusCode.Conflict);
        }
예제 #5
0
        public void Execute(object parameter)
        {
            Task.Factory.StartNew(() =>
            {
                var uri = ManagerUriBuilder.GetAddToJobQueueUri();

                for (var i = 0; i < NumberOfJobs; i++)
                {
                    var testJobParams       = new TestJobParams("Test job Data " + i, 10);
                    var testJobParamsToJson = JsonConvert.SerializeObject(testJobParams);

                    var job = new JobQueueItem
                    {
                        Name       = "Job Name " + i,
                        Serialized = testJobParamsToJson,
                        Type       = "NodeTest.JobHandlers.TestJobParams",
                        CreatedBy  = "test"
                    };

                    var response = HttpSender.PostAsync(uri, job);
                }
            });
        }
예제 #6
0
        public static List <JobQueueItem> GenerateTestJobRequests(int numberOfJobRequests,
                                                                  int duration)
        {
            List <JobQueueItem> jobQueueItems = new List <JobQueueItem>();

            if (numberOfJobRequests > 0)
            {
                for (var i = 1; i <= numberOfJobRequests; i++)
                {
                    var testJobParams       = new TestJobParams("Name " + i, duration);
                    var testJobParamsToJson = JsonConvert.SerializeObject(testJobParams);

                    var job = new JobQueueItem
                    {
                        Name       = "Job Name " + i,
                        Serialized = testJobParamsToJson,
                        Type       = "NodeTest.JobHandlers.TestJobParams",
                        CreatedBy  = "test"
                    };
                    jobQueueItems.Add(job);
                }
            }
            return(jobQueueItems);
        }
예제 #7
0
        public void StartDurationTest()
        {
            CancellationTokenSourceDurationTest = new CancellationTokenSource();

            Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    var tasksToDispose = _tasks.Where(task => task.IsCompleted);

                    foreach (var task in tasksToDispose)
                    {
                        task.Dispose();

                        _tasks.Remove(task);
                    }

                    if (CancellationTokenSourceDurationTest.Token.IsCancellationRequested)
                    {
                        CancellationTokenSourceDurationTest.Token.ThrowIfCancellationRequested();
                    }
                }
            }, CancellationTokenSourceDurationTest.Token);

            Task.Factory.StartNew(() =>
            {
                var mangerUriBuilder = new ManagerUriBuilder();
                var addToJobQueueUri = mangerUriBuilder.GetAddToJobQueueUri();

                var httpSender = new HttpSender();

                Random random = new Random();

                for (int i = 0; i < NumberOfMessages; i++)
                {
                    if (CancellationTokenSourceDurationTest.Token.IsCancellationRequested)
                    {
                        CancellationTokenSourceDurationTest.Token.ThrowIfCancellationRequested();
                    }

                    var i1 = i;

                    var randomTimeSpan = random.Next(MessageDurationFrom, MessageDurationTo);

                    _tasks.Add(new Task <HttpResponseMessage>(() =>
                    {
                        var testJobTimerParams =
                            new TestJobParams("Test job name " + i1, randomTimeSpan);

                        var jobParamsToJson =
                            JsonConvert.SerializeObject(testJobTimerParams);

                        var jobQueueItem = new JobQueueItem
                        {
                            Name       = "Job Name " + i1,
                            Serialized = jobParamsToJson,
                            Type       = "NodeTest.JobHandlers.TestJobParams",
                            CreatedBy  = "WPF Client"
                        };

                        return(httpSender.PostAsync(addToJobQueueUri,
                                                    jobQueueItem).Result);
                    }, CancellationTokenSourceDurationTest.Token));
                }

                var sendJobEveryDurationTimer =
                    new SendJobEveryDurationTimer <HttpResponseMessage>(_tasks,
                                                                        TimeSpan.FromSeconds(5),
                                                                        ProgressAction);

                CheckManagerDbTimer.Start();
                sendJobEveryDurationTimer.SendTimer.Start();
            });
        }