/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.calcnode;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.opengamma.engine.test.TestCalculationNode;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.test.TestLifecycle;
import com.opengamma.util.test.Timeout;
/**
* Tests the LocalNodeJobInvoker class
*/
@Test(groups = TestGroup.UNIT)
public class LocalNodeJobInvokerTest {
private static final long TIMEOUT = Timeout.standardTimeoutMillis();
private JobInvoker _invoker;
private Register _register;
@BeforeMethod
public void setUp() {
_invoker = null;
_register = new Register();
}
public void testAddNodeWithCallbackPending() {
TestLifecycle.begin();
try {
final LocalNodeJobInvoker invoker = new LocalNodeJobInvoker();
_invoker = null;
assertFalse(invoker.notifyWhenAvailable(_register));
assertNull(_invoker);
final TestCalculationNode node = new TestCalculationNode();
invoker.addNode(node);
assertEquals(invoker, _invoker);
} finally {
TestLifecycle.end();
}
}
public void testAddCallbackWithNodePending() {
TestLifecycle.begin();
try {
final LocalNodeJobInvoker invoker = new LocalNodeJobInvoker();
_invoker = null;
final TestCalculationNode node = new TestCalculationNode();
TestLifecycle.register(node);
invoker.addNode(node);
assertTrue(invoker.notifyWhenAvailable(_register));
assertNull(_invoker);
} finally {
TestLifecycle.end();
}
}
public void testInvokeWithNoNodes() {
final LocalNodeJobInvoker invoker = new LocalNodeJobInvoker();
final TestJobInvocationReceiver receiver = new TestJobInvocationReceiver();
assertFalse(invoker.invoke(JobDispatcherTest.createTestJob(), receiver));
assertNull(receiver.getCompletionResult());
}
public void testInvokeWithOneNode() {
TestLifecycle.begin();
try {
final TestCalculationNode node = new TestCalculationNode();
TestLifecycle.register(node);
final LocalNodeJobInvoker invoker = new LocalNodeJobInvoker(node);
TestLifecycle.register(invoker);
final TestJobInvocationReceiver receiver = new TestJobInvocationReceiver();
final CalculationJob job = JobDispatcherTest.createTestJob();
assertTrue(invoker.invoke(job, receiver));
final CalculationJobResult jobResult = receiver.waitForCompletionResult(TIMEOUT);
assertNotNull(jobResult);
assertEquals(job.getSpecification(), jobResult.getSpecification());
} finally {
TestLifecycle.end();
}
}
class Register implements JobInvokerRegister {
@Override
public void registerJobInvoker(final JobInvoker invoker) {
_invoker = invoker;
}
}
}