/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.function.blacklist; import static org.testng.Assert.assertEquals; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.mockito.Mockito; import org.testng.annotations.Test; import com.opengamma.engine.ComputationTarget; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.calcnode.CalculationJobItem; import com.opengamma.engine.function.EmptyFunctionParameters; import com.opengamma.engine.function.FunctionParameters; import com.opengamma.engine.target.ComputationTargetType; 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 DefaultFunctionBlacklistMaintainer} class. */ @Test(groups = TestGroup.UNIT) public class DefaultFunctionBlacklistMaintainerTest { private final String _functionIdentifier1 = "F1"; private final String _functionIdentifier2 = "F2"; private final ComputationTarget _target = new ComputationTarget(ComputationTargetType.PRIMITIVE, UniqueId.of("Test", "Test")); private final FunctionParameters _functionParameters = new EmptyFunctionParameters(); private final ComputationTargetSpecification _targetSpecification = _target.toSpecification(); private final Set<ValueSpecification> _inputs = Collections.<ValueSpecification>emptySet(); private final Set<ValueSpecification> _outputs = Collections.<ValueSpecification>emptySet(); private final CalculationJobItem _jobItem1 = new CalculationJobItem(_functionIdentifier1, _functionParameters, _targetSpecification, _inputs, _outputs, ExecutionLogMode.INDICATORS); private final CalculationJobItem _jobItem2 = new CalculationJobItem(_functionIdentifier2, _functionParameters, _targetSpecification, _inputs, _outputs, ExecutionLogMode.INDICATORS); public void testEmptyPolicy() { final FunctionBlacklistPolicy policy = new EmptyFunctionBlacklistPolicy(); final ManageableFunctionBlacklist update = Mockito.mock(ManageableFunctionBlacklist.class); final FunctionBlacklistMaintainer maintainer = new DefaultFunctionBlacklistMaintainer(policy, update); maintainer.failedJobItem(_jobItem1); maintainer.failedJobItem(_jobItem2); // Empty policy means no rules added Mockito.verifyZeroInteractions(update); } public void testSimplePolicy() { final ExecutorService executor = Executors.newSingleThreadExecutor(); try { final Collection<FunctionBlacklistPolicy.Entry> entries = new ArrayList<FunctionBlacklistPolicy.Entry>(); entries.add(FunctionBlacklistPolicy.Entry.WILDCARD.activationPeriod(5)); entries.add(FunctionBlacklistPolicy.Entry.FUNCTION.activationPeriod(10)); entries.add(FunctionBlacklistPolicy.Entry.PARAMETERIZED_FUNCTION.activationPeriod(30)); entries.add(FunctionBlacklistPolicy.Entry.PARTIAL_NODE.activationPeriod(60)); entries.add(FunctionBlacklistPolicy.Entry.EXECUTION_NODE); final FunctionBlacklistPolicy policy = new DefaultFunctionBlacklistPolicy(UniqueId.of("Test", "Test"), 120, entries); final Map<FunctionBlacklistRule, Integer> rules = new HashMap<FunctionBlacklistRule, Integer>(); final ManageableFunctionBlacklist update = new AbstractManageableFunctionBlacklist("Test", executor, 0) { @Override public Set<FunctionBlacklistRule> getRules() { throw new UnsupportedOperationException(); } @Override public void removeBlacklistRule(final FunctionBlacklistRule rule) { throw new UnsupportedOperationException(); } @Override public void addBlacklistRule(final FunctionBlacklistRule rule, final int timeToLive) { rules.put(rule, timeToLive); } }; final FunctionBlacklistMaintainer maintainer = new DefaultFunctionBlacklistMaintainer(policy, update); maintainer.failedJobItem(_jobItem1); maintainer.failedJobItem(_jobItem2); assertEquals(rules.size(), 9); final FunctionBlacklistRule rule = new FunctionBlacklistRule(); assertEquals((long) rules.get(rule), 5); // WILDCARD rule.setFunctionIdentifier(_functionIdentifier1); assertEquals((long) rules.get(rule), 10); // FUNCTION-1 rule.setFunctionParameters(_functionParameters); assertEquals((long) rules.get(rule), 30); // PARAMETERIZED_FUNCTION-1 rule.setTarget(_targetSpecification); assertEquals((long) rules.get(rule), 60); // PARTIAL_NODE-1 rule.setInputs(_inputs); rule.setOutputs(_outputs); assertEquals((long) rules.get(rule), 120); // EXACT_NODE-2 rule.setFunctionIdentifier(_functionIdentifier2); assertEquals((long) rules.get(rule), 120); // EXACT_NODE-2 rule.setInputs(null); rule.setOutputs(null); assertEquals((long) rules.get(rule), 60); // PARTIAL_NODE-2 rule.setTarget(null); assertEquals((long) rules.get(rule), 30); // PARAMETERIZED_FUNCTION-2 rule.setFunctionParameters(null); assertEquals((long) rules.get(rule), 10); // FUNCTION-2 } finally { executor.shutdown(); } } }