blob: 3d7fcf511c221e2a9a6a03d9bd9e20d4cd7ee7c6 [file] [log] [blame]
package org.polarsys.chess.contracts.verificationService.test.runtime.tests;
import java.io.File;
import java.util.Collection;
import java.util.Set;
import org.apache.commons.io.FilenameUtils;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.papyrus.junit.framework.classification.tests.AbstractPapyrusTest;
import org.eclipse.papyrus.junit.utils.rules.PluginResource;
import org.eclipse.papyrus.junit.utils.rules.ResourceSetFixture;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.StateMachine;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ErrorCollector;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
import org.polarsys.chess.contracts.verificationService.test.runtime.util.TestResultsUtil;
import org.polarsys.chess.service.core.model.ChessSystemModel;
import org.polarsys.chess.service.core.model.UMLStateMachineModel;
import eu.fbk.eclipse.standardtools.ExecOcraCommands.ui.services.OCRAExecService;
import eu.fbk.eclipse.standardtools.ExecOcraCommands.ui.services.OCRAExecService.ValidationType;
import eu.fbk.eclipse.standardtools.ModelTranslatorToOcra.core.services.OSSTranslatorServiceAPI;
import eu.fbk.eclipse.standardtools.StateMachineTranslatorToSmv.core.services.SMVTranslatorServiceAPI;
import eu.fbk.eclipse.standardtools.nuXmvService.ui.services.NuXmvExecService;
import eu.fbk.tools.adapter.ui.preferences.PreferenceConstants;
public class TestVAndVOperations extends AbstractPapyrusTest {
@Rule
public ErrorCollector collector = new ErrorCollector();
protected String testOutput;
private String testTempOutput;
private EntityUtil entityUtil = EntityUtil.getInstance();
private static final Logger logger = Logger.getLogger(TestVAndVOperations.class);
private final String projectFolderPath = "resources/SSR_fi/";
private final String projectPath = projectFolderPath + "SSR.di";
private final String projectParamArchFolderPath = "resources/ParamArch/";
private final String projectParamArchPath = projectParamArchFolderPath + "ParamArch.di";
@Rule
public final ResourceSetFixture resourceSetFixture = new ResourceSetFixture();
private Class getSystemComponent() throws Exception {
Model model = getModel();
Package umlSelectedPackage = entityUtil.getSystemViewPackage(model);
System.out.println("umlSelectedPackage: " + umlSelectedPackage);
Class umlSelectedComponent = entityUtil.getSystemElement(model);
return umlSelectedComponent;
}
@Test
@PluginResource(projectPath)
public void testCheckValidationOnProperties() throws Exception {
File ossFile = exportModelAsOssFile(testTempOutput);
String oracleFolder = projectFolderPath + "/VandVResults/ValidationProperty";
File outputFolder = new File(testOutput);
String selectedDirectory = outputFolder.getAbsolutePath();
String resultFilePath = selectedDirectory + File.separator + "result_validation_property.xml";
System.out.println("resultFilePath: " + resultFilePath);
OCRAExecService ocraExecService = OCRAExecService.getInstance(ChessSystemModel.getInstance());
ocraExecService.executeValidationProperty(ossFile, ValidationType.CONSISTENCY, "consistency", "ALL", "", "",
true, resultFilePath, new NullProgressMonitor(), true);
TestResultsUtil.dirsAreEqual(oracleFolder, selectedDirectory, collector);
}
@Test
@PluginResource(projectPath)
public void testModelCheckingOnSystemComponent() throws Exception {
File tempFolder = new File(testTempOutput);
String selectedTempDirectory = tempFolder.getAbsolutePath();
String property = "TRUE";
String algorithm_type = "ic3";
String check_type = "ltlspec";
File outputFolder = new File(testOutput);
String selectedDirectory = outputFolder.getAbsolutePath();
// IWorkspaceRoot wRoot = ResourcesPlugin.getWorkspace().getRoot();
// logger.debug("wRoot: " + wRoot);
Class umlSelectedComponent = getSystemComponent();
File smvFile = TestBasicOperations.exportModelAsMonolithicSmvFile(selectedTempDirectory, selectedTempDirectory,
umlSelectedComponent);
String resultFilePath = selectedDirectory + File.separator + "result_validation_property.xml";
NuXmvExecService nuXmvExecService = NuXmvExecService.getInstance(ChessSystemModel.getInstance());
nuXmvExecService.modelCheckingCommand(smvFile.getAbsolutePath(), property, algorithm_type, check_type,
resultFilePath, true);
String oracleFolder = projectFolderPath + "/VandVResults/ModelCheckingOnSystemComponent";
TestResultsUtil.dirsAreEqual(oracleFolder, selectedDirectory, collector);
}
@Test
@PluginResource(projectPath)
public void testCheckCompositeContractImplementation() throws Exception {
File tempFolder = new File(testTempOutput);
String selectedTempDirectory = tempFolder.getAbsolutePath();
OSSTranslatorServiceAPI ossTranslatorServiceAPI = new OSSTranslatorServiceAPI(ChessSystemModel.getInstance());
Class umlSelectedComponent = getSystemComponent();
Object ocraModel = ossTranslatorServiceAPI.exportRootComponentToOssModel(umlSelectedComponent, true,
new NullProgressMonitor());
// File ossFile = exportModelAsOssFile(testTempOutput);
String fileName = ossTranslatorServiceAPI.getFileName(umlSelectedComponent);
File ossFile = ossTranslatorServiceAPI.exportOSSModelToOSSFile(ocraModel, fileName, selectedTempDirectory);
File smvMapFile = TestBasicOperations.createSmvMapFile(selectedTempDirectory, umlSelectedComponent);
File outputFolder = new File(testOutput);
String selectedDirectory = outputFolder.getAbsolutePath();
String resultFilePath = selectedDirectory + File.separator + "result_composite_implementation_property.xml";
System.out.println("resultFilePath: " + resultFilePath);
OCRAExecService ocraExecService = OCRAExecService.getInstance(ChessSystemModel.getInstance());
ocraExecService.executeCheckCompositeImplementation(ossFile, smvMapFile, resultFilePath, true, true);
logger.debug("verifyDirsAreEqual");
String oracleFolder = projectFolderPath + "/VandVResults/CheckCompositeContractImplementation";
TestResultsUtil.dirsAreEqual(oracleFolder, selectedDirectory, collector);
}
@Test
@PluginResource(projectPath)
public void testCheckContractImplementation() throws Exception {
File tempFolder = new File(testTempOutput);
String selectedTempDirectory = tempFolder.getAbsolutePath();
File outputFolder = new File(testOutput);
String selectedDirectory = outputFolder.getAbsolutePath();
Model model = getModel();
// Set<?> stateMachines = entityUtil.getNominalStateMachines(model);
Package umlSelectedPackage = entityUtil.getSystemViewPackage(model);
Collection<Class> blocks = entityUtil.getAllClasses(umlSelectedPackage);
SMVTranslatorServiceAPI smvTranslatorService = SMVTranslatorServiceAPI
.getInstance(ChessSystemModel.getInstance(), UMLStateMachineModel.getInstance());
// File ossFile = exportModelAsOssFile(testTempOutput);
logger.debug("blocks.size: " + blocks.size());
for (Class block : blocks) {
StateMachine stateMachine = entityUtil.getFirstNominalStateMachine(block);
if (stateMachine != null) {
File ossFile = TestBasicOperationsHeadless.exportModelAsOss(block, testTempOutput);
File smvFile = smvTranslatorService.exportStateMachineToSmvFile(stateMachine, selectedTempDirectory,
null, new NullProgressMonitor());
System.out.println("smvFile: " + smvFile.getAbsolutePath());
String resultFilePath =
// "C:\\tmp\\output.xml";
// "C:\\tmp\\output_result_model_checking_"+smvFile.getName()+".xml";
selectedDirectory + File.separator + "result_check_implementation_" + smvFile.getName()
+ ".xml";
System.out.println("resultFilePath: " + resultFilePath);
OCRAExecService ocraExecService = OCRAExecService.getInstance(ChessSystemModel.getInstance());
ocraExecService.executeCheckContractImplementation(ossFile.getAbsolutePath(), smvFile.getAbsolutePath(),
resultFilePath, true, true);
}
}
Thread.sleep(5000);
logger.debug("verifyDirsAreEqual");
String oracleFolder = projectFolderPath + "/VandVResults/CheckContractImplementation";
TestResultsUtil.dirsAreEqual(selectedDirectory, oracleFolder, collector);
}
@Test
@PluginResource(projectPath)
public void testModelChecking() throws Exception {
File tempFolder = new File(testTempOutput);
String selectedTempDirectory = tempFolder.getAbsolutePath();
String property = "TRUE";
String algorithm_type = "ic3";
String check_type = "ltlspec";
File outputFolder = new File(testOutput);
String selectedDirectory = outputFolder.getAbsolutePath();
Model model = getModel();
Set<?> stateMachines = entityUtil.getNominalStateMachines(model);
SMVTranslatorServiceAPI smvTranslatorService = SMVTranslatorServiceAPI
.getInstance(ChessSystemModel.getInstance(), UMLStateMachineModel.getInstance());
logger.debug("stateMachines.size: " + stateMachines.size());
for (Object stateMachine : stateMachines) {
File smvFile = smvTranslatorService.exportStateMachineToSmvFile(stateMachine, selectedTempDirectory, null,
new NullProgressMonitor());
System.out.println("smvFile: " + smvFile.getAbsolutePath());
String resultFilePath =
// "C:\\tmp\\output.xml";
// "C:\\tmp\\output_result_model_checking_"+smvFile.getName()+".xml";
selectedDirectory + File.separator + "result_model_checking_" + smvFile.getName() + ".xml";
System.out.println("resultFilePath: " + resultFilePath);
NuXmvExecService nuXmvExecService = NuXmvExecService.getInstance(ChessSystemModel.getInstance());
nuXmvExecService.modelCheckingCommand(smvFile.getAbsolutePath(), property, algorithm_type, check_type,
resultFilePath, true);
}
String oracleFolder = projectFolderPath + "/VandVResults/ModelChecking";
TestResultsUtil.dirsAreEqual(oracleFolder, selectedDirectory, collector);
}
private File exportModelAsOssFile(String outputFolder) throws Exception {
IWorkspaceRoot wRoot = ResourcesPlugin.getWorkspace().getRoot();
logger.debug("wRoot: " + wRoot);
Class umlSelectedComponent = getSystemComponent();
OSSTranslatorServiceAPI ossTranslatorServiceAPI = new OSSTranslatorServiceAPI(ChessSystemModel.getInstance());
Object ocraModel = ossTranslatorServiceAPI.exportRootComponentToOssModel(umlSelectedComponent, true,
new NullProgressMonitor());
File tempFolder = new File(outputFolder);
String selectedTempDirectory = tempFolder.getAbsolutePath();
// String fileName =
// toolToOCRAModelTranslator.getFileName(umlSelectedComponent);
logger.debug("generateOssFileFromOssModel");
String fileName = ossTranslatorServiceAPI.getFileName(umlSelectedComponent);
File ossFile = ossTranslatorServiceAPI.exportOSSModelToOSSFile(ocraModel, fileName, selectedTempDirectory);
return ossFile;
}
@Test
@PluginResource(projectPath)
public void testCheckContractRefinement() throws Exception {
File ossFile = exportModelAsOssFile(testTempOutput);
String oracleFolder = projectFolderPath + "/VandVResults/ContractRefinement";
File outputFolder = new File(testOutput);
String selectedDirectory = outputFolder.getAbsolutePath();
String resultFilePath = selectedDirectory + File.separator + "result_contract_refinement.xml";
System.out.println("resultFilePath: " + resultFilePath);
OCRAExecService ocraExecService = OCRAExecService.getInstance(ChessSystemModel.getInstance());
ocraExecService.executeCheckContractRefinement(ossFile, true, resultFilePath, new NullProgressMonitor(), true);
TestResultsUtil.dirsAreEqual(oracleFolder, selectedDirectory, collector);
}
@Test
@PluginResource(projectParamArchPath)
public void testCheckContractRefinementOnInstantiateArch() throws Exception {
File ossFile = exportModelAsOssFile(testTempOutput);
File outputTempFolder = new File(testTempOutput);
String selectedTempDirectory = outputTempFolder.getAbsolutePath();
String originalOssFileName = FilenameUtils.removeExtension(ossFile.getName());
String resultFileName = originalOssFileName + "_instantiate.oss";
File instantiateOssFile = TestBasicOperations.instantiateParamArch(resultFileName, selectedTempDirectory,
ossFile, "4");
File outputFolder = new File(testOutput);
String selectedDirectory = outputFolder.getAbsolutePath();
String resultFilePath = selectedDirectory + File.separator + "result_contract_refinement.xml";
System.out.println("resultFilePath: " + resultFilePath);
OCRAExecService ocraExecService = OCRAExecService.getInstance(ChessSystemModel.getInstance());
ocraExecService.executeCheckContractRefinement(instantiateOssFile, true, resultFilePath,
new NullProgressMonitor(), true);
String oracleFolder = projectParamArchFolderPath + "/VandVResults/ContractRefinement";
TestResultsUtil.dirsAreEqual(oracleFolder, selectedDirectory, collector);
}
@Before
public void setTestParameters() throws Exception {
testOutput = TestResultsUtil.cleanDirectory("testOutputVandVOperations");
testTempOutput = TestResultsUtil.cleanDirectory("testTempOutput");
String OCRAFilePath = TestResultsUtil.getProperty("OCRAFilePath");
String nuXmvFilePath = TestResultsUtil.getProperty("nuXmvFilePath");
// String xSAPFilePath =
// getConfigTestProperties().getProperty("xSAPFilePath");
File testTempOutputFile = new File(testTempOutput);
File ocraFile = new File(OCRAFilePath);
File nuXmvFile = new File(nuXmvFilePath);
eu.fbk.tools.adapter.ui.Activator.getDefault().getPreferenceStore().setValue(PreferenceConstants.TOOL_WORKSPACE,
testTempOutputFile.getAbsolutePath());
eu.fbk.tools.adapter.ui.Activator.getDefault().getPreferenceStore()
.setValue(PreferenceConstants.OCRA_EXECUTABLE, ocraFile.getAbsolutePath());
eu.fbk.tools.adapter.ui.Activator.getDefault().getPreferenceStore()
.setValue(PreferenceConstants.NUXMV_EXECUTABLE, nuXmvFile.getAbsolutePath());
}
Model getModel() {
return (Model) resourceSetFixture.getModel();
}
}