package org.jboss.as.test.integration.ejb.interceptor.invocationcontext;
import javax.ejb.Timer;
import javax.interceptor.InvocationContext;
import org.jboss.logging.Logger;
/**
* Checking values of InvocationContext during its flow amongst interceptors.
*
* @author Ondrej Chaloupka
*/
public class InvocationContextChecker {
private static final Logger log = Logger.getLogger(InvocationContextChecker.class);
public static String checkBeanInterceptorContext(InvocationContext ctx, String previousPhase, String currentPhase) {
log.trace("Checking method call interceptor on: " + currentPhase);
boolean okContext = false;
if (previousPhase == null) {
okContext = ctx.getContextData().get("interceptor") == null;
} else {
okContext = previousPhase.equals(ctx.getContextData().get("interceptor"));
}
ctx.getContextData().put("interceptor", currentPhase);
final boolean okTimer = ctx.getTimer() == null;
final boolean okTarget = ctx.getTarget() instanceof InvocationBean;
final boolean okMethod = "callMethod".equals(ctx.getMethod().getName());
Object[] params = ctx.getParameters();
Integer param1 = (Integer) params[0];
String param2 = (String) params[1];
final boolean okParam = param1 == 1;
Object[] newParams = {param1, param2 + currentPhase};
ctx.setParameters(newParams);
String retStr = currentPhase;
boolean isOk = okContext && okTimer && okTarget && okMethod && okParam;
if (isOk) {
retStr += "OK:";
} else {
retStr += "FAIL:";
retStr += okContext ? "" : "(context expected: " + previousPhase + " but was " + ctx.getContextData().get("interceptor") + ")";
retStr += okTimer ? "" : "(timer was not null but " + ctx.getTimer() + " )";
retStr += okTarget ? "" : "(target was not instance of InvocationBean but was " + ctx.getTarget() + ")";
retStr += okMethod ? "" : "(method was not callMethod but was " + ctx.getMethod().getName() + ")";
retStr += okParam ? "" : "(first parameter was not 1 but was " + param1 + ")";
log.error(retStr);
}
return retStr;
}
public static String checkTimeoutInterceptorContext(InvocationContext ctx, String previousPhase, String currentPhase) {
log.trace("Checking timeout interceptor on: " + currentPhase);
boolean okContext = false;
if (previousPhase == null) {
okContext = ctx.getContextData().get("interceptor") == null;
} else {
okContext = previousPhase.equals(ctx.getContextData().get("interceptor"));
}
ctx.getContextData().put("interceptor", currentPhase);
final boolean okTimer = ctx.getTimer() != null;
final boolean okTarget = ctx.getTarget() instanceof TimeoutBean;
final boolean okMethod = "timeout".equals(ctx.getMethod().getName());
Object[] params = ctx.getParameters();
final boolean okParams = params[0] instanceof Timer;
String retStr = "Timeout" + currentPhase;
boolean isOk = okContext && okTimer && okTarget && okMethod && okParams;
if (isOk) {
retStr += "OK:";
} else {
retStr += "FAIL:";
retStr += okContext ? "" : "(context expected: " + previousPhase + " but was " + ctx.getContextData().get("interceptor") + ")";
retStr += okTimer ? "" : "(timer was null but it can't be)";
retStr += okTarget ? "" : "(target was not instance of InvocationBean but was " + ctx.getTarget() + ")";
retStr += okMethod ? "" : "(method was not callMethod but was " + ctx.getMethod().getName() + ")";
retStr += okParams ? "" : "(first param has to be type of Timer and not " + params[0] + " )";
log.error(retStr);
}
return retStr;
}
}