/** * Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite * contributors * * This file is part of EvoSuite. * * EvoSuite is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3.0 of the License, or * (at your option) any later version. * * EvoSuite is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>. */ package org.evosuite.symbolic; import static org.evosuite.symbolic.SymbolicObserverTest.printConstraints; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.net.URL; import java.util.List; import org.evosuite.Properties; import org.evosuite.TestGenerationContext; import org.evosuite.runtime.Runtime; import org.evosuite.runtime.RuntimeSettings; import org.evosuite.runtime.mock.MockFramework; import org.evosuite.runtime.mock.java.io.MockFile; import org.evosuite.runtime.mock.java.net.MockURL; import org.evosuite.runtime.testdata.EvoSuiteFile; import org.evosuite.runtime.testdata.EvoSuiteURL; import org.evosuite.runtime.testdata.FileSystemHandling; import org.evosuite.runtime.testdata.NetworkHandling; import org.evosuite.runtime.vfs.VirtualFileSystem; import org.evosuite.testcase.DefaultTestCase; import org.evosuite.testcase.execution.TestCaseExecutor; import org.evosuite.testcase.variable.VariableReference; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.examples.with.different.packagename.concolic.TestCaseWithFile; import com.examples.with.different.packagename.concolic.TestCaseWithReset; import com.examples.with.different.packagename.concolic.TestCaseWithURL; public class ConcolicExecutionEnvironmentTest { private static final boolean DEFAULT_RESET_STATIC_FIELDS = Properties.RESET_STATIC_FIELDS; private static final boolean DEFAULT_CLIENT_ON_THREAD = Properties.CLIENT_ON_THREAD; private static final boolean DEFAULT_PRINT_TO_SYSTEM = Properties.PRINT_TO_SYSTEM; private static final int DEFAULT_TIMEOUT = Properties.TIMEOUT; private static final int DEFAULT_CONCOLIC_TIMEOUT = Properties.CONCOLIC_TIMEOUT; private static final boolean DEFAULT_VFS = Properties.VIRTUAL_FS; private static final boolean DEFAULT_VNET = Properties.VIRTUAL_NET; private static final boolean DEFAULT_REPLACE_CALLS = Properties.REPLACE_CALLS; private static final boolean DEFAULT_MOCK_FRAMEWORK_ENABLED = MockFramework .isEnabled(); private List<BranchCondition> executeTest(DefaultTestCase tc) { System.out.println("TestCase="); System.out.println(tc.toCode()); // ConcolicExecution concolicExecutor = new ConcolicExecution(); List<BranchCondition> branch_conditions = ConcolicExecution .executeConcolic(tc); printConstraints(branch_conditions); return branch_conditions; } @Test public void testDseWithFile() throws SecurityException, NoSuchMethodException { DefaultTestCase tc = buildTestCaseWithFile(); List<BranchCondition> branch_conditions = executeTest(tc); assertTrue(branch_conditions.size() > 0); } @Test public void testDseWithURL() throws SecurityException, NoSuchMethodException { DefaultTestCase tc = buildTestCaseWithURL(); List<BranchCondition> branch_conditions = executeTest(tc); assertTrue(branch_conditions.size() > 0); } @Test public void testDseWithReset1() throws SecurityException, NoSuchMethodException { DefaultTestCase tc = buildTestCaseWithReset(); List<BranchCondition> branch_conditions = executeTest(tc); assertEquals(1, branch_conditions.size()); } @Test public void testDseWithReset2() throws SecurityException, NoSuchMethodException { DefaultTestCase tc = buildTestCaseWithReset(); List<BranchCondition> branch_conditions = executeTest(tc); assertEquals(1, branch_conditions.size()); } @After public void restore() { TestGenerationContext.getInstance().resetContext(); RuntimeSettings.useVFS = DEFAULT_VFS; Properties.RESET_STATIC_FIELDS = DEFAULT_RESET_STATIC_FIELDS; Properties.REPLACE_CALLS = DEFAULT_REPLACE_CALLS; Properties.VIRTUAL_NET = DEFAULT_VNET; Properties.CLIENT_ON_THREAD = DEFAULT_CLIENT_ON_THREAD; Properties.PRINT_TO_SYSTEM = DEFAULT_PRINT_TO_SYSTEM; Properties.TIMEOUT = DEFAULT_TIMEOUT; Properties.CONCOLIC_TIMEOUT = DEFAULT_CONCOLIC_TIMEOUT; if (DEFAULT_MOCK_FRAMEWORK_ENABLED) { MockFramework.enable(); } else { MockFramework.disable(); } } private static DefaultTestCase buildTestCaseWithReset() throws SecurityException, NoSuchMethodException { Method isZeroMethod = TestCaseWithReset.class.getMethod("isZero", int.class); Method incMethod = TestCaseWithReset.class.getMethod("inc"); TestCaseBuilder tc = new TestCaseBuilder(); // int int0 = 0; VariableReference int0 = tc.appendIntPrimitive(0); // TestCaseWithReset.isZero(int0) tc.appendMethod(null, isZeroMethod, int0); // TestCaseWithReset.inc() tc.appendMethod(null, incMethod); // TestCaseWithReset.inc() tc.appendMethod(null, incMethod); return tc.getDefaultTestCase(); } private static DefaultTestCase buildTestCaseWithURL() throws SecurityException, NoSuchMethodException { TestCaseBuilder tc = new TestCaseBuilder(); // int int0 = 10; VariableReference int0 = tc.appendIntPrimitive(10); // String urlString = "http://evosuite.org/hello.txt"; VariableReference urlStringVarRef = tc .appendStringPrimitive("http://evosuite.org/hello.txt"); // MockURL mockURL0 = MockURL.URL(urlString); Method urlMethod = MockURL.class.getMethod("URL", String.class); VariableReference mockURLVarRef = tc.appendMethod(null, urlMethod, urlStringVarRef); // EvoSuiteURL evosuiteURL = new EvoSuiteURL(); Constructor<EvoSuiteURL> evoSuiteURLCtor = EvoSuiteURL.class .getConstructor(String.class); VariableReference evosuiteURL = tc.appendConstructor(evoSuiteURLCtor, urlStringVarRef); // String string0 = "<<FILE CONTENT>>" VariableReference string0VarRef = tc .appendStringPrimitive("<<FILE CONTENT>>"); // NetworkHandling.createRemoteTextFile(url, string0) Method appendStringToFileMethod = NetworkHandling.class.getMethod( "createRemoteTextFile", EvoSuiteURL.class, String.class); tc.appendMethod(null, appendStringToFileMethod, evosuiteURL, string0VarRef); // TestCaseWithURL testCaseWithURL0 = new TestCaseWithURL(); Constructor<TestCaseWithURL> ctor = TestCaseWithURL.class .getConstructor(); VariableReference testCaseWithURLVarRef = tc.appendConstructor(ctor); // String ret_val = dseWithFile0.test((URL) mockURL0); Method testMethod = TestCaseWithURL.class.getMethod("test", URL.class); tc.appendMethod(testCaseWithURLVarRef, testMethod, mockURLVarRef); // DseWithFile.isiZero(int0) Method isZeroMethod = TestCaseWithFile.class.getMethod("isZero", int.class); tc.appendMethod(null, isZeroMethod, int0); return tc.getDefaultTestCase(); } @Before public void init() { Properties.VIRTUAL_NET = true; Properties.REPLACE_CALLS = true; Properties.RESET_STATIC_FIELDS = true; Properties.CLIENT_ON_THREAD = true; Properties.PRINT_TO_SYSTEM = true; Properties.TIMEOUT = 5000; Properties.CONCOLIC_TIMEOUT = 5000000; RuntimeSettings.useVFS = true; Runtime.getInstance().resetRuntime(); TestCaseExecutor.getInstance().newObservers(); TestCaseExecutor.initExecutor(); MockFramework.enable(); VirtualFileSystem.getInstance().resetSingleton(); VirtualFileSystem.getInstance().init(); } private static DefaultTestCase buildTestCaseWithFile() throws SecurityException, NoSuchMethodException { TestCaseBuilder tc = new TestCaseBuilder(); // int int0 = 10; VariableReference int0 = tc.appendIntPrimitive(10); // MockFile mockFile0 = (MockFile)MockFile.createTempFile("tmp", // "foo.txt"); VariableReference prefixVarRef = tc.appendStringPrimitive("temp"); VariableReference sufixVarRef = tc.appendStringPrimitive(".txt"); Method createTempFileMethod = MockFile.class.getMethod( "createTempFile", String.class, String.class); VariableReference mockFileVarRef = tc.appendMethod(null, createTempFileMethod, prefixVarRef, sufixVarRef); // String path = mockFile0.getPath; Method getPathMethod = MockFile.class.getMethod("getPath"); VariableReference pathVarRef = tc.appendMethod(mockFileVarRef, getPathMethod); // EvoSuiteFile evosuiteFile = new EvoSuiteFile(); Constructor<EvoSuiteFile> evoSuiteFileCtor = EvoSuiteFile.class .getConstructor(String.class); VariableReference evosuiteFile = tc.appendConstructor(evoSuiteFileCtor, pathVarRef); // String string0 = "<<FILE CONTENT>>" VariableReference fileContentVarRef = tc .appendStringPrimitive("<<FILE CONTENT>>"); // FileSystemHandling.appendStringToFile(evosuiteFile, string0) Method appendStringToFileMethod = FileSystemHandling.class.getMethod( "appendStringToFile", EvoSuiteFile.class, String.class); tc.appendMethod(null, appendStringToFileMethod, evosuiteFile, fileContentVarRef); // DseWithFile dseWithFile0 = new DseWithFile(); Constructor<TestCaseWithFile> ctor = TestCaseWithFile.class .getConstructor(); VariableReference dseWithFileVarRef = tc.appendConstructor(ctor); // String ret_val = dseWithFile0.test((File) mockFile0); Method testMethod = TestCaseWithFile.class .getMethod("test", File.class); tc.appendMethod(dseWithFileVarRef, testMethod, mockFileVarRef); // DseWithFile.isiZero(int0) Method isZeroMethod = TestCaseWithFile.class.getMethod("isZero", int.class); tc.appendMethod(null, isZeroMethod, int0); return tc.getDefaultTestCase(); } }