package rocks.inspectit.server.diagnosis.engine.session; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.equalTo; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.Collections; import org.mockito.InjectMocks; import org.mockito.Mock; import org.testng.annotations.Test; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import rocks.inspectit.server.diagnosis.engine.rule.ConditionFailure; import rocks.inspectit.server.diagnosis.engine.rule.RuleOutput; import rocks.inspectit.server.diagnosis.engine.rule.store.DefaultRuleOutputStorage; import rocks.inspectit.server.diagnosis.engine.tag.Tag; import rocks.inspectit.server.diagnosis.engine.tag.TagState; import rocks.inspectit.server.diagnosis.engine.tag.Tags; import rocks.inspectit.shared.all.testbase.TestBase; /** * Tests the {@link DefaultSessionResultCollector} class. * * @author Alexander Wert * */ public class DefaultSessionResultCollectorTest extends TestBase { @InjectMocks DefaultSessionResultCollector<String> collector; @Mock SessionContext<String> sessionContext; @Mock DefaultRuleOutputStorage storage; /** * Tests the {@link DefaultSessionResultCollector#collect(SessionContext)} method; * * @author Alexander Wert * */ public class Collect extends DefaultSessionResultCollectorTest { @Test public void collect() { String input = "input"; Multimap<String, RuleOutput> outputMap = ArrayListMultimap.create(); Tag tagA = Tags.tag("A", input, Tags.rootTag(input)); Tag tagB = Tags.tag("B", input, tagA); Tag tagC = Tags.tag("C", input, tagB); Tag tagD1 = Tags.tag("D1", input, tagC); Tag tagD2 = Tags.tag("D2", input, tagC); ConditionFailure cFailure1 = new ConditionFailure("Cond1", "test hint"); ConditionFailure cFailure2 = new ConditionFailure("Cond2", "test hint2"); RuleOutput output1 = new RuleOutput("RuleA", "A", Arrays.asList(cFailure1), Arrays.asList(tagA)); RuleOutput output2 = new RuleOutput("RuleB", "B", Arrays.asList(cFailure2), Arrays.asList(tagB)); RuleOutput output3 = new RuleOutput("RuleC", "C", Collections.<ConditionFailure> emptyList(), Arrays.asList(tagC)); RuleOutput output4 = new RuleOutput("RuleD", "D", Collections.<ConditionFailure> emptyList(), Arrays.asList(tagD1, tagD2)); outputMap.put(output1.getRuleName(), output1); outputMap.put(output2.getRuleName(), output2); outputMap.put(output3.getRuleName(), output3); outputMap.put(output4.getRuleName(), output4); Multimap<String, Tag> tagMap = ArrayListMultimap.create(); tagMap.put("D", tagD1); tagMap.put("D", tagD2); when(sessionContext.getStorage()).thenReturn(storage); when(sessionContext.getInput()).thenReturn(input); when(storage.getAllOutputsWithConditionFailures()).thenReturn(outputMap); when(storage.mapTags(TagState.LEAF)).thenReturn(tagMap); DefaultSessionResult<String> result = collector.collect(sessionContext); assertThat(result.getInput(), equalTo(input)); assertThat(result.getEndTags().values(), containsInAnyOrder(tagD1, tagD2)); assertThat(result.getConditionFailures().values(), containsInAnyOrder(cFailure1, cFailure2)); } } }