| /******************************************************************************* |
| * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors |
| * 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: |
| * Marc R. Hoffmann - initial API and implementation |
| * |
| *******************************************************************************/ |
| package org.jacoco.core.runtime; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.File; |
| import java.util.Properties; |
| |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| /** |
| * Unit tests for {@link AgentOptions}. |
| */ |
| public class AgentOptionsTest { |
| |
| private static File defaultAgentJarFile; |
| |
| @BeforeClass |
| public static void beforeClass() { |
| defaultAgentJarFile = new File("jacocoagent.jar"); |
| } |
| |
| @Test |
| public void testDefaults() { |
| AgentOptions options = new AgentOptions(); |
| assertEquals(AgentOptions.DEFAULT_DESTFILE, options.getDestfile()); |
| assertTrue(options.getAppend()); |
| assertEquals("*", options.getIncludes()); |
| assertEquals("", options.getExcludes()); |
| assertEquals("sun.reflect.DelegatingClassLoader", |
| options.getExclClassloader()); |
| assertFalse(options.getInclBootstrapClasses()); |
| assertFalse(options.getInclNoLocationClasses()); |
| assertNull(options.getSessionId()); |
| assertTrue(options.getDumpOnExit()); |
| assertEquals(AgentOptions.OutputMode.file, options.getOutput()); |
| assertEquals(AgentOptions.DEFAULT_ADDRESS, options.getAddress()); |
| assertEquals(AgentOptions.DEFAULT_PORT, options.getPort()); |
| assertNull(options.getClassDumpDir()); |
| assertFalse(options.getJmx()); |
| |
| assertEquals("", options.toString()); |
| } |
| |
| @Test |
| public void testEmptyOptions() { |
| AgentOptions options = new AgentOptions(""); |
| assertEquals("", options.toString()); |
| } |
| |
| @Test |
| public void testNullOptions() { |
| AgentOptions options = new AgentOptions((String) null); |
| assertEquals("", options.toString()); |
| } |
| |
| @Test |
| public void testPropertiesOptions() { |
| Properties properties = new Properties(); |
| properties.put("destfile", "/target/test/test.exec"); |
| properties.put("append", "false"); |
| properties.put("includes", "org.*:com.*"); |
| properties.put("excludes", "*Test"); |
| properties.put("exclclassloader", "org.jacoco.test.TestLoader"); |
| properties.put("inclbootstrapclasses", "true"); |
| properties.put("inclnolocationclasses", "true"); |
| properties.put("sessionid", "testsession"); |
| properties.put("dumponexit", "false"); |
| properties.put("output", "tcpserver"); |
| properties.put("address", "remotehost"); |
| properties.put("port", "1234"); |
| properties.put("classdumpdir", "target/dump"); |
| properties.put("jmx", "true"); |
| |
| AgentOptions options = new AgentOptions(properties); |
| |
| assertEquals("/target/test/test.exec", options.getDestfile()); |
| assertFalse(options.getAppend()); |
| assertEquals("org.*:com.*", options.getIncludes()); |
| assertEquals("*Test", options.getExcludes()); |
| assertEquals("org.jacoco.test.TestLoader", options.getExclClassloader()); |
| assertTrue(options.getInclBootstrapClasses()); |
| assertTrue(options.getInclNoLocationClasses()); |
| assertEquals("testsession", options.getSessionId()); |
| assertFalse(options.getDumpOnExit()); |
| assertEquals(AgentOptions.OutputMode.tcpserver, options.getOutput()); |
| assertEquals("remotehost", options.getAddress()); |
| assertEquals(1234, options.getPort()); |
| assertEquals("target/dump", options.getClassDumpDir()); |
| assertTrue(options.getJmx()); |
| } |
| |
| @Test |
| public void testEmptyPropertiesOptions() { |
| AgentOptions options = new AgentOptions(new Properties()); |
| assertEquals("", options.toString()); |
| } |
| |
| @Test |
| public void testGetDestile() { |
| AgentOptions options = new AgentOptions("destfile=/var/test.exec"); |
| assertEquals("/var/test.exec", options.getDestfile()); |
| } |
| |
| @Test |
| public void testSetDestile() { |
| AgentOptions options = new AgentOptions(); |
| options.setDestfile("/var/test.exec"); |
| assertEquals("/var/test.exec", options.getDestfile()); |
| assertEquals("destfile=/var/test.exec", options.toString()); |
| } |
| |
| @Test |
| public void testGetAppendTrue() { |
| AgentOptions options = new AgentOptions("append=true"); |
| assertTrue(options.getAppend()); |
| } |
| |
| @Test |
| public void testGetAppendFalse() { |
| AgentOptions options = new AgentOptions("append=false"); |
| assertFalse(options.getAppend()); |
| } |
| |
| @Test |
| public void testSetAppendTrue() { |
| AgentOptions options = new AgentOptions(); |
| options.setAppend(true); |
| assertTrue(options.getAppend()); |
| assertEquals("append=true", options.toString()); |
| } |
| |
| @Test |
| public void testSetAppendFalse() { |
| AgentOptions options = new AgentOptions(); |
| options.setAppend(false); |
| assertFalse(options.getAppend()); |
| assertEquals("append=false", options.toString()); |
| } |
| |
| @Test |
| public void testGetExclClassloader() { |
| AgentOptions options = new AgentOptions( |
| "exclclassloader=org.jacoco.test.TestLoader"); |
| assertEquals("org.jacoco.test.TestLoader", options.getExclClassloader()); |
| } |
| |
| @Test |
| public void testSetExclClassloader() { |
| AgentOptions options = new AgentOptions(); |
| options.setExclClassloader("org.jacoco.test.TestLoader"); |
| assertEquals("org.jacoco.test.TestLoader", options.getExclClassloader()); |
| assertEquals("exclclassloader=org.jacoco.test.TestLoader", |
| options.toString()); |
| } |
| |
| @Test |
| public void testGetIncludes() { |
| AgentOptions options = new AgentOptions("includes=org.*:com.*"); |
| assertEquals("org.*:com.*", options.getIncludes()); |
| } |
| |
| @Test |
| public void testSetIncludes() { |
| AgentOptions options = new AgentOptions(); |
| options.setIncludes("org.jacoco.*"); |
| assertEquals("org.jacoco.*", options.getIncludes()); |
| assertEquals("includes=org.jacoco.*", options.toString()); |
| } |
| |
| @Test |
| public void testGetExcludes() { |
| AgentOptions options = new AgentOptions("excludes=*Test"); |
| assertEquals("*Test", options.getExcludes()); |
| } |
| |
| @Test |
| public void testSetExcludes() { |
| AgentOptions options = new AgentOptions(); |
| options.setExcludes("org.jacoco.test.*"); |
| assertEquals("org.jacoco.test.*", options.getExcludes()); |
| assertEquals("excludes=org.jacoco.test.*", options.toString()); |
| } |
| |
| @Test |
| public void testGetInclBootstrapClassesTrue() { |
| AgentOptions options = new AgentOptions("inclbootstrapclasses=true"); |
| assertTrue(options.getInclBootstrapClasses()); |
| } |
| |
| @Test |
| public void testGetInclBootstrapClassesFalse() { |
| AgentOptions options = new AgentOptions("inclbootstrapclasses=false"); |
| assertFalse(options.getInclBootstrapClasses()); |
| } |
| |
| @Test |
| public void testSetInclBootstrapClassesTrue() { |
| AgentOptions options = new AgentOptions(); |
| options.setInclBootstrapClasses(true); |
| assertTrue(options.getInclBootstrapClasses()); |
| assertEquals("inclbootstrapclasses=true", options.toString()); |
| } |
| |
| @Test |
| public void testSetInclBootstrapClassesFalse() { |
| AgentOptions options = new AgentOptions(); |
| options.setInclBootstrapClasses(false); |
| assertFalse(options.getInclBootstrapClasses()); |
| assertEquals("inclbootstrapclasses=false", options.toString()); |
| } |
| |
| @Test |
| public void testGetInclNoLocationClassesTrue() { |
| AgentOptions options = new AgentOptions("inclnolocationclasses=true"); |
| assertTrue(options.getInclNoLocationClasses()); |
| } |
| |
| @Test |
| public void testGetInclNoLocationClassesFalse() { |
| AgentOptions options = new AgentOptions("inclnolocationclasses=false"); |
| assertFalse(options.getInclNoLocationClasses()); |
| } |
| |
| @Test |
| public void testSetInclNoLocationClassesTrue() { |
| AgentOptions options = new AgentOptions(); |
| options.setInclNoLocationClasses(true); |
| assertTrue(options.getInclNoLocationClasses()); |
| assertEquals("inclnolocationclasses=true", options.toString()); |
| } |
| |
| @Test |
| public void testSetInclNoLocationClassesFalse() { |
| AgentOptions options = new AgentOptions(); |
| options.setInclNoLocationClasses(false); |
| assertFalse(options.getInclNoLocationClasses()); |
| assertEquals("inclnolocationclasses=false", options.toString()); |
| } |
| |
| @Test |
| public void testGetSessionId() { |
| AgentOptions options = new AgentOptions("sessionid=testsession"); |
| assertEquals("testsession", options.getSessionId()); |
| } |
| |
| @Test |
| public void testSetSessionId() { |
| AgentOptions options = new AgentOptions(); |
| options.setSessionId("testsession"); |
| assertEquals("testsession", options.getSessionId()); |
| assertEquals("sessionid=testsession", options.toString()); |
| } |
| |
| @Test |
| public void testGetDumpOnExit() { |
| AgentOptions options = new AgentOptions("dumponexit=false"); |
| assertFalse(options.getDumpOnExit()); |
| } |
| |
| @Test |
| public void testSetDumpOnExit() { |
| AgentOptions options = new AgentOptions(); |
| options.setDumpOnExit(false); |
| assertFalse(options.getDumpOnExit()); |
| } |
| |
| @Test |
| public void testGetOutput() { |
| AgentOptions options = new AgentOptions("output=tcpserver"); |
| assertEquals(AgentOptions.OutputMode.tcpserver, options.getOutput()); |
| } |
| |
| @Test |
| public void testSetOutput1() { |
| AgentOptions options = new AgentOptions(); |
| options.setOutput("tcpclient"); |
| assertEquals(AgentOptions.OutputMode.tcpclient, options.getOutput()); |
| } |
| |
| @Test |
| public void testSetOutput2() { |
| AgentOptions options = new AgentOptions(); |
| options.setOutput(AgentOptions.OutputMode.tcpclient); |
| assertEquals(AgentOptions.OutputMode.tcpclient, options.getOutput()); |
| } |
| |
| @Test(expected = IllegalArgumentException.class) |
| public void testInvalidOutput1() { |
| new AgentOptions("output=foo"); |
| } |
| |
| @Test(expected = IllegalArgumentException.class) |
| public void testInvalidOutput2() { |
| AgentOptions options = new AgentOptions(); |
| options.setOutput("foo"); |
| } |
| |
| @Test |
| public void testGetPort() { |
| AgentOptions options = new AgentOptions("port=1234"); |
| assertEquals(1234, options.getPort()); |
| } |
| |
| @Test |
| public void testSetPort() { |
| AgentOptions options = new AgentOptions(); |
| options.setPort(1234); |
| assertEquals(1234, options.getPort()); |
| } |
| |
| @Test(expected = IllegalArgumentException.class) |
| public void testParseInvalidPort() { |
| new AgentOptions("port=xxx"); |
| } |
| |
| @Test(expected = IllegalArgumentException.class) |
| public void testSetNegativePort() { |
| AgentOptions options = new AgentOptions(); |
| options.setPort(-1234); |
| } |
| |
| @Test |
| public void testGetAddress() { |
| AgentOptions options = new AgentOptions("address=remotehost"); |
| assertEquals("remotehost", options.getAddress()); |
| } |
| |
| @Test |
| public void testSetAddress() { |
| AgentOptions options = new AgentOptions(); |
| options.setAddress("remotehost"); |
| assertEquals("remotehost", options.getAddress()); |
| } |
| |
| @Test |
| public void testToString() { |
| AgentOptions options = new AgentOptions(); |
| options.setDestfile("test.exec"); |
| options.setAppend(false); |
| assertEquals("destfile=test.exec,append=false", options.toString()); |
| } |
| |
| @Test(expected = IllegalArgumentException.class) |
| public void testInvalidOptionFormat() { |
| new AgentOptions("destfile"); |
| } |
| |
| @Test(expected = IllegalArgumentException.class) |
| public void testInvalidOptionKey() { |
| new AgentOptions("destfile=test.exec,Some-thing_1=true"); |
| } |
| |
| @Test(expected = IllegalArgumentException.class) |
| public void testInvalidPortOptionValue() { |
| new AgentOptions("port=-1234"); |
| } |
| |
| @Test |
| public void testGetClassDumpDir() { |
| AgentOptions options = new AgentOptions("classdumpdir=target/dump"); |
| assertEquals("target/dump", options.getClassDumpDir()); |
| } |
| |
| @Test |
| public void testSetClassDumpDir() { |
| AgentOptions options = new AgentOptions(); |
| options.setClassDumpDir("target/dump"); |
| assertEquals("target/dump", options.getClassDumpDir()); |
| assertEquals("classdumpdir=target/dump", options.toString()); |
| } |
| |
| @Test |
| public void testGetJmx() { |
| AgentOptions options = new AgentOptions("jmx=true"); |
| assertTrue(options.getJmx()); |
| } |
| |
| @Test |
| public void testSetJmx() { |
| AgentOptions options = new AgentOptions(); |
| options.setJmx(true); |
| assertTrue(options.getJmx()); |
| } |
| |
| @Test |
| public void testGetVMArgumentWithNoOptions() { |
| AgentOptions options = new AgentOptions(); |
| String vmArgument = options.getVMArgument(defaultAgentJarFile); |
| |
| assertEquals( |
| String.format("-javaagent:%s=", defaultAgentJarFile.toString()), |
| vmArgument); |
| } |
| |
| @Test |
| public void testGetVMArgumentWithOneOption() { |
| AgentOptions options = new AgentOptions(); |
| options.setAppend(true); |
| |
| String vmArgument = options.getVMArgument(defaultAgentJarFile); |
| |
| assertEquals( |
| String.format("-javaagent:%s=append=true", |
| defaultAgentJarFile.toString()), vmArgument); |
| } |
| |
| @Test |
| public void testGetVMArgumentWithOptions() { |
| AgentOptions options = new AgentOptions(); |
| options.setAppend(true); |
| options.setDestfile("some test.exec"); |
| String vmArgument = options.getVMArgument(defaultAgentJarFile); |
| |
| assertEquals(String.format( |
| "-javaagent:%s=destfile=some test.exec,append=true", |
| defaultAgentJarFile.toString()), vmArgument); |
| } |
| |
| @Test |
| public void testGetQuotedVMArgument() { |
| AgentOptions options = new AgentOptions(); |
| options.setSessionId("my session"); |
| |
| String vmArgument = options.getQuotedVMArgument(defaultAgentJarFile); |
| |
| assertEquals(String.format("\"-javaagent:%s=sessionid=my session\"", |
| defaultAgentJarFile.toString()), vmArgument); |
| } |
| |
| @Test |
| public void testPrependVMArguments() { |
| AgentOptions options = new AgentOptions(); |
| |
| String vmArgument = options.prependVMArguments("a b c", |
| defaultAgentJarFile); |
| |
| assertEquals( |
| String.format("-javaagent:%s= a b c", |
| defaultAgentJarFile.toString()), vmArgument); |
| } |
| |
| @Test |
| public void testPrependVMArgumentsReplace() { |
| AgentOptions options = new AgentOptions(); |
| |
| String vmArgument = options.prependVMArguments(String.format( |
| "a b -javaagent:%s=append=false c", defaultAgentJarFile), |
| defaultAgentJarFile); |
| |
| assertEquals( |
| String.format("-javaagent:%s= a b c", |
| defaultAgentJarFile.toString()), vmArgument); |
| } |
| |
| @Test |
| public void testOptionValueWithSpecialCharacters() { |
| AgentOptions options = new AgentOptions( |
| "destfile=build/jacoco/foo, bar-1_0.exec"); |
| assertEquals("build/jacoco/foo, bar-1_0.exec", options.getDestfile()); |
| } |
| |
| } |