예제 #1
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);
        }
예제 #2
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());
        }
예제 #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);
        }
예제 #4
0
        /// <summary>
        /// Creates and returns a new <see cref="ISynchronousProcessor"/> clients
        /// can use to compute jobs on their own threads.
        /// </summary>
        /// <returns>An <see cref="ISynchronousProcessor"/> instance for running
        /// jobs within the client.</returns>
        public ISynchronousProcessor CreateSynchronousProcessor()
        {
            IJobPersister persister = new MemoryPersister();
            IWorker       worker    = new TicketWorker();
            var           processor = new SynchronousProcessor(worker);

            processor.Factory = new PluginPipelineFactory(_pluginFactory);
            return(processor);
        }
예제 #5
0
 public TicketController(DataFactory dataFactory)
 {
     _ticketWorker = (TicketWorker)dataFactory.GetDataFactory <Ticket>();
 }