Beispiel #1
0
        public void TestWork_PluginException()
        {
            ObjectJobDefinition d = new ObjectJobDefinition(
                new PipelineDefinition(
                    new[] { new AlgorithmDefinition("Test", new Property[] { }) }),
                new[] { new JobInput(Image.FromFile("img.bmp")) });
            JobRequest   r      = new JobRequest(d);
            JobTicket    ticket = new JobTicket(r, new DudCancellationHandler());
            TicketWorker w      = new TicketWorker();
            WorkerArgs   args   = new WorkerArgs(new DudPersister(), new BadPipelineFactory());

            args.Ticket = ticket;

            bool       didError  = false;
            bool       didFinish = false;
            TicketSink s         = new TicketSink();

            ticket.Sinks.Add(s);
            s.JobError     += (se, e) => didError = true;
            s.JobCompleted += (se, e) => didFinish = true;
            w.Work(args);

            // Events are dispatched on a seperate thread, so let it run.
            Thread.Sleep(15);

            Assert.IsTrue(didError);
            Assert.IsFalse(didFinish);

            JobResult result = ticket.Result;

            Assert.AreEqual(JobState.Error, result.Result);
            Assert.AreEqual(typeof(NotImplementedException), result.Exception.GetType());
        }
Beispiel #2
0
        public void TestWork_EmptyJob()
        {
            ObjectJobDefinition d = new ObjectJobDefinition(
                new PipelineDefinition(
                    new AlgorithmDefinition[] { }),
                new JobInput[] { });
            JobRequest r               = new JobRequest(d);
            JobTicket  ticket          = new JobTicket(r, new DudCancellationHandler());
            ProcessPluginRepository re = new ProcessPluginRepository();

            RegistryCache.Cache.Initialize(re);
            RegistryFactory factory = new RegistryFactory(re);
            TicketWorker    w       = new TicketWorker();
            WorkerArgs      args    = new WorkerArgs(new DudPersister(), new BadPipelineFactory());

            args.Ticket = ticket;

            bool       didError  = false;
            bool       didFinish = false;
            TicketSink s         = new TicketSink();

            ticket.Sinks.Add(s);
            s.JobCompleted += (se, e) => didFinish = true;
            w.Work(args);

            // Events are dispatched on a seperate thread, so let it run.
            Thread.Sleep(15);

            Assert.IsTrue(didFinish);

            JobResult result = ticket.Result;

            Assert.AreEqual(JobState.Complete, result.Result);
        }
Beispiel #3
0
        public void TestWork_InputProcessedFired()
        {
            ObjectJobDefinition d = new ObjectJobDefinition(
                new PipelineDefinition(
                    new[] { new AlgorithmDefinition("Test", new Property[] { }) }),
                new[] { new JobInput(Image.FromFile("img.bmp"))
                        {
                            Identifier = "Test"
                        } });
            JobRequest   r      = new JobRequest(d);
            JobTicket    ticket = new JobTicket(r, new DudCancellationHandler());
            TicketWorker w      = new TicketWorker();
            WorkerArgs   args   = new WorkerArgs(new DudPersister(), new DudPipelineFactory());

            args.Ticket = ticket;

            bool didProcess       = false;
            InputProcessedArgs ie = null;
            TicketSink         s  = new TicketSink();

            ticket.Sinks.Add(s);
            s.InputProcessed += (se, e) => { didProcess = true; ie = e; };

            w.Work(args);

            Thread.Sleep(5);

            Assert.IsTrue(didProcess);
            Assert.IsNotNull(ie);
            Assert.AreEqual("Test", ie.Identifier);
        }
Beispiel #4
0
        /// <summary>
        /// Entry point to the threaded execute functionality
        /// </summary>
        private void _execute()
        {
            IProcessingService  service = Container.Resolve <IProcessingService>();
            ObjectJobDefinition d       = new ObjectJobDefinition(_source.Pipeline, _filesToInputs());
            JobRequest          r       = new JobRequest(d);

            r.Identifier = _source.Identifier;
            IJobTicket  t       = service.JobManager.EnqueueJob(r);
            IJobTracker tracker = Container.Resolve <IJobTracker>();

            tracker.Add(t, _source.Handler);
        }
Beispiel #5
0
        public void TestWork_NoWorker()
        {
            ObjectJobDefinition d = new ObjectJobDefinition(
                new PipelineDefinition(
                    new AlgorithmDefinition[] { }),
                new JobInput[] { });
            JobRequest    r           = new JobRequest(d);
            JobTicket     ticket      = new JobTicket(r, new DudCancellationHandler());
            JobQueue      queue       = new JobQueue();
            QueueExecutor executor    = new QueueExecutor(queue);
            bool          didComplete = false;

            executor.ExhaustedQueue += (s, e) => didComplete = true;
            queue.Enqueue(ticket);

            executor.Start();
        }
Beispiel #6
0
        public void TestWork_OneJob()
        {
            ObjectJobDefinition d = new ObjectJobDefinition(
                new PipelineDefinition(
                    new AlgorithmDefinition[] { }),
                new JobInput[] { });
            JobRequest    r        = new JobRequest(d);
            JobTicket     ticket   = new JobTicket(r, new DudCancellationHandler());
            JobQueue      queue    = new JobQueue();
            WorkerImpl    worker   = new WorkerImpl();
            QueueExecutor executor = new QueueExecutor(queue);

            executor.Worker        = worker;
            executor.PluginFactory = new DudFactory();
            executor.Persister     = new DudPersister();
            bool didComplete = false;

            executor.ExhaustedQueue += (s, e) => didComplete = true;
            queue.Enqueue(ticket);

            executor.Start();

            int totalTime = 0;

            while (didComplete == false)
            {
                Thread.Sleep(1);
                totalTime += 1;
                if (totalTime > 10000)
                {
                    Assert.Fail("Did not complete job in less than 10s");
                }
            }

            Assert.IsTrue(worker.DidWork);
        }