/** * 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.assertFalse; import static org.testng.Assert.assertTrue; import java.util.Arrays; import java.util.Collections; import java.util.Set; import org.testng.annotations.Test; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.function.EmptyFunctionParameters; import com.opengamma.engine.function.ParameterizedFunction; import com.opengamma.engine.function.SimpleFunctionParameters; import com.opengamma.engine.test.MockFunction; import com.opengamma.engine.value.ValueProperties; import com.opengamma.engine.value.ValuePropertyNames; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.id.UniqueId; import com.opengamma.util.test.TestGroup; /** * Tests the {@link DefaultFunctionBlacklistQuery} class. */ @Test(groups = TestGroup.UNIT) public class DefaultFunctionBlacklistQueryTest { private final ParameterizedFunction _function1; private final ParameterizedFunction _function2; private final ParameterizedFunction _function3; private final ParameterizedFunction _function4; private final ComputationTargetSpecification _target1; private final ComputationTargetSpecification _target2; private final Set<ValueSpecification> _inputs1; private final Set<ValueSpecification> _inputs2; private final Set<ValueSpecification> _outputs1; private final Set<ValueSpecification> _outputs2; public DefaultFunctionBlacklistQueryTest() { _function1 = new ParameterizedFunction(new MockFunction("F1", null), new EmptyFunctionParameters()); _function2 = new ParameterizedFunction(new MockFunction("F2", null), new EmptyFunctionParameters()); _function3 = new ParameterizedFunction(new MockFunction("F1", null), new SimpleFunctionParameters()); _function4 = new ParameterizedFunction(new MockFunction("F2", null), new SimpleFunctionParameters()); _target1 = ComputationTargetSpecification.of(UniqueId.of("Test", "Foo")); _target2 = ComputationTargetSpecification.of(UniqueId.of("Test", "Bar")); _inputs1 = Collections.singleton(new ValueSpecification("Foo", _target1, ValueProperties.with(ValuePropertyNames.FUNCTION, "X").get())); _inputs2 = Collections.singleton(new ValueSpecification("Bar", _target1, ValueProperties.with(ValuePropertyNames.FUNCTION, "X").get())); _outputs1 = Collections.singleton(new ValueSpecification("Foo", _target2, ValueProperties.with(ValuePropertyNames.FUNCTION, "Y").get())); _outputs2 = Collections.singleton(new ValueSpecification("Bar", _target2, ValueProperties.with(ValuePropertyNames.FUNCTION, "Y").get())); } public void testEmpty() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); assertTrue(bl.isEmpty()); assertFalse(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_function1, _target1)); assertFalse(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); } public void testSingleEntry_wildcard() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); bl.addRule(new FunctionBlacklistRule()); assertFalse(bl.isEmpty()); assertTrue(bl.isBlacklisted(_function1)); assertTrue(bl.isBlacklisted(_target1)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); } public void testSingleEntry_function() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); bl.addRule(new FunctionBlacklistRule(_function1)); assertFalse(bl.isEmpty()); assertTrue(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_function2)); assertFalse(bl.isBlacklisted(_function3)); assertFalse(bl.isBlacklisted(_function4)); assertFalse(bl.isBlacklisted(_target1)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function2, _target1)); assertFalse(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); } public void testSingleEntry_functionIdentifier() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); final FunctionBlacklistRule rule = new FunctionBlacklistRule(); rule.setFunctionIdentifier("F1"); bl.addRule(rule); assertFalse(bl.isEmpty()); assertTrue(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_function2)); assertTrue(bl.isBlacklisted(_function3)); assertFalse(bl.isBlacklisted(_function4)); assertFalse(bl.isBlacklisted(_target1)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function2, _target1)); assertFalse(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function3, _target1)); assertTrue(bl.isBlacklisted(_function3, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function4, _target1)); assertFalse(bl.isBlacklisted(_function4, _target1, _inputs1, _outputs1)); } public void testSingleEntry_functionParameters() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); final FunctionBlacklistRule rule = new FunctionBlacklistRule(); rule.setFunctionParameters(new EmptyFunctionParameters()); bl.addRule(rule); assertFalse(bl.isEmpty()); assertTrue(bl.isBlacklisted(_function1)); assertTrue(bl.isBlacklisted(_function2)); assertFalse(bl.isBlacklisted(_function3)); assertFalse(bl.isBlacklisted(_function4)); assertFalse(bl.isBlacklisted(_target1)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function2, _target1)); assertTrue(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function3, _target1)); assertFalse(bl.isBlacklisted(_function3, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function4, _target1)); assertFalse(bl.isBlacklisted(_function4, _target1, _inputs1, _outputs1)); } public void testSingleEntry_target() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); bl.addRule(new FunctionBlacklistRule(_target1)); assertFalse(bl.isEmpty()); assertFalse(bl.isBlacklisted(_function1)); assertTrue(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_target2)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertFalse(bl.isBlacklisted(_function1, _target2)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target2, _inputs1, _outputs1)); } public void testSingleEntry_functionTarget() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); bl.addRule(new FunctionBlacklistRule(_function1, _target1)); assertFalse(bl.isEmpty()); assertFalse(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_function2)); assertFalse(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_target2)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertFalse(bl.isBlacklisted(_function1, _target2)); assertFalse(bl.isBlacklisted(_function2, _target1)); assertFalse(bl.isBlacklisted(_function2, _target2)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target2, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function2, _target2, _inputs1, _outputs1)); } public void testSingleEntry_inputs() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); final FunctionBlacklistRule rule = new FunctionBlacklistRule(); rule.setInputs(_inputs1); bl.addRule(rule); assertFalse(bl.isEmpty()); assertFalse(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target1, _inputs2, _outputs1)); } public void testSingleEntry_outputs() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); final FunctionBlacklistRule rule = new FunctionBlacklistRule(); rule.setOutputs(_outputs1); bl.addRule(rule); assertFalse(bl.isEmpty()); assertFalse(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs2)); } public void testSingleEntry_full() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); bl.addRule(new FunctionBlacklistRule(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isEmpty()); assertFalse(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target2, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target1, _inputs2, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs2)); } public void testMultipleEntries() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); bl.addRules(Arrays.asList( new FunctionBlacklistRule(_function1), new FunctionBlacklistRule(_target1), new FunctionBlacklistRule(_function2, _target2), new FunctionBlacklistRule(_function3, _target2, _inputs1, _outputs1))); assertFalse(bl.isEmpty()); assertTrue(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_function2)); assertTrue(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_target2)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target2)); assertTrue(bl.isBlacklisted(_function2, _target1)); assertTrue(bl.isBlacklisted(_function2, _target2)); assertFalse(bl.isBlacklisted(_function3, _target2)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function1, _target2, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function1, _target2, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function2, _target1, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function2, _target2, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function2, _target2, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function3, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function3, _target1, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function3, _target2, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function3, _target2, _inputs2, _outputs2)); } public void testRemoveRule() { final DefaultFunctionBlacklistQuery bl = new DefaultFunctionBlacklistQuery(new EmptyFunctionBlacklist()); bl.addRule(new FunctionBlacklistRule(_function1)); bl.addRule(new FunctionBlacklistRule(_target1)); bl.addRule(new FunctionBlacklistRule(_function2, _target2)); bl.addRule(new FunctionBlacklistRule(_function3, _target2, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_function2)); assertTrue(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_target2)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target2)); assertTrue(bl.isBlacklisted(_function2, _target1)); assertTrue(bl.isBlacklisted(_function2, _target2)); assertFalse(bl.isBlacklisted(_function3, _target2)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function1, _target2, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function1, _target2, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function2, _target1, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function2, _target2, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function2, _target2, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function3, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function3, _target1, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function3, _target2, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function3, _target2, _inputs2, _outputs2)); bl.removeRule(new FunctionBlacklistRule(_target1)); bl.removeRule(new FunctionBlacklistRule(_function3, _target2, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_function2)); assertFalse(bl.isBlacklisted(_target1)); // changed assertFalse(bl.isBlacklisted(_target2)); assertTrue(bl.isBlacklisted(_function1, _target1)); assertTrue(bl.isBlacklisted(_function1, _target2)); assertFalse(bl.isBlacklisted(_function2, _target1)); // changed assertTrue(bl.isBlacklisted(_function2, _target2)); assertFalse(bl.isBlacklisted(_function3, _target2)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function1, _target1, _inputs2, _outputs2)); assertTrue(bl.isBlacklisted(_function1, _target2, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function1, _target2, _inputs2, _outputs2)); assertFalse(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); // changed assertFalse(bl.isBlacklisted(_function2, _target1, _inputs2, _outputs2)); // changed assertTrue(bl.isBlacklisted(_function2, _target2, _inputs1, _outputs1)); assertTrue(bl.isBlacklisted(_function2, _target2, _inputs2, _outputs2)); assertFalse(bl.isBlacklisted(_function3, _target1, _inputs1, _outputs1)); // changed assertFalse(bl.isBlacklisted(_function3, _target1, _inputs2, _outputs2)); // changed assertFalse(bl.isBlacklisted(_function3, _target2, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function3, _target2, _inputs2, _outputs2)); bl.removeRules(Arrays.asList(new FunctionBlacklistRule(_function1), new FunctionBlacklistRule(_function2, _target2))); // No rules left assertFalse(bl.isBlacklisted(_function1)); assertFalse(bl.isBlacklisted(_function2)); assertFalse(bl.isBlacklisted(_target1)); assertFalse(bl.isBlacklisted(_target2)); assertFalse(bl.isBlacklisted(_function1, _target1)); assertFalse(bl.isBlacklisted(_function1, _target2)); assertFalse(bl.isBlacklisted(_function2, _target1)); assertFalse(bl.isBlacklisted(_function2, _target2)); assertFalse(bl.isBlacklisted(_function3, _target2)); assertFalse(bl.isBlacklisted(_function1, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target1, _inputs2, _outputs2)); assertFalse(bl.isBlacklisted(_function1, _target2, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function1, _target2, _inputs2, _outputs2)); assertFalse(bl.isBlacklisted(_function2, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function2, _target1, _inputs2, _outputs2)); assertFalse(bl.isBlacklisted(_function2, _target2, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function2, _target2, _inputs2, _outputs2)); assertFalse(bl.isBlacklisted(_function3, _target1, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function3, _target1, _inputs2, _outputs2)); assertFalse(bl.isBlacklisted(_function3, _target2, _inputs1, _outputs1)); assertFalse(bl.isBlacklisted(_function3, _target2, _inputs2, _outputs2)); assertTrue(bl.isEmpty()); } }