blob: 8530ab862b814aab4163eab2d8e21cf8826bda01 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2018 Fondazione Bruno Kessler.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Alberto Debiasi - initial API and implementation
******************************************************************************/
package org.polarsys.chess.contracts.verificationService.test.runtime.tests;
import java.io.File;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeoutException;
import org.apache.log4j.Logger;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.uml2.uml.Model;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.validation.Issue;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.polarsys.chess.contracts.profile.chesscontract.util.EntityUtil;
import org.polarsys.chess.contracts.verificationService.test.runtime.util.TestUtil;
import org.polarsys.chess.service.core.model.ChessSystemModel;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
import eu.fbk.eclipse.standardtools.ModelTranslatorToOcra.core.services.OSSTranslatorServiceAPI;
import eu.fbk.eclipse.standardtools.xtextService.core.utils.XTextResourceUtil;
import eu.fbk.eclipse.standardtools.xtextService.core.utils.XTextValidation;
import eu.fbk.tools.adapter.ocra.CheckContractRefinement;
import eu.fbk.tools.adapter.ocra.CheckContractResultBuilder;
import eu.fbk.tools.adapter.ocra.OcraRunner;
public class TestCheckContractRefinementOfCHESSComponent {
private EntityUtil entityUtil = EntityUtil.getInstance();
private OSSTranslatorServiceAPI ossTranslatorServiceAPI = OSSTranslatorServiceAPI
.getInstance(ChessSystemModel.getInstance());
private XTextResourceUtil xTextResourceUtil = XTextResourceUtil.getInstance();
private XTextValidation xtextValidation = XTextValidation.getInstance();
private static final Logger logger = Logger.getLogger(TestModelChecking.class);
private boolean temp_variable_is_discrete = false;
private final String projectName = "WBS_SM_Multi_State";
private final String modelName = "WBS.uml";
private String workspace;// = "C:\\Windows\\Temp\\amass\\";
private String resultFilePath;// = workspace+"exportedOSS.oss";
private String OCRAPath;// = "C:\\Users\\Alberto\\Downloads\\20180124_OpenCertCHESSClient_Win_x64\\amass_P1\\FBK_Tools\\OCRA\\ocra_win64.exe";
private final int timeout = 1000*60*5;
EObject umlSelectedComponent;
Resource componentResource;
@Before
public void setTestParameters() throws Exception {
Properties prop = TestUtil.getInstance().getConfigTestProperties();
workspace = prop.getProperty("workspace");
System.out.println("workspace: "+workspace);
OCRAPath = prop.getProperty("OCRAPath");
System.out.println("OCRAPath: "+OCRAPath);
resultFilePath = workspace+"exportedOSS.oss";
Model model = entityUtil.loadModel(projectName, modelName);
String elementURI = entityUtil.getSystemElementURIFragment(model);
umlSelectedComponent = entityUtil.getElement(model, elementURI);
componentResource = umlSelectedComponent.eResource();
logger.debug("elementURI: " + elementURI);
}
@Test
@Ignore
public void testCheckContractRefinementOfCHESSComponent() throws Exception {
System.out.println("Workspace: "+workspace);
IProgressMonitor monitor = new NullProgressMonitor();
Object ocraModel = ossTranslatorServiceAPI.exportRootComponentToOssModel(umlSelectedComponent,
temp_variable_is_discrete, monitor);
String fileName = ossTranslatorServiceAPI.getFileName(umlSelectedComponent);
File ossFile = ossTranslatorServiceAPI.exportOSSModelToOSSFile(ocraModel,fileName,resultFilePath);
Assert.assertTrue("The generated file exists", ossFile.exists());
XtextResource xTextResource = xTextResourceUtil.createOSSResourceFromFile(ossFile.getPath());
List<Issue> issues = xtextValidation.xTextValidation(xTextResource);
Assert.assertTrue("No xText issues", issues.isEmpty());
checkContractRefinement(ossFile);
}
private void checkContractRefinement(File contractFile){
final CheckContractRefinement function = new CheckContractRefinement(contractFile.toURI());
function.setTimeModel(eu.fbk.tools.adapter.ocra.OcraFunction.TimeModel.discrete);
final OcraRunner runner = new OcraRunner(OCRAPath);
runner.setWorkspaceDir(workspace);
runner.setDebugMode(false);
runner.setToolFunction(function);
try
{
final Triple<Integer, String, String> output = runner.runTool(timeout);
final CheckContractResultBuilder resultBuilder = new CheckContractResultBuilder();
Assert.assertNotNull(resultBuilder.unmarshalResult(runner.getResultFile()));
System.out.println("done");
}
catch (TimeoutException e)
{
Assert.assertTrue("Timeout error checking model [" + contractFile.getName() + "]", false);
}
catch (Throwable t) {
t.printStackTrace();
}
runner.cleanSessionWorkspace();
}
}