package com.yahoo.dtf.junit;
import java.text.ParseException;
import java.util.ArrayList;
import junit.framework.JUnit4TestAdapter;
import junit.framework.TestCase;
import org.junit.BeforeClass;
import org.junit.Test;
import com.yahoo.dtf.DTFNode;
import com.yahoo.dtf.actions.Action;
import com.yahoo.dtf.actions.component.Lockcomponent;
import com.yahoo.dtf.actions.function.Function;
import com.yahoo.dtf.actions.protocol.Lock;
import com.yahoo.dtf.actions.reference.Referencable;
import com.yahoo.dtf.components.LockHook;
import com.yahoo.dtf.exception.DTFException;
import com.yahoo.dtf.functions.Functions;
import com.yahoo.dtf.references.References;
/**
* ComponentHook JUnit testsuite to validate how much time is spent per request
* when processing the available component hooks.
*
* @author rlgomes
*/
public class LockHookSuite extends DTFJUnitTest {
private static final int COMPONENT_COUNT = 128;
private static final int FUNCTION_COUNT = 1000;
private static final int REFERENCE_COUNT = 1000;
@Test(timeout=600000)
public void lockHookTimer() throws DTFException, ParseException {
ArrayList<LockHook> hooks = Lockcomponent.getLockHooks();
getLogger().info("");
getLogger().info("Testing LockHooks with:");
getLogger().info(" * " + FUNCTION_COUNT + " functions registered.");
getLogger().info(" * " + REFERENCE_COUNT + " references created.");
getLogger().info(" * " + COMPONENT_COUNT + " components locked.");
getLogger().info(" * dummy communication layer being used.");
getLogger().info("");
for (int i = 0; i < hooks.size(); i++) {
LockHook hook = hooks.get(i);
long start = System.currentTimeMillis();
for (int l = 0; l < COMPONENT_COUNT; l++) {
Lockcomponent lc = new Lockcomponent();
lc.setId("ID" + l);
hook.init(lc.getId());
}
long stop = System.currentTimeMillis();
getLogger().info(hook.getClass().getSimpleName() +
" hook took " + (stop-start)/COMPONENT_COUNT +
"ms on average.");
}
}
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(LockHookSuite.class);
}
@BeforeClass
public static void startUpNode() throws DTFException {
System.setProperty("dtf.node.type", "dtfc");
System.setProperty("dtf.node.name", "dummy");
System.setProperty("java.security.policy","src/config/policy.txt");
try {
DTFNode.init();
} catch (DTFException e) {
e.printStackTrace();
TestCase.fail("Unable to initialize DTF teststack.");
}
// set the dummy comm layer that does nothing...
Action.getState().setComm(new DummyComm(Action.getConfig()));
// add a few dummy component locks
for (int i = 0; i < COMPONENT_COUNT; i++) {
Lock lock = new Lock();
lock.setId("ID" + i);
Action.getComponents().registerComponent(lock.getId(), lock);
}
// create some dummy functions to send to the components at lock-time
Functions functions = Action.getState().getFunctions();
for (int i = 0; i < FUNCTION_COUNT; i++) {
Function function = new Function();
function.setName("function-" + i);
function.setExport("true");
Function.getExportableFunctions().add(function);
functions.addFunction(function.getName(), function);
}
// create some dummy references to send to the components at lock-time
References references = Action.getState().getReferences();
for (int i = 0; i < REFERENCE_COUNT; i++) {
Referencable ref = new Referencable();
ref.setId("reference-" + i);
references.addReference(ref.getId(), ref);
}
}
}