/**
* 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.Assert.assertFalse;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import org.mockito.Mockito;
import org.testng.annotations.Test;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.calcnode.CalculationJobItem;
import com.opengamma.engine.calcnode.RemoteNodeServer;
import com.opengamma.engine.calcnode.RemoteNodeServer.FunctionBlacklistMaintainerProvider;
import com.opengamma.engine.calcnode.RemoteNodeServer.FunctionBlacklistMaintainerProviderBean;
import com.opengamma.engine.calcnode.RemoteNodeServer.FunctionBlacklistQueryProvider;
import com.opengamma.engine.calcnode.RemoteNodeServer.FunctionBlacklistQueryProviderBean;
import com.opengamma.engine.calcnode.RemoteNodeServer.MultipleFunctionBlacklistMaintainerProvider;
import com.opengamma.engine.calcnode.RemoteNodeServer.MultipleFunctionBlacklistQueryProvider;
import com.opengamma.engine.calcnode.RemoteNodeServer.StaticFunctionBlacklistMaintainerProvider;
import com.opengamma.engine.calcnode.RemoteNodeServer.StaticFunctionBlacklistQueryProvider;
import com.opengamma.engine.function.EmptyFunctionParameters;
import com.opengamma.engine.function.blacklist.DefaultFunctionBlacklistPolicy;
import com.opengamma.engine.function.blacklist.EmptyFunctionBlacklist;
import com.opengamma.engine.function.blacklist.EmptyFunctionBlacklistPolicy;
import com.opengamma.engine.function.blacklist.FunctionBlacklist;
import com.opengamma.engine.function.blacklist.FunctionBlacklistMaintainer;
import com.opengamma.engine.function.blacklist.FunctionBlacklistPolicy;
import com.opengamma.engine.function.blacklist.FunctionBlacklistProvider;
import com.opengamma.engine.function.blacklist.FunctionBlacklistQuery;
import com.opengamma.engine.function.blacklist.FunctionBlacklistRule;
import com.opengamma.engine.function.blacklist.ManageableFunctionBlacklist;
import com.opengamma.engine.function.blacklist.ManageableFunctionBlacklistProvider;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.engine.view.ExecutionLogMode;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.TestGroup;
/**
* Tests the {@link RemoteNodeServer} class.
*/
@Test(groups = TestGroup.UNIT)
public class RemoteNodeServerTest {
private final CalculationJobItem JOB_ITEM = new CalculationJobItem("1", new EmptyFunctionParameters(), ComputationTargetSpecification.NULL,
Collections.<ValueSpecification>emptySet(), Collections.<ValueSpecification>emptySet(), ExecutionLogMode.INDICATORS);
// Blacklisting subclasses
public void testStaticFunctionBlacklistMaintainerProvider() {
final FunctionBlacklistMaintainer maintainer = Mockito.mock(FunctionBlacklistMaintainer.class);
final StaticFunctionBlacklistMaintainerProvider provider = new StaticFunctionBlacklistMaintainerProvider(maintainer);
assertSame(provider.getUpdate("Foo"), maintainer);
}
public void testFunctionBlacklistMaintainerProviderBean_emptyPolicy() {
final FunctionBlacklistMaintainerProviderBean bean = new FunctionBlacklistMaintainerProviderBean();
bean.setBlacklistProvider(Mockito.mock(ManageableFunctionBlacklistProvider.class));
bean.setBlacklistPrefix("BL_");
bean.setBlacklistPolicy(new EmptyFunctionBlacklistPolicy());
assertNull(bean.getUpdate("Foo"));
}
public void testFunctionBlacklistMaintainerProviderBean_livePolicy() {
final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
try {
final FunctionBlacklistMaintainerProviderBean bean = new FunctionBlacklistMaintainerProviderBean();
final ManageableFunctionBlacklistProvider provider = Mockito.mock(ManageableFunctionBlacklistProvider.class);
final ManageableFunctionBlacklist blacklist = Mockito.mock(ManageableFunctionBlacklist.class);
Mockito.when(provider.getBlacklist("BL_Foo")).thenReturn(blacklist);
bean.setBlacklistProvider(provider);
bean.setBlacklistPrefix("BL_");
bean.setBlacklistPolicy(new DefaultFunctionBlacklistPolicy(UniqueId.of("Test", "Foo"), 60, Arrays.asList(FunctionBlacklistPolicy.Entry.WILDCARD)));
final FunctionBlacklistMaintainer maintainer = bean.getUpdate("Foo");
maintainer.failedJobItem(JOB_ITEM);
Mockito.verify(blacklist).addBlacklistRule(new FunctionBlacklistRule(), 60);
} finally {
scheduler.shutdown();
}
}
public void testMultipleFunctionBlacklistMaintainerProvider_empty() {
final MultipleFunctionBlacklistMaintainerProvider provider = new MultipleFunctionBlacklistMaintainerProvider(
Arrays.<FunctionBlacklistMaintainerProvider>asList(new StaticFunctionBlacklistMaintainerProvider(null)));
assertNull(provider.getUpdate("Foo"));
}
public void testMultipleFunctionBlacklistMaintainerProvider_full() {
final FunctionBlacklistMaintainer a = Mockito.mock(FunctionBlacklistMaintainer.class);
final FunctionBlacklistMaintainer b = Mockito.mock(FunctionBlacklistMaintainer.class);
final MultipleFunctionBlacklistMaintainerProvider provider = new MultipleFunctionBlacklistMaintainerProvider(Arrays.<FunctionBlacklistMaintainerProvider>asList(
new StaticFunctionBlacklistMaintainerProvider(null), new StaticFunctionBlacklistMaintainerProvider(a), new StaticFunctionBlacklistMaintainerProvider(b)));
final FunctionBlacklistMaintainer m = provider.getUpdate("Foo");
m.failedJobItem(JOB_ITEM);
Mockito.verify(a).failedJobItem(JOB_ITEM);
Mockito.verify(b).failedJobItem(JOB_ITEM);
}
public void testStaticFunctionBlacklistQueryProvider() {
final FunctionBlacklistQuery query = Mockito.mock(FunctionBlacklistQuery.class);
final StaticFunctionBlacklistQueryProvider provider = new StaticFunctionBlacklistQueryProvider(query);
assertSame(provider.getQuery("Foo"), query);
}
public void testFunctionBlacklistQueryProviderBean() {
final FunctionBlacklistProvider provider = Mockito.mock(FunctionBlacklistProvider.class);
final FunctionBlacklist blacklist = new EmptyFunctionBlacklist();
Mockito.when(provider.getBlacklist("BL_Foo")).thenReturn(blacklist);
final FunctionBlacklistQueryProviderBean bean = new FunctionBlacklistQueryProviderBean();
bean.setBlacklistPrefix("BL_");
bean.setBlacklistProvider(provider);
final FunctionBlacklistQuery query = bean.getQuery("Foo");
assertTrue(query.isEmpty());
}
public void testMultipleFunctionBlacklistQueryProvider_empty() {
final MultipleFunctionBlacklistQueryProvider provider = new MultipleFunctionBlacklistQueryProvider(
Arrays.<FunctionBlacklistQueryProvider>asList(new StaticFunctionBlacklistQueryProvider(null)));
assertNull(provider.getQuery("Foo"));
}
public void testMultipleFunctionBlacklistQueryProvider_full() {
final FunctionBlacklistQuery a = Mockito.mock(FunctionBlacklistQuery.class);
final FunctionBlacklistQuery b = Mockito.mock(FunctionBlacklistQuery.class);
final MultipleFunctionBlacklistQueryProvider provider = new MultipleFunctionBlacklistQueryProvider(Arrays.<FunctionBlacklistQueryProvider>asList(
new StaticFunctionBlacklistQueryProvider(null), new StaticFunctionBlacklistQueryProvider(a), new StaticFunctionBlacklistQueryProvider(b)));
final FunctionBlacklistQuery q = provider.getQuery("Foo");
Mockito.when(a.isBlacklisted(JOB_ITEM)).thenReturn(Boolean.FALSE);
Mockito.when(b.isBlacklisted(JOB_ITEM)).thenReturn(Boolean.FALSE);
assertFalse(q.isBlacklisted(JOB_ITEM));
Mockito.verify(a).isBlacklisted(JOB_ITEM);
Mockito.verify(b).isBlacklisted(JOB_ITEM);
}
// TODO: test the other aspects
}