package rocks.inspectit.server.diagnosis.engine.session; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.mockito.Mock; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import rocks.inspectit.server.diagnosis.engine.rule.RuleDefinition; import rocks.inspectit.server.diagnosis.engine.rule.RuleInput; import rocks.inspectit.server.diagnosis.engine.rule.exception.RuleDefinitionException; import rocks.inspectit.server.diagnosis.engine.rule.factory.Rules; import rocks.inspectit.server.diagnosis.engine.rule.store.DefaultRuleOutputStorage; import rocks.inspectit.server.diagnosis.engine.tag.Tags; import rocks.inspectit.server.diagnosis.engine.testrules.RuleA; import rocks.inspectit.server.diagnosis.engine.testrules.RuleB; import rocks.inspectit.server.diagnosis.engine.testrules.RuleC; import rocks.inspectit.shared.all.testbase.TestBase; /** * Tests the {@link SessionContext} class. * * @author Alexander Wert * */ public class SessionContextTest extends TestBase { SessionContext<String> sessionContext; @Mock DefaultRuleOutputStorage storage; Set<RuleDefinition> rules; @BeforeMethod public void init() throws RuleDefinitionException { rules = Rules.define(RuleA.class, RuleB.class, RuleC.class); sessionContext = new SessionContext<>(rules, storage); } /** * Tests the {@link SessionContext#activate(Object, java.util.Map)} method. * * @author Alexander Wert * */ public class Activate extends SessionContextTest { @Test public void activateOnce() { String input = "input"; Map<String, String> variables = new HashMap<>(); variables.put("Key", "Value"); assertThat(sessionContext.getRuleSet(), empty()); sessionContext.activate(input, variables); assertThat(sessionContext.getExecutions().keySet(), empty()); assertThat(sessionContext.getRuleSet(), hasSize(3)); assertThat(sessionContext.getRuleSet(), containsInAnyOrder(rules.toArray())); assertThat(sessionContext.getInput(), equalTo(input)); assertThat(sessionContext.getSessionVariables().get("Key").toString(), equalTo("Value")); } @Test public void activateTwice() { String input = "input"; Map<String, String> variables = new HashMap<>(); variables.put("Key", "Value"); sessionContext.activate(input, variables); sessionContext.activate(input, variables); assertThat(sessionContext.getExecutions().keySet(), empty()); assertThat(sessionContext.getRuleSet(), hasSize(3)); assertThat(sessionContext.getRuleSet(), containsInAnyOrder(rules.toArray())); assertThat(sessionContext.getInput(), equalTo(input)); assertThat(sessionContext.getSessionVariables().get("Key").toString(), equalTo("Value")); } } /** * Tests the {@link SessionContext#passivate()} method. * * @author Alexander Wert * */ public class Passivate extends SessionContextTest { @Test public void passivateOnce() { String input = "input"; Map<String, String> variables = new HashMap<>(); variables.put("Key", "Value"); sessionContext.activate(input, variables); sessionContext.passivate(); assertThat(sessionContext.getExecutions().keySet(), empty()); assertThat(sessionContext.getRuleSet(), empty()); assertThat(sessionContext.getInput(), equalTo(null)); assertThat(sessionContext.getSessionVariables().keySet(), empty()); } @Test public void passivateTwice() { String input = "input"; Map<String, String> variables = new HashMap<>(); variables.put("Key", "Value"); sessionContext.activate(input, variables); sessionContext.passivate(); sessionContext.passivate(); assertThat(sessionContext.getExecutions().keySet(), empty()); assertThat(sessionContext.getRuleSet(), empty()); assertThat(sessionContext.getInput(), equalTo(null)); assertThat(sessionContext.getSessionVariables().keySet(), empty()); } } /** * Tests the * {@link SessionContext#addExecution(RuleDefinition, rocks.inspectit.server.diagnosis.engine.rule.RuleInput)} * method. * * @author Alexander Wert * */ public class AddExecution extends SessionContextTest { @Test public void add() { RuleInput input = new RuleInput(Tags.tag("A", "input")); sessionContext.addExecution(rules.iterator().next(), input); assertThat(sessionContext.getExecutions().get(rules.iterator().next()), containsInAnyOrder(input)); } } }