/* * $Id$ * * Copyright 2007 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.server.utests; import java.util.Arrays; import java.util.List; import ome.api.ITypes; import ome.api.IUpdate; import ome.api.local.LocalQuery; import ome.model.jobs.ImportJob; import ome.model.jobs.Job; import ome.model.jobs.JobStatus; import ome.security.SecuritySystem; import ome.services.procs.Process; import ome.services.procs.ProcessCallback; import ome.services.procs.ProcessManager; import ome.services.procs.Processor; import ome.services.sessions.SessionManager; import ome.services.util.Executor; import ome.system.EventContext; import org.jmock.Mock; import org.jmock.MockObjectTestCase; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * @author Josh Moore, josh at glencoesoftware.com * @since 3.0-Beta2 */ @Test(groups = { "jobs", "ignore" }) public class ProcessManagerMockTest extends MockObjectTestCase { private LocalQuery iQuery; private IUpdate iUpdate; private ITypes iTypes; private SecuritySystem sec; private EventContext ec; private Processor processor; private Process process; private ProcessCallback callback; private Executor executor; private SessionManager manager; protected Mock mockQuery, mockUpdate, mockTypes, mockSec, mockEc, mockProcessor, mockProcess, mockCallback, mockExecutor, mockManager; protected ProcessManager pm; @Override @BeforeMethod protected void setUp() throws Exception { super.setUp(); mockManager = mock(SessionManager.class); mockExecutor = mock(Executor.class); mockQuery = mock(LocalQuery.class); mockUpdate = mock(IUpdate.class); mockTypes = mock(ITypes.class); mockSec = mock(SecuritySystem.class); mockEc = mock(EventContext.class); mockProcessor = mock(Processor.class); mockProcess = mock(Process.class); mockCallback = mock(ProcessCallback.class); manager = (SessionManager) mockManager.proxy(); executor = (Executor) mockExecutor.proxy(); iQuery = (LocalQuery) mockQuery.proxy(); iTypes = (ITypes) mockTypes.proxy(); iUpdate = (IUpdate) mockUpdate.proxy(); sec = (SecuritySystem) mockSec.proxy(); processor = (Processor) mockProcessor.proxy(); process = (Process) mockProcess.proxy(); ec = (EventContext) mockEc.proxy(); org.jmock.core.Stub stub = new org.jmock.core.stub.DefaultResultStub(); mockEc.setDefaultStub(stub); mockProcessor.setDefaultStub(stub); pm = new ProcessManager(manager, sec, executor, processor); } void cleanup() throws Exception { try { verify(); } finally { mockProcessor = null; tearDown(); } } @Test public void testProcess() throws Exception { // This method should simply give each processor the chance to // consume a process willGetSubmitted(); List<? extends Job> list = Arrays.asList(new ImportJob(1L, true)); mockQuery.expects(once()).method("findAllByQuery").will( returnValue(list)); mockProcessor.expects(once()).method("process").will( returnValue(process)); pm.run(); } @Test public void testStartProcessSuccess() throws Exception { long id = 1L; // on start process the process id should be passed to each processor mockProcessor.expects(once()).method("process").with(eq(id)).will( returnValue(process)); // After run, startProcess will register a Process a turn over the // lifecycle to the processor pm.run(); Process p = pm.runningProcess(id); assertEquals(p, process); } @Test public void testStartProcessFailure() throws Exception { // if no processor accepts the job, then it will be marked by the mgr mockProcessor.expects(once()).method("process").will(returnValue(null)); // Then the manager will load the job to set it's state ImportJob job = new ImportJob(); mockQuery.expects(once()).method("find").will(returnValue(job)); mockUpdate.expects(once()).method("saveObject"); } @Test public void testRunningProcess() throws Exception { List<? extends Job> list = Arrays.asList(new ImportJob(1L, true)); mockQuery.expects(once()).method("findAllByQuery").will( returnValue(list)); mockProcessor.expects(once()).method("process").will( returnValue(process)); willGetSubmitted(); pm.run(); Process p = pm.runningProcess(1L); assertTrue(p != null); } // ========================================================================= private void willGetSubmitted() { mockTypes.expects(once()).method("getEnumeration").will( returnValue(new JobStatus("Submitted"))); } }