package com.griddynamics.jagger.test.jaas.util; import com.griddynamics.jagger.engine.e1.services.data.service.*; import com.griddynamics.jagger.test.jaas.util.entity.ExecutionEntity; import java.util.*; /** * Stores and provides access to test context (expected data mainly). * Created by ELozovan on 2016-09-28. */ public class TestContext { private static volatile TestContext instance; private static String sessionsUri; private static String testsUri; private static String executionsUri; private static String endpointUri; private Set<SessionEntity> sessions = new TreeSet<>(); private Map<String, Set<TestEntity>> tests = new HashMap<>(); /** * Key:SessionId, Value:[Key:TestName, Value:Set of Metrics] */ private Map<String, Map<String, Set<MetricEntity>>> metrics = new HashMap<>(); private Map<MetricEntity, MetricSummaryValueEntity> metricSummaries = new HashMap<>(); private Map<MetricEntity, List<MetricPlotPointEntity>> metricPlotData = new HashMap<>(); /** * Execution Ids which were created during test run. */ private Set<Long> createdExecutionsIds = new HashSet<>(); private Long firstRemovedExecution; private TestContext() { } public static TestContext get() { TestContext localInstance = instance; if (localInstance == null) { synchronized (TestContext.class) { localInstance = instance; if (localInstance == null) { instance = localInstance = new TestContext(); } } } return localInstance; } public static Set<SessionEntity> getSessions() { return get().sessions; } public static void setSessions(Set<SessionEntity> sessions) { get().sessions = sessions; } /** * Returns NULL if no session entity found. */ public static SessionEntity getSession(String id) { return get().sessions.stream().filter((s) -> id.equals(s.getId())).findFirst().orElse(null); } public static Map<String, Set<TestEntity>> getTests() { return get().tests; } public static void setTests(Map<String, Set<TestEntity>> tests) { get().tests = tests; } public static Set<TestEntity> getTestsBySessionId(String sessionId) { return get().tests.get(sessionId); } public static TestEntity getTestByName(String sessionId, String testName) { return getTestsBySessionId(sessionId).stream().filter((t) -> t.getName().equals(testName)).findFirst().orElse(null); } public static void addTests(String sessionId, Set<TestEntity> sessionTests) { get().tests.put(sessionId, sessionTests); } public static Map<String, Map<String, Set<MetricEntity>>> getMetrics() { return get().metrics; } public static void setMetrics(Map<String, Map<String, Set<MetricEntity>>> metrics) { get().metrics = metrics; } public static Set<MetricEntity> getMetricsBySessionIdAndTestName(String sessionId, String testName) { return get().metrics.get(sessionId).get(testName); } public static void addMetrics(String sessionId, String testName, Set<MetricEntity> metrics) { Map<String, Set<MetricEntity>> tmp = new HashMap<>(); tmp.put(testName, metrics); get().metrics.put(sessionId, tmp); } public static Map<MetricEntity, MetricSummaryValueEntity> getMetricSummaries() { return get().metricSummaries; } public static void setMetricSummaries(Map<MetricEntity, MetricSummaryValueEntity> metricSummaries) { get().metricSummaries = metricSummaries; } public static Map<MetricEntity, List<MetricPlotPointEntity>> getMetricPlotData() { return get().metricPlotData; } public static void setMetricPlotData(Map<MetricEntity, List<MetricPlotPointEntity>> metricPlotData) { get().metricPlotData = metricPlotData; } public static Set<Long> getCreatedExecutionIds() { return get().createdExecutionsIds; } public static void addCreatedExecutionId(Long createdExecutionId) { get().createdExecutionsIds.add(createdExecutionId); } public static String getExecutionConfigPrototype() { return ExecutionEntity.getDefault().toJson(); } public static Long getFirstRemovedExecution() { return get().firstRemovedExecution; } public static void setFirstRemovedExecution(Long firstRemovedExecution) { if (get().firstRemovedExecution == null) { get().firstRemovedExecution = firstRemovedExecution; } } public static void initUri(JaggerPropertiesProvider provider) { sessionsUri = provider.getPropertyValue("jaas.rest.base.sessions"); testsUri = provider.getPropertyValue("jaas.rest.sub.sessions.tests"); executionsUri = provider.getPropertyValue("jaas.rest.executions"); endpointUri = provider.getPropertyValue("jaas.endpoint"); } public static String getSessionsUri() { return sessionsUri; } public static String getTestsUri() { return testsUri; } public static String getExecutionsUri() { return executionsUri; } public static String getEndpointUri() { return endpointUri; } }