package com.griddynamics.jagger.engine.e1;
import com.griddynamics.jagger.engine.e1.collector.limits.DecisionPerTest;
import com.griddynamics.jagger.engine.e1.collector.testgroup.TestGroupDecisionMakerInfo;
import com.griddynamics.jagger.engine.e1.services.ServicesAware;
import com.griddynamics.jagger.engine.e1.collector.testgroup.TestGroupDecisionMakerListener;
import com.griddynamics.jagger.util.Decision;
import com.griddynamics.jagger.engine.e1.sessioncomparation.WorstCaseDecisionMaker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
/** Listener, after test group to make decision about test group execution status
* @author Dmitry Latnikov
* @n
* @par Details:
* @details It is executed when decision making based on limits is used. Details: @ref MainDecisionMaker @n
* It is used by default as soon as limit set is attached to test
*
*/
public class BasicTGDecisionMakerListener extends ServicesAware implements Provider<TestGroupDecisionMakerListener> {
private static final Logger log = LoggerFactory.getLogger(BasicTGDecisionMakerListener.class);
/** Method is executed single time when listener is created */
@Override
protected void init() {
}
/** Method is providing listener to Jagger that will make decision for test group */
@Override
public TestGroupDecisionMakerListener provide() {
return new TestGroupDecisionMakerListener() {
/** Returns worst decision from list of decisions per test from input parameter */
@Override
public Decision onDecisionMaking(TestGroupDecisionMakerInfo decisionMakerInfo) {
Decision decisionPerTestGroup;
WorstCaseDecisionMaker worstCaseDecisionMaker = new WorstCaseDecisionMaker();
List<Decision> decisions = new ArrayList<Decision>();
for (DecisionPerTest decisionPerTest : decisionMakerInfo.getDecisionsPerTest()) {
decisions.add(decisionPerTest.getDecisionPerTest());
}
decisionPerTestGroup = worstCaseDecisionMaker.getDecision(decisions);
log.debug("\nDecision for test group {} - {}",decisionMakerInfo.getTestGroup().getTaskName(),decisionPerTestGroup);
return decisionPerTestGroup;
}
};
}
}