blob: 6adb12ddd993062131eddf8d62e9cc2e8b6bd063 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.tracecompass.tmf.analysis.xml.core.tests.stateprovider;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.List;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.compile.TmfXmlPatternCu;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.compile.TmfXmlStateProviderCu;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.fsm.module.DataDrivenAnalysisModule;
import org.eclipse.tracecompass.internal.tmf.analysis.xml.core.pattern.stateprovider.XmlPatternAnalysis;
import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
import org.eclipse.tracecompass.tmf.analysis.xml.core.module.TmfXmlStrings;
import org.eclipse.tracecompass.tmf.analysis.xml.core.module.TmfXmlUtils;
import org.eclipse.tracecompass.tmf.analysis.xml.core.tests.common.TmfXmlTestFiles;
import org.eclipse.tracecompass.tmf.core.analysis.TmfAbstractAnalysisModule;
import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* Base test for XML analysis module
*
* @author Jean-Christian Kouame
*/
public abstract class XmlModuleTestBase {
private TmfAbstractAnalysisModule fModule;
/**
* Test the module construction
*/
@Test
public void testModuleConstruction() {
Document doc = getXmlFile().getXmlDocument();
assertNotNull(doc);
/* get analysis modules */
NodeList analysisNodes = doc.getElementsByTagName(getAnalysisNodeName());
assertTrue(analysisNodes.getLength() > 0);
final Element node = (Element) analysisNodes.item(0);
assertNotNull(node);
createModule(node);
String moduleId = node.getAttribute(TmfXmlStrings.ID);
assertNotNull(moduleId);
fModule.setId(moduleId);
assertEquals(getAnalysisId(), fModule.getId());
assertEquals(getAnalysisName(), fModule.getName());
fModule.dispose();
}
private void createModule(@NonNull Element element) {
String analysisId = element.getAttribute(TmfXmlStrings.ID);
switch (getAnalysisNodeName()) {
case TmfXmlStrings.PATTERN:
TmfXmlPatternCu patternCu = TmfXmlPatternCu.compile(element);
assertNotNull(patternCu);
fModule = new XmlPatternAnalysis(analysisId, patternCu);
fModule.setName(getName(element));
break;
case TmfXmlStrings.STATE_PROVIDER:
TmfXmlStateProviderCu compile = TmfXmlStateProviderCu.compile(getXmlFile().getFile().toPath(), analysisId);
assertNotNull(compile);
fModule = new DataDrivenAnalysisModule(analysisId, compile);
fModule.setName(getName(element));
break;
default:
fail();
}
}
/**
* Get the analysis XML node name
*
* @return The name
*/
protected abstract @NonNull String getAnalysisNodeName();
/**
* Get the XML file this test use
*
* @return The file
*/
protected abstract TmfXmlTestFiles getXmlFile();
/**
* Get the analysis name
*
* @return The name
*/
protected abstract String getAnalysisName();
/**
* Get the id of the analysis
*
* @return The id
*/
protected abstract String getAnalysisId();
/**
* Get the trace this test use
*
* @return The trace
*/
protected abstract @NonNull CtfTestTrace getTrace();
/**
* Get the name of the analysis
*
* @param element
* The analysis element
* @return The name
*/
public static @NonNull String getName(Element element) {
String name = null;
List<Element> head = TmfXmlUtils.getChildElements(element, TmfXmlStrings.HEAD);
if (head.size() == 1) {
List<Element> labels = TmfXmlUtils.getChildElements(head.get(0), TmfXmlStrings.LABEL);
if (!labels.isEmpty()) {
name = labels.get(0).getAttribute(TmfXmlStrings.VALUE);
}
}
assertNotNull("analysis name", name);
return name;
}
/**
* Test the module executes correctly
*/
@Test
public void testModuleExecution() {
Document doc = getXmlFile().getXmlDocument();
assertNotNull(doc);
/* get State Providers modules */
NodeList stateproviderNodes = doc.getElementsByTagName(getAnalysisNodeName());
Element node = (Element) stateproviderNodes.item(0);
assertNotNull(node);
createModule(node);
String moduleId = node.getAttribute(TmfXmlStrings.ID);
assertNotNull(moduleId);
fModule.setId(moduleId);
CtfTmfTrace trace = CtfTmfTestTraceUtils.getTrace(getTrace());
try {
fModule.setTrace(trace);
fModule.schedule();
assertTrue(fModule.waitForCompletion(new NullProgressMonitor()));
} catch (TmfAnalysisException e) {
fail("Cannot set trace " + e.getMessage());
} finally {
trace.dispose();
fModule.dispose();
CtfTmfTestTraceUtils.dispose(getTrace());
}
}
}