diff options
author | Evgeny Mandrikov <mandrikov@gmail.com> | 2012-08-30 22:13:04 +0600 |
---|---|---|
committer | Evgeny Mandrikov <mandrikov@gmail.com> | 2012-08-30 22:13:04 +0600 |
commit | e69ba4dbb015949c5d84ba7bbb0b53efac28bb23 (patch) | |
tree | 44cbe6d78216fcb3c37c0aca1dc7ed3fc09906fa /org.jacoco.agent.rt.test | |
parent | a888d873ac20357a4a11029bc84c5c4b48e394a3 (diff) | |
download | jacoco-e69ba4dbb015949c5d84ba7bbb0b53efac28bb23.tar.gz |
Fix EOLs
Diffstat (limited to 'org.jacoco.agent.rt.test')
9 files changed, 1215 insertions, 1215 deletions
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/CoverageTransformerTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/CoverageTransformerTest.java index bfa1e7b6..78ece831 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/CoverageTransformerTest.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/CoverageTransformerTest.java @@ -1,172 +1,172 @@ -/*******************************************************************************
- * Copyright (c) 2009, 2012 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.agent.rt;
-
-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 static org.junit.Assert.fail;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.instrument.IllegalClassFormatException;
-
-import org.jacoco.core.JaCoCo;
-import org.jacoco.core.runtime.AgentOptions;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Unit tests for {@link CoverageTransformer}.
- */
-public class CoverageTransformerTest {
-
- private ExceptionRecorder recorder;
-
- private AgentOptions options;
-
- private ClassLoader classLoader;
-
- private StubRuntime runtime;
-
- @Before
- public void setup() {
- recorder = new ExceptionRecorder();
- options = new AgentOptions();
- classLoader = getClass().getClassLoader();
- runtime = new StubRuntime();
- }
-
- @After
- public void teardown() {
- recorder.assertEmpty();
- }
-
- @Test
- public void testFilterAgentClass() {
- CoverageTransformer t = createTransformer();
- assertFalse(t.filter(classLoader,
- "org/jacoco/agent/rt/somepkg/SomeClass"));
- }
-
- @Test
- public void testFilterSystemClass() {
- CoverageTransformer t = createTransformer();
- assertFalse(t.filter(null, "org/example/Foo"));
- }
-
- @Test
- public void testFilterClassLoaderPositive() {
- options.setExclClassloader("org.jacoco.agent.SomeWhere$*");
- CoverageTransformer t = createTransformer();
- assertTrue(t.filter(classLoader, "org/example/Foo"));
- }
-
- @Test
- public void testFilterClassLoaderNegative() {
- options.setExclClassloader("org.jacoco.agent.rt.CoverageTransformerTest$*");
- CoverageTransformer t = createTransformer();
- ClassLoader myClassLoader = new ClassLoader(null) {
- };
- assertFalse(t.filter(myClassLoader, "org/example/Foo"));
- }
-
- @Test
- public void testFilterIncludedClassPositive() {
- options.setIncludes("org.jacoco.core.*:org.jacoco.agent.rt.*");
- CoverageTransformer t = createTransformer();
- assertTrue(t.filter(classLoader, "org/jacoco/core/Foo"));
- }
-
- @Test
- public void testFilterIncludedClassNegative() {
- options.setIncludes("org.jacoco.core.*:org.jacoco.agent.rt.*");
- CoverageTransformer t = createTransformer();
- assertFalse(t.filter(classLoader, "org/jacoco/report/Foo"));
- }
-
- @Test
- public void testFilterExcludedClassPositive() {
- options.setExcludes("*Test");
- CoverageTransformer t = createTransformer();
- assertFalse(t.filter(classLoader, "org/jacoco/core/FooTest"));
- }
-
- @Test
- public void testFilterExcludedClassPositiveInner() {
- options.setExcludes("org.jacoco.example.Foo$Inner");
- CoverageTransformer t = createTransformer();
- assertFalse(t.filter(classLoader, "org/jacoco/example/Foo$Inner"));
- }
-
- @Test
- public void testFilterExcludedClassNegative() {
- options.setExcludes("*Test");
- CoverageTransformer t = createTransformer();
- assertTrue(t.filter(classLoader, "org/jacoco/core/Foo"));
- }
-
- @Test
- public void testTransformFiltered() throws IllegalClassFormatException {
- CoverageTransformer t = createTransformer();
- assertNull(t.transform(null, "org.jacoco.Sample", null, null,
- new byte[0]));
- }
-
- @Test
- public void testTransformFailure() {
- CoverageTransformer t = createTransformer();
- try {
- t.transform(classLoader, "org.jacoco.Sample", null, null, null);
- fail("IllegalClassFormatException expected.");
- } catch (IllegalClassFormatException e) {
- assertEquals("Error while instrumenting class org.jacoco.Sample.",
- e.getMessage());
- }
- recorder.assertException(IllegalClassFormatException.class,
- "Error while instrumenting class org.jacoco.Sample.",
- NullPointerException.class);
- recorder.clear();
- }
-
- @Test
- public void testRedefinedClass() throws Exception {
- CoverageTransformer t = createTransformer();
- // Just pick any non-system class outside our namespace
- final Class<?> target = JaCoCo.class;
- t.transform(classLoader, target.getName(), target, null,
- getClassData(target));
- runtime.assertDisconnected(target);
- }
-
- private CoverageTransformer createTransformer() {
- return new CoverageTransformer(runtime, options, recorder);
- }
-
- private static byte[] getClassData(Class<?> clazz) throws IOException {
- final String resource = "/" + clazz.getName().replace('.', '/')
- + ".class";
- final InputStream in = clazz.getResourceAsStream(resource);
- final ByteArrayOutputStream out = new ByteArrayOutputStream();
- byte[] buffer = new byte[0x100];
- int len;
- while ((len = in.read(buffer)) != -1) {
- out.write(buffer, 0, len);
- }
- in.close();
- return out.toByteArray();
- }
-
-}
+/******************************************************************************* + * Copyright (c) 2009, 2012 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.agent.rt; + +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 static org.junit.Assert.fail; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.instrument.IllegalClassFormatException; + +import org.jacoco.core.JaCoCo; +import org.jacoco.core.runtime.AgentOptions; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Unit tests for {@link CoverageTransformer}. + */ +public class CoverageTransformerTest { + + private ExceptionRecorder recorder; + + private AgentOptions options; + + private ClassLoader classLoader; + + private StubRuntime runtime; + + @Before + public void setup() { + recorder = new ExceptionRecorder(); + options = new AgentOptions(); + classLoader = getClass().getClassLoader(); + runtime = new StubRuntime(); + } + + @After + public void teardown() { + recorder.assertEmpty(); + } + + @Test + public void testFilterAgentClass() { + CoverageTransformer t = createTransformer(); + assertFalse(t.filter(classLoader, + "org/jacoco/agent/rt/somepkg/SomeClass")); + } + + @Test + public void testFilterSystemClass() { + CoverageTransformer t = createTransformer(); + assertFalse(t.filter(null, "org/example/Foo")); + } + + @Test + public void testFilterClassLoaderPositive() { + options.setExclClassloader("org.jacoco.agent.SomeWhere$*"); + CoverageTransformer t = createTransformer(); + assertTrue(t.filter(classLoader, "org/example/Foo")); + } + + @Test + public void testFilterClassLoaderNegative() { + options.setExclClassloader("org.jacoco.agent.rt.CoverageTransformerTest$*"); + CoverageTransformer t = createTransformer(); + ClassLoader myClassLoader = new ClassLoader(null) { + }; + assertFalse(t.filter(myClassLoader, "org/example/Foo")); + } + + @Test + public void testFilterIncludedClassPositive() { + options.setIncludes("org.jacoco.core.*:org.jacoco.agent.rt.*"); + CoverageTransformer t = createTransformer(); + assertTrue(t.filter(classLoader, "org/jacoco/core/Foo")); + } + + @Test + public void testFilterIncludedClassNegative() { + options.setIncludes("org.jacoco.core.*:org.jacoco.agent.rt.*"); + CoverageTransformer t = createTransformer(); + assertFalse(t.filter(classLoader, "org/jacoco/report/Foo")); + } + + @Test + public void testFilterExcludedClassPositive() { + options.setExcludes("*Test"); + CoverageTransformer t = createTransformer(); + assertFalse(t.filter(classLoader, "org/jacoco/core/FooTest")); + } + + @Test + public void testFilterExcludedClassPositiveInner() { + options.setExcludes("org.jacoco.example.Foo$Inner"); + CoverageTransformer t = createTransformer(); + assertFalse(t.filter(classLoader, "org/jacoco/example/Foo$Inner")); + } + + @Test + public void testFilterExcludedClassNegative() { + options.setExcludes("*Test"); + CoverageTransformer t = createTransformer(); + assertTrue(t.filter(classLoader, "org/jacoco/core/Foo")); + } + + @Test + public void testTransformFiltered() throws IllegalClassFormatException { + CoverageTransformer t = createTransformer(); + assertNull(t.transform(null, "org.jacoco.Sample", null, null, + new byte[0])); + } + + @Test + public void testTransformFailure() { + CoverageTransformer t = createTransformer(); + try { + t.transform(classLoader, "org.jacoco.Sample", null, null, null); + fail("IllegalClassFormatException expected."); + } catch (IllegalClassFormatException e) { + assertEquals("Error while instrumenting class org.jacoco.Sample.", + e.getMessage()); + } + recorder.assertException(IllegalClassFormatException.class, + "Error while instrumenting class org.jacoco.Sample.", + NullPointerException.class); + recorder.clear(); + } + + @Test + public void testRedefinedClass() throws Exception { + CoverageTransformer t = createTransformer(); + // Just pick any non-system class outside our namespace + final Class<?> target = JaCoCo.class; + t.transform(classLoader, target.getName(), target, null, + getClassData(target)); + runtime.assertDisconnected(target); + } + + private CoverageTransformer createTransformer() { + return new CoverageTransformer(runtime, options, recorder); + } + + private static byte[] getClassData(Class<?> clazz) throws IOException { + final String resource = "/" + clazz.getName().replace('.', '/') + + ".class"; + final InputStream in = clazz.getResourceAsStream(resource); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buffer = new byte[0x100]; + int len; + while ((len = in.read(buffer)) != -1) { + out.write(buffer, 0, len); + } + in.close(); + return out.toByteArray(); + } + +} diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/StubRuntime.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/StubRuntime.java index 2303480d..dac76c93 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/StubRuntime.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/StubRuntime.java @@ -1,66 +1,66 @@ -/*******************************************************************************
- * Copyright (c) 2009, 2012 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.agent.rt;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import java.util.Arrays;
-
-import org.jacoco.core.runtime.AbstractRuntime;
-import org.jacoco.core.runtime.IRuntime;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * Stub {@link IRuntime} implementation for unit testing only.
- */
-public class StubRuntime extends AbstractRuntime {
-
- private Class<?> disconnected;
-
- public StubRuntime() {
- setSessionId("stubid");
- store.get(Long.valueOf(0x12345678), "Foo", 2);
- }
-
- public int generateDataAccessor(long classid, String classname,
- int probecount, MethodVisitor mv) {
- return 0;
- }
-
- public void startup() {
- }
-
- public void shutdown() {
- }
-
- @Override
- public void disconnect(Class<?> type) throws Exception {
- this.disconnected = type;
- }
-
- public void fillProbes() {
- final boolean[] data = store.get(0x12345678).getData();
- Arrays.fill(data, true);
- }
-
- public void assertNoProbes() {
- final boolean[] data = store.get(0x12345678).getData();
- assertFalse(data[0]);
- assertFalse(data[1]);
- }
-
- public void assertDisconnected(Class<?> expected) {
- assertEquals(expected, disconnected);
- }
-
+/******************************************************************************* + * Copyright (c) 2009, 2012 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.agent.rt; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.util.Arrays; + +import org.jacoco.core.runtime.AbstractRuntime; +import org.jacoco.core.runtime.IRuntime; +import org.objectweb.asm.MethodVisitor; + +/** + * Stub {@link IRuntime} implementation for unit testing only. + */ +public class StubRuntime extends AbstractRuntime { + + private Class<?> disconnected; + + public StubRuntime() { + setSessionId("stubid"); + store.get(Long.valueOf(0x12345678), "Foo", 2); + } + + public int generateDataAccessor(long classid, String classname, + int probecount, MethodVisitor mv) { + return 0; + } + + public void startup() { + } + + public void shutdown() { + } + + @Override + public void disconnect(Class<?> type) throws Exception { + this.disconnected = type; + } + + public void fillProbes() { + final boolean[] data = store.get(0x12345678).getData(); + Arrays.fill(data, true); + } + + public void assertNoProbes() { + final boolean[] data = store.get(0x12345678).getData(); + assertFalse(data[0]); + assertFalse(data[1]); + } + + public void assertDisconnected(Class<?> expected) { + assertEquals(expected, disconnected); + } + }
\ No newline at end of file diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/ExecutorTestBase.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/ExecutorTestBase.java index e3c3d022..050eca0b 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/ExecutorTestBase.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/ExecutorTestBase.java @@ -1,59 +1,59 @@ -/*******************************************************************************
- * Copyright (c) 2009, 2012 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.agent.rt.controller;
-
-import static org.junit.Assert.fail;
-
-import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-
-import org.junit.After;
-import org.junit.Before;
-
-/**
- * Unit tests base for tests that need an {@link Executor} for multithreaded
- * test scenarios.
- */
-public abstract class ExecutorTestBase {
-
- protected ExecutorService executor;
-
- @Before
- public void setup() throws Exception {
- executor = Executors.newSingleThreadExecutor();
- }
-
- @After
- public void teardown() throws Exception {
- executor.shutdown();
- }
-
- /**
- * Asserts that the given future blocks.
- *
- * @param future
- * future to test
- * @throws Exception
- */
- protected void assertBlocks(final Future<?> future) throws Exception {
- try {
- future.get(10, TimeUnit.MILLISECONDS);
- fail("Operation should block");
- } catch (TimeoutException e) {
- }
- }
-
-}
+/******************************************************************************* + * Copyright (c) 2009, 2012 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.agent.rt.controller; + +import static org.junit.Assert.fail; + +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +import org.junit.After; +import org.junit.Before; + +/** + * Unit tests base for tests that need an {@link Executor} for multithreaded + * test scenarios. + */ +public abstract class ExecutorTestBase { + + protected ExecutorService executor; + + @Before + public void setup() throws Exception { + executor = Executors.newSingleThreadExecutor(); + } + + @After + public void teardown() throws Exception { + executor.shutdown(); + } + + /** + * Asserts that the given future blocks. + * + * @param future + * future to test + * @throws Exception + */ + protected void assertBlocks(final Future<?> future) throws Exception { + try { + future.get(10, TimeUnit.MILLISECONDS); + fail("Operation should block"); + } catch (TimeoutException e) { + } + } + +} diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/LocalControllerTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/LocalControllerTest.java index b747dee8..c82f6921 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/LocalControllerTest.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/LocalControllerTest.java @@ -1,61 +1,61 @@ -/*******************************************************************************
- * Copyright (c) 2009, 2012 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:
- * Brock Janiczak - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.agent.rt.controller;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-
-import org.jacoco.agent.rt.StubRuntime;
-import org.jacoco.core.runtime.AgentOptions;
-import org.jacoco.core.runtime.IRuntime;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-
-/**
- * Unit tests for {@link LocalController}.
- */
-public class LocalControllerTest {
-
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- @Test
- public void testWriteData() throws Exception {
- File destFile = folder.newFile("jacoco.exec");
- AgentOptions options = new AgentOptions();
- options.setDestfile(destFile.getAbsolutePath());
-
- IRuntime runtime = new StubRuntime();
-
- LocalController controller = new LocalController();
- controller.startup(options, runtime);
- controller.writeExecutionData();
- controller.shutdown();
-
- assertTrue("Execution data file should be created", destFile.exists());
- }
-
- @Test(expected = IOException.class)
- public void testInvalidDestFile() throws Exception {
- AgentOptions options = new AgentOptions();
- options.setDestfile(folder.newFolder("folder").getAbsolutePath());
- IRuntime runtime = new StubRuntime();
- LocalController controller = new LocalController();
-
- // Startup should fail as the file can not be created:
- controller.startup(options, runtime);
- }
-
-}
+/******************************************************************************* + * Copyright (c) 2009, 2012 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: + * Brock Janiczak - initial API and implementation + * + *******************************************************************************/ +package org.jacoco.agent.rt.controller; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; + +import org.jacoco.agent.rt.StubRuntime; +import org.jacoco.core.runtime.AgentOptions; +import org.jacoco.core.runtime.IRuntime; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +/** + * Unit tests for {@link LocalController}. + */ +public class LocalControllerTest { + + @Rule + public TemporaryFolder folder = new TemporaryFolder(); + + @Test + public void testWriteData() throws Exception { + File destFile = folder.newFile("jacoco.exec"); + AgentOptions options = new AgentOptions(); + options.setDestfile(destFile.getAbsolutePath()); + + IRuntime runtime = new StubRuntime(); + + LocalController controller = new LocalController(); + controller.startup(options, runtime); + controller.writeExecutionData(); + controller.shutdown(); + + assertTrue("Execution data file should be created", destFile.exists()); + } + + @Test(expected = IOException.class) + public void testInvalidDestFile() throws Exception { + AgentOptions options = new AgentOptions(); + options.setDestfile(folder.newFolder("folder").getAbsolutePath()); + IRuntime runtime = new StubRuntime(); + LocalController controller = new LocalController(); + + // Startup should fail as the file can not be created: + controller.startup(options, runtime); + } + +} diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocket.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocket.java index 696ffe8b..05407cb3 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocket.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocket.java @@ -1,188 +1,188 @@ -/*******************************************************************************
- * Copyright (c) 2009, 2012 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.agent.rt.controller;
-
-import java.io.IOException;
-import java.io.InterruptedIOException;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.nio.channels.ServerSocketChannel;
-
-/**
- * Emulation of a {@link ServerSocket} for testing purposes without any physical
- * tcp/ip connections.
- */
-public class MockServerSocket extends ServerSocket {
-
- private final Object lock = new Object();
-
- private boolean closed;
-
- private Socket connection;
-
- private boolean inAccept;
-
- public MockServerSocket() throws IOException {
- super();
- closed = false;
- inAccept = false;
- }
-
- /**
- * Establishes a new mock connection. This method blocks until the other end
- * of the connection has been accepted.
- *
- * @return remote end of the mock connection
- */
- public Socket connect() throws Exception {
- synchronized (lock) {
- final MockSocketConnection c = new MockSocketConnection();
- connection = c.getSocketA();
- lock.notifyAll();
- while (connection != null) {
- lock.wait();
- }
- return c.getSocketB();
- }
- }
-
- /**
- * Blocks until another thread calls the {@link #accept()} method.
- */
- public void waitForAccept() throws Exception {
- synchronized (lock) {
- while (!inAccept) {
- lock.wait();
- }
- }
-
- }
-
- @Override
- public void close() throws IOException {
- synchronized (lock) {
- closed = true;
- lock.notifyAll();
- }
- }
-
- @Override
- public boolean isClosed() {
- return closed;
- }
-
- @Override
- public Socket accept() throws IOException {
- synchronized (lock) {
- inAccept = true;
- lock.notifyAll();
- try {
- while (connection == null) {
- if (closed) {
- throw new SocketException("socket closed");
- }
- lock.wait();
- }
- return connection;
- } catch (InterruptedException e) {
- throw new InterruptedIOException();
- } finally {
- connection = null;
- inAccept = false;
- lock.notifyAll();
- }
- }
- }
-
- // unsupported server socket methods:
-
- @Override
- public void bind(SocketAddress endpoint, int backlog) throws IOException {
- throw new AssertionError();
- }
-
- @Override
- public void bind(SocketAddress endpoint) throws IOException {
- throw new AssertionError();
- }
-
- @Override
- public ServerSocketChannel getChannel() {
- throw new AssertionError();
- }
-
- @Override
- public InetAddress getInetAddress() {
- throw new AssertionError();
- }
-
- @Override
- public int getLocalPort() {
- throw new AssertionError();
- }
-
- @Override
- public SocketAddress getLocalSocketAddress() {
- throw new AssertionError();
- }
-
- @Override
- public synchronized int getReceiveBufferSize() throws SocketException {
- throw new AssertionError();
- }
-
- @Override
- public boolean getReuseAddress() throws SocketException {
- throw new AssertionError();
- }
-
- @Override
- public synchronized int getSoTimeout() throws IOException {
- throw new AssertionError();
- }
-
- @Override
- public boolean isBound() {
- throw new AssertionError();
- }
-
- @Override
- public void setPerformancePreferences(int connectionTime, int latency,
- int bandwidth) {
- throw new AssertionError();
- }
-
- @Override
- public synchronized void setReceiveBufferSize(int size)
- throws SocketException {
- throw new AssertionError();
- }
-
- @Override
- public void setReuseAddress(boolean on) throws SocketException {
- throw new AssertionError();
- }
-
- @Override
- public synchronized void setSoTimeout(int timeout) throws SocketException {
- throw new AssertionError();
- }
-
- @Override
- public String toString() {
- throw new AssertionError();
- }
-
-}
+/******************************************************************************* + * Copyright (c) 2009, 2012 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.agent.rt.controller; + +import java.io.IOException; +import java.io.InterruptedIOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.SocketException; +import java.nio.channels.ServerSocketChannel; + +/** + * Emulation of a {@link ServerSocket} for testing purposes without any physical + * tcp/ip connections. + */ +public class MockServerSocket extends ServerSocket { + + private final Object lock = new Object(); + + private boolean closed; + + private Socket connection; + + private boolean inAccept; + + public MockServerSocket() throws IOException { + super(); + closed = false; + inAccept = false; + } + + /** + * Establishes a new mock connection. This method blocks until the other end + * of the connection has been accepted. + * + * @return remote end of the mock connection + */ + public Socket connect() throws Exception { + synchronized (lock) { + final MockSocketConnection c = new MockSocketConnection(); + connection = c.getSocketA(); + lock.notifyAll(); + while (connection != null) { + lock.wait(); + } + return c.getSocketB(); + } + } + + /** + * Blocks until another thread calls the {@link #accept()} method. + */ + public void waitForAccept() throws Exception { + synchronized (lock) { + while (!inAccept) { + lock.wait(); + } + } + + } + + @Override + public void close() throws IOException { + synchronized (lock) { + closed = true; + lock.notifyAll(); + } + } + + @Override + public boolean isClosed() { + return closed; + } + + @Override + public Socket accept() throws IOException { + synchronized (lock) { + inAccept = true; + lock.notifyAll(); + try { + while (connection == null) { + if (closed) { + throw new SocketException("socket closed"); + } + lock.wait(); + } + return connection; + } catch (InterruptedException e) { + throw new InterruptedIOException(); + } finally { + connection = null; + inAccept = false; + lock.notifyAll(); + } + } + } + + // unsupported server socket methods: + + @Override + public void bind(SocketAddress endpoint, int backlog) throws IOException { + throw new AssertionError(); + } + + @Override + public void bind(SocketAddress endpoint) throws IOException { + throw new AssertionError(); + } + + @Override + public ServerSocketChannel getChannel() { + throw new AssertionError(); + } + + @Override + public InetAddress getInetAddress() { + throw new AssertionError(); + } + + @Override + public int getLocalPort() { + throw new AssertionError(); + } + + @Override + public SocketAddress getLocalSocketAddress() { + throw new AssertionError(); + } + + @Override + public synchronized int getReceiveBufferSize() throws SocketException { + throw new AssertionError(); + } + + @Override + public boolean getReuseAddress() throws SocketException { + throw new AssertionError(); + } + + @Override + public synchronized int getSoTimeout() throws IOException { + throw new AssertionError(); + } + + @Override + public boolean isBound() { + throw new AssertionError(); + } + + @Override + public void setPerformancePreferences(int connectionTime, int latency, + int bandwidth) { + throw new AssertionError(); + } + + @Override + public synchronized void setReceiveBufferSize(int size) + throws SocketException { + throw new AssertionError(); + } + + @Override + public void setReuseAddress(boolean on) throws SocketException { + throw new AssertionError(); + } + + @Override + public synchronized void setSoTimeout(int timeout) throws SocketException { + throw new AssertionError(); + } + + @Override + public String toString() { + throw new AssertionError(); + } + +} diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocketTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocketTest.java index 8b2f9fae..07e8b4e1 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocketTest.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocketTest.java @@ -1,150 +1,150 @@ -/*******************************************************************************
- * Copyright (c) 2009, 2012 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.agent.rt.controller;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketException;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Unit tests for {@link MockServerSocket}.
- */
-public class MockServerSocketTest extends ExecutorTestBase {
-
- private ServerSocket serverSocket;
-
- /**
- * To verify that the tests reflect the behavior of real TCP sockets this
- * flag can be set to <code>true</code>.
- */
- private static final boolean REAL_SOCKETS = Boolean
- .getBoolean("MockServerSocketTest.realSockets");
-
- @Before
- @Override
- public void setup() throws Exception {
- super.setup();
- if (REAL_SOCKETS) {
- System.err.println("Using Real Sockets!");
- final InetAddress addr = InetAddress.getByName("localhost");
- serverSocket = new ServerSocket(16300, 1, addr);
- } else {
- serverSocket = new MockServerSocket();
- }
- }
-
- @After
- @Override
- public void teardown() throws Exception {
- serverSocket.close();
- super.teardown();
- }
-
- private Socket connect() throws Exception {
- if (REAL_SOCKETS) {
- final InetAddress addr = InetAddress.getByName("localhost");
- return new Socket(addr, 16300);
- } else {
- return ((MockServerSocket) serverSocket).connect();
- }
-
- }
-
- @Test
- public void testClose() throws Exception {
- assertFalse(serverSocket.isClosed());
- serverSocket.close();
- assertTrue(serverSocket.isClosed());
- }
-
- @Test(expected = SocketException.class)
- public void testCloseWhileAccept() throws Throwable {
- final Future<Socket> f = executor.submit(new Callable<Socket>() {
- public Socket call() throws Exception {
- return serverSocket.accept();
- }
- });
- assertBlocks(f);
- serverSocket.close();
- try {
- f.get();
- } catch (ExecutionException e) {
- throw e.getCause();
- }
- }
-
- @Test
- public void testAccept() throws Exception {
- final Future<Socket> f = executor.submit(new Callable<Socket>() {
- public Socket call() throws Exception {
- return serverSocket.accept();
- }
- });
- assertBlocks(f);
- connect().getOutputStream().write(123);
- final Socket socket = f.get();
- assertNotNull(socket);
- assertEquals(123, socket.getInputStream().read());
- }
-
- @Test(expected = SocketException.class)
- public void testAcceptOnClosedServerSocket() throws Exception {
- serverSocket.close();
- serverSocket.accept();
- }
-
- @Test
- public void testConnect() throws Exception {
- if (!REAL_SOCKETS) {
- final Future<Socket> f = executor.submit(new Callable<Socket>() {
- public Socket call() throws Exception {
- return ((MockServerSocket) serverSocket).connect();
- }
- });
- assertBlocks(f);
- serverSocket.accept().getOutputStream().write(42);
- final Socket socket = f.get();
- assertNotNull(socket);
- assertEquals(42, socket.getInputStream().read());
- }
- }
-
- @Test
- public void testWaitForAccept() throws Exception {
- if (!REAL_SOCKETS) {
- final Future<Void> f = executor.submit(new Callable<Void>() {
- public Void call() throws Exception {
- ((MockServerSocket) serverSocket).waitForAccept();
- connect();
- return null;
- }
- });
- assertBlocks(f);
- serverSocket.accept();
- f.get();
- }
- }
-
-}
+/******************************************************************************* + * Copyright (c) 2009, 2012 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.agent.rt.controller; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * Unit tests for {@link MockServerSocket}. + */ +public class MockServerSocketTest extends ExecutorTestBase { + + private ServerSocket serverSocket; + + /** + * To verify that the tests reflect the behavior of real TCP sockets this + * flag can be set to <code>true</code>. + */ + private static final boolean REAL_SOCKETS = Boolean + .getBoolean("MockServerSocketTest.realSockets"); + + @Before + @Override + public void setup() throws Exception { + super.setup(); + if (REAL_SOCKETS) { + System.err.println("Using Real Sockets!"); + final InetAddress addr = InetAddress.getByName("localhost"); + serverSocket = new ServerSocket(16300, 1, addr); + } else { + serverSocket = new MockServerSocket(); + } + } + + @After + @Override + public void teardown() throws Exception { + serverSocket.close(); + super.teardown(); + } + + private Socket connect() throws Exception { + if (REAL_SOCKETS) { + final InetAddress addr = InetAddress.getByName("localhost"); + return new Socket(addr, 16300); + } else { + return ((MockServerSocket) serverSocket).connect(); + } + + } + + @Test + public void testClose() throws Exception { + assertFalse(serverSocket.isClosed()); + serverSocket.close(); + assertTrue(serverSocket.isClosed()); + } + + @Test(expected = SocketException.class) + public void testCloseWhileAccept() throws Throwable { + final Future<Socket> f = executor.submit(new Callable<Socket>() { + public Socket call() throws Exception { + return serverSocket.accept(); + } + }); + assertBlocks(f); + serverSocket.close(); + try { + f.get(); + } catch (ExecutionException e) { + throw e.getCause(); + } + } + + @Test + public void testAccept() throws Exception { + final Future<Socket> f = executor.submit(new Callable<Socket>() { + public Socket call() throws Exception { + return serverSocket.accept(); + } + }); + assertBlocks(f); + connect().getOutputStream().write(123); + final Socket socket = f.get(); + assertNotNull(socket); + assertEquals(123, socket.getInputStream().read()); + } + + @Test(expected = SocketException.class) + public void testAcceptOnClosedServerSocket() throws Exception { + serverSocket.close(); + serverSocket.accept(); + } + + @Test + public void testConnect() throws Exception { + if (!REAL_SOCKETS) { + final Future<Socket> f = executor.submit(new Callable<Socket>() { + public Socket call() throws Exception { + return ((MockServerSocket) serverSocket).connect(); + } + }); + assertBlocks(f); + serverSocket.accept().getOutputStream().write(42); + final Socket socket = f.get(); + assertNotNull(socket); + assertEquals(42, socket.getInputStream().read()); + } + } + + @Test + public void testWaitForAccept() throws Exception { + if (!REAL_SOCKETS) { + final Future<Void> f = executor.submit(new Callable<Void>() { + public Void call() throws Exception { + ((MockServerSocket) serverSocket).waitForAccept(); + connect(); + return null; + } + }); + assertBlocks(f); + serverSocket.accept(); + f.get(); + } + } + +} diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpClientControllerTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpClientControllerTest.java index b34d4923..67ed2767 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpClientControllerTest.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpClientControllerTest.java @@ -1,113 +1,113 @@ -/*******************************************************************************
-/*******************************************************************************
- * Copyright (c) 2009, 2012 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:
- * Brock Janiczak - initial API and implementation
- * Marc R. Hoffmann - migration to mock socket
- *
- *******************************************************************************/
-package org.jacoco.agent.rt.controller;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import java.io.IOException;
-import java.net.Socket;
-import java.util.List;
-
-import org.jacoco.agent.rt.ExceptionRecorder;
-import org.jacoco.agent.rt.StubRuntime;
-import org.jacoco.core.data.ExecutionDataStore;
-import org.jacoco.core.data.SessionInfo;
-import org.jacoco.core.data.SessionInfoStore;
-import org.jacoco.core.runtime.AgentOptions;
-import org.jacoco.core.runtime.RemoteControlReader;
-import org.jacoco.core.runtime.RemoteControlWriter;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Unit tests for {@link TcpClientController}.
- */
-public class TcpClientControllerTest {
-
- private ExceptionRecorder logger;
-
- private IAgentController controller;
-
- private StubRuntime runtime;
-
- private Socket remoteSocket;
-
- private RemoteControlWriter remoteWriter;
-
- private RemoteControlReader remoteReader;
-
- @Before
- public void setup() throws Exception {
- logger = new ExceptionRecorder();
- final MockSocketConnection con = new MockSocketConnection();
- remoteSocket = con.getSocketB();
- remoteWriter = new RemoteControlWriter(remoteSocket.getOutputStream());
- controller = new TcpClientController(logger) {
- @Override
- protected Socket createSocket(AgentOptions options)
- throws IOException {
- return con.getSocketA();
- }
- };
- runtime = new StubRuntime();
- controller.startup(new AgentOptions(), runtime);
- remoteReader = new RemoteControlReader(remoteSocket.getInputStream());
- }
-
- @Test
- public void testShutdown() throws Exception {
- controller.shutdown();
- assertFalse(remoteReader.read());
- logger.assertEmpty();
- }
-
- @Test
- public void testRemoteClose() throws Exception {
- remoteSocket.close();
- controller.shutdown();
- logger.assertEmpty();
- }
-
- @Test
- public void testInvalidCommand() throws Exception {
- remoteWriter.visitSessionInfo(new SessionInfo("info", 1, 2));
- while (remoteReader.read()) {
- }
- controller.shutdown();
- logger.assertException(IOException.class, "No session info visitor.");
- }
-
- @Test
- public void testWriteExecutionData() throws Exception {
- controller.writeExecutionData();
-
- final ExecutionDataStore execStore = new ExecutionDataStore();
- remoteReader.setExecutionDataVisitor(execStore);
- final SessionInfoStore infoStore = new SessionInfoStore();
- remoteReader.setSessionInfoVisitor(infoStore);
-
- remoteReader.read();
-
- assertEquals("Foo", execStore.get(0x12345678).getName());
-
- final List<SessionInfo> infos = infoStore.getInfos();
- assertEquals(1, infos.size());
- assertEquals("stubid", infos.get(0).getId());
-
- logger.assertEmpty();
- controller.shutdown();
- }
-
-}
+/******************************************************************************* +/******************************************************************************* + * Copyright (c) 2009, 2012 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: + * Brock Janiczak - initial API and implementation + * Marc R. Hoffmann - migration to mock socket + * + *******************************************************************************/ +package org.jacoco.agent.rt.controller; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.io.IOException; +import java.net.Socket; +import java.util.List; + +import org.jacoco.agent.rt.ExceptionRecorder; +import org.jacoco.agent.rt.StubRuntime; +import org.jacoco.core.data.ExecutionDataStore; +import org.jacoco.core.data.SessionInfo; +import org.jacoco.core.data.SessionInfoStore; +import org.jacoco.core.runtime.AgentOptions; +import org.jacoco.core.runtime.RemoteControlReader; +import org.jacoco.core.runtime.RemoteControlWriter; +import org.junit.Before; +import org.junit.Test; + +/** + * Unit tests for {@link TcpClientController}. + */ +public class TcpClientControllerTest { + + private ExceptionRecorder logger; + + private IAgentController controller; + + private StubRuntime runtime; + + private Socket remoteSocket; + + private RemoteControlWriter remoteWriter; + + private RemoteControlReader remoteReader; + + @Before + public void setup() throws Exception { + logger = new ExceptionRecorder(); + final MockSocketConnection con = new MockSocketConnection(); + remoteSocket = con.getSocketB(); + remoteWriter = new RemoteControlWriter(remoteSocket.getOutputStream()); + controller = new TcpClientController(logger) { + @Override + protected Socket createSocket(AgentOptions options) + throws IOException { + return con.getSocketA(); + } + }; + runtime = new StubRuntime(); + controller.startup(new AgentOptions(), runtime); + remoteReader = new RemoteControlReader(remoteSocket.getInputStream()); + } + + @Test + public void testShutdown() throws Exception { + controller.shutdown(); + assertFalse(remoteReader.read()); + logger.assertEmpty(); + } + + @Test + public void testRemoteClose() throws Exception { + remoteSocket.close(); + controller.shutdown(); + logger.assertEmpty(); + } + + @Test + public void testInvalidCommand() throws Exception { + remoteWriter.visitSessionInfo(new SessionInfo("info", 1, 2)); + while (remoteReader.read()) { + } + controller.shutdown(); + logger.assertException(IOException.class, "No session info visitor."); + } + + @Test + public void testWriteExecutionData() throws Exception { + controller.writeExecutionData(); + + final ExecutionDataStore execStore = new ExecutionDataStore(); + remoteReader.setExecutionDataVisitor(execStore); + final SessionInfoStore infoStore = new SessionInfoStore(); + remoteReader.setSessionInfoVisitor(infoStore); + + remoteReader.read(); + + assertEquals("Foo", execStore.get(0x12345678).getName()); + + final List<SessionInfo> infos = infoStore.getInfos(); + assertEquals(1, infos.size()); + assertEquals("stubid", infos.get(0).getId()); + + logger.assertEmpty(); + controller.shutdown(); + } + +} diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpConnectionTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpConnectionTest.java index 49654668..94fd025d 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpConnectionTest.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpConnectionTest.java @@ -1,265 +1,265 @@ -/*******************************************************************************
- * Copyright (c) 2009, 2012 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.agent.rt.controller;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-
-import org.jacoco.agent.rt.StubRuntime;
-import org.jacoco.core.data.ExecutionDataStore;
-import org.jacoco.core.data.ExecutionDataWriter;
-import org.jacoco.core.data.SessionInfo;
-import org.jacoco.core.data.SessionInfoStore;
-import org.jacoco.core.runtime.RemoteControlReader;
-import org.jacoco.core.runtime.RemoteControlWriter;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Unit tests for {@link TcpConnection}.
- */
-public class TcpConnectionTest extends ExecutorTestBase {
-
- private MockSocketConnection mockConnection;
-
- private StubRuntime runtime;
-
- @Before
- @Override
- public void setup() throws Exception {
- super.setup();
- mockConnection = new MockSocketConnection();
- runtime = new StubRuntime();
- }
-
- @Test(expected = IOException.class)
- public void testInvalidHeader() throws Exception {
- final OutputStream remoteOut = mockConnection.getSocketB()
- .getOutputStream();
- remoteOut.write(0x01);
- remoteOut.write(0xC0);
- remoteOut.write(0xCA);
- final TcpConnection connection = new TcpConnection(
- mockConnection.getSocketA(), runtime);
- connection.init();
- connection.run();
- }
-
- @Test(expected = IOException.class)
- public void testInvalidContent() throws Exception {
- final OutputStream remoteOut = mockConnection.getSocketB()
- .getOutputStream();
- new ExecutionDataWriter(remoteOut);
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), runtime);
- con.init();
- remoteOut.write(123);
- con.run();
- }
-
- /**
- * Remote endpoint is closed after a valid header has been send.
- */
- @Test
- public void testRemoteClose() throws Exception {
- final OutputStream remoteOut = mockConnection.getSocketB()
- .getOutputStream();
- new ExecutionDataWriter(remoteOut);
-
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), runtime);
- con.init();
-
- final Future<Void> f = executor.submit(new Callable<Void>() {
- public Void call() throws Exception {
- con.run();
- return null;
- }
- });
-
- assertBlocks(f);
-
- mockConnection.getSocketB().close();
- f.get();
- }
-
- /**
- * Remote endpoint is closed before even a valid header was send.
- */
- public void testRemoteCloseWithoutHeader() throws Throwable {
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), runtime);
-
- final Future<Void> f = executor.submit(new Callable<Void>() {
- public Void call() throws Exception {
- con.init();
- return null;
- }
- });
-
- assertBlocks(f);
-
- mockConnection.getSocketB().close();
- f.get();
- }
-
- /**
- * Local socket is closed while waiting for commands.
- *
- * @throws Exception
- */
- @Test
- public void testLocalClose() throws Exception {
- final OutputStream remoteOut = mockConnection.getSocketB()
- .getOutputStream();
- new ExecutionDataWriter(remoteOut);
-
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), runtime);
- con.init();
-
- final Future<Void> f = executor.submit(new Callable<Void>() {
- public Void call() throws Exception {
- con.run();
- return null;
- }
- });
-
- assertBlocks(f);
-
- con.close();
- f.get();
- }
-
- @Test
- public void testRemoteDump() throws Exception {
- final RemoteControlWriter remoteWriter = new RemoteControlWriter(
- mockConnection.getSocketB().getOutputStream());
-
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), runtime);
- con.init();
-
- final Future<Void> f = executor.submit(new Callable<Void>() {
- public Void call() throws Exception {
- con.run();
- return null;
- }
- });
-
- assertBlocks(f);
-
- remoteWriter.visitDumpCommand(true, false);
- readAndAssertData();
-
- con.close();
- f.get();
- }
-
- @Test
- public void testLocalDump() throws Exception {
- new RemoteControlWriter(mockConnection.getSocketB().getOutputStream());
-
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), runtime);
- con.init();
-
- final Future<Void> f = executor.submit(new Callable<Void>() {
- public Void call() throws Exception {
- con.run();
- return null;
- }
- });
-
- assertBlocks(f);
-
- con.writeExecutionData();
- readAndAssertData();
-
- con.close();
- f.get();
- }
-
- @Test
- public void testLocalDumpWithoutInit() throws Exception {
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), runtime);
- // Must not write any data as we're not initialized:
- con.writeExecutionData();
-
- assertEquals(0, mockConnection.getSocketB().getInputStream()
- .available());
- }
-
- private void readAndAssertData() throws IOException {
- final RemoteControlReader remoteReader = new RemoteControlReader(
- mockConnection.getSocketB().getInputStream());
-
- final ExecutionDataStore execStore = new ExecutionDataStore();
- remoteReader.setExecutionDataVisitor(execStore);
- final SessionInfoStore infoStore = new SessionInfoStore();
- remoteReader.setSessionInfoVisitor(infoStore);
-
- assertTrue(remoteReader.read());
-
- final List<SessionInfo> infos = infoStore.getInfos();
- assertEquals(1, infos.size());
- assertEquals("stubid", infos.get(0).getId());
-
- assertEquals("Foo", execStore.get(0x12345678).getName());
- }
-
- @Test
- public void testRemoteReset() throws Exception {
- runtime.fillProbes();
-
- final RemoteControlWriter remoteWriter = new RemoteControlWriter(
- mockConnection.getSocketB().getOutputStream());
-
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), runtime);
- con.init();
-
- final Future<Void> f = executor.submit(new Callable<Void>() {
- public Void call() throws Exception {
- con.run();
- return null;
- }
- });
-
- assertBlocks(f);
-
- remoteWriter.visitDumpCommand(false, true);
-
- final RemoteControlReader remoteReader = new RemoteControlReader(
- mockConnection.getSocketB().getInputStream());
-
- final ExecutionDataStore execStore = new ExecutionDataStore();
- remoteReader.setExecutionDataVisitor(execStore);
- final SessionInfoStore infoStore = new SessionInfoStore();
- remoteReader.setSessionInfoVisitor(infoStore);
-
- assertTrue(remoteReader.read());
- assertTrue(infoStore.getInfos().isEmpty());
- assertTrue(execStore.getContents().isEmpty());
- runtime.assertNoProbes();
-
- con.close();
- f.get();
- }
-}
+/******************************************************************************* + * Copyright (c) 2009, 2012 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.agent.rt.controller; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.Future; + +import org.jacoco.agent.rt.StubRuntime; +import org.jacoco.core.data.ExecutionDataStore; +import org.jacoco.core.data.ExecutionDataWriter; +import org.jacoco.core.data.SessionInfo; +import org.jacoco.core.data.SessionInfoStore; +import org.jacoco.core.runtime.RemoteControlReader; +import org.jacoco.core.runtime.RemoteControlWriter; +import org.junit.Before; +import org.junit.Test; + +/** + * Unit tests for {@link TcpConnection}. + */ +public class TcpConnectionTest extends ExecutorTestBase { + + private MockSocketConnection mockConnection; + + private StubRuntime runtime; + + @Before + @Override + public void setup() throws Exception { + super.setup(); + mockConnection = new MockSocketConnection(); + runtime = new StubRuntime(); + } + + @Test(expected = IOException.class) + public void testInvalidHeader() throws Exception { + final OutputStream remoteOut = mockConnection.getSocketB() + .getOutputStream(); + remoteOut.write(0x01); + remoteOut.write(0xC0); + remoteOut.write(0xCA); + final TcpConnection connection = new TcpConnection( + mockConnection.getSocketA(), runtime); + connection.init(); + connection.run(); + } + + @Test(expected = IOException.class) + public void testInvalidContent() throws Exception { + final OutputStream remoteOut = mockConnection.getSocketB() + .getOutputStream(); + new ExecutionDataWriter(remoteOut); + final TcpConnection con = new TcpConnection( + mockConnection.getSocketA(), runtime); + con.init(); + remoteOut.write(123); + con.run(); + } + + /** + * Remote endpoint is closed after a valid header has been send. + */ + @Test + public void testRemoteClose() throws Exception { + final OutputStream remoteOut = mockConnection.getSocketB() + .getOutputStream(); + new ExecutionDataWriter(remoteOut); + + final TcpConnection con = new TcpConnection( + mockConnection.getSocketA(), runtime); + con.init(); + + final Future<Void> f = executor.submit(new Callable<Void>() { + public Void call() throws Exception { + con.run(); + return null; + } + }); + + assertBlocks(f); + + mockConnection.getSocketB().close(); + f.get(); + } + + /** + * Remote endpoint is closed before even a valid header was send. + */ + public void testRemoteCloseWithoutHeader() throws Throwable { + final TcpConnection con = new TcpConnection( + mockConnection.getSocketA(), runtime); + + final Future<Void> f = executor.submit(new Callable<Void>() { + public Void call() throws Exception { + con.init(); + return null; + } + }); + + assertBlocks(f); + + mockConnection.getSocketB().close(); + f.get(); + } + + /** + * Local socket is closed while waiting for commands. + * + * @throws Exception + */ + @Test + public void testLocalClose() throws Exception { + final OutputStream remoteOut = mockConnection.getSocketB() + .getOutputStream(); + new ExecutionDataWriter(remoteOut); + + final TcpConnection con = new TcpConnection( + mockConnection.getSocketA(), runtime); + con.init(); + + final Future<Void> f = executor.submit(new Callable<Void>() { + public Void call() throws Exception { + con.run(); + return null; + } + }); + + assertBlocks(f); + + con.close(); + f.get(); + } + + @Test + public void testRemoteDump() throws Exception { + final RemoteControlWriter remoteWriter = new RemoteControlWriter( + mockConnection.getSocketB().getOutputStream()); + + final TcpConnection con = new TcpConnection( + mockConnection.getSocketA(), runtime); + con.init(); + + final Future<Void> f = executor.submit(new Callable<Void>() { + public Void call() throws Exception { + con.run(); + return null; + } + }); + + assertBlocks(f); + + remoteWriter.visitDumpCommand(true, false); + readAndAssertData(); + + con.close(); + f.get(); + } + + @Test + public void testLocalDump() throws Exception { + new RemoteControlWriter(mockConnection.getSocketB().getOutputStream()); + + final TcpConnection con = new TcpConnection( + mockConnection.getSocketA(), runtime); + con.init(); + + final Future<Void> f = executor.submit(new Callable<Void>() { + public Void call() throws Exception { + con.run(); + return null; + } + }); + + assertBlocks(f); + + con.writeExecutionData(); + readAndAssertData(); + + con.close(); + f.get(); + } + + @Test + public void testLocalDumpWithoutInit() throws Exception { + final TcpConnection con = new TcpConnection( + mockConnection.getSocketA(), runtime); + // Must not write any data as we're not initialized: + con.writeExecutionData(); + + assertEquals(0, mockConnection.getSocketB().getInputStream() + .available()); + } + + private void readAndAssertData() throws IOException { + final RemoteControlReader remoteReader = new RemoteControlReader( + mockConnection.getSocketB().getInputStream()); + + final ExecutionDataStore execStore = new ExecutionDataStore(); + remoteReader.setExecutionDataVisitor(execStore); + final SessionInfoStore infoStore = new SessionInfoStore(); + remoteReader.setSessionInfoVisitor(infoStore); + + assertTrue(remoteReader.read()); + + final List<SessionInfo> infos = infoStore.getInfos(); + assertEquals(1, infos.size()); + assertEquals("stubid", infos.get(0).getId()); + + assertEquals("Foo", execStore.get(0x12345678).getName()); + } + + @Test + public void testRemoteReset() throws Exception { + runtime.fillProbes(); + + final RemoteControlWriter remoteWriter = new RemoteControlWriter( + mockConnection.getSocketB().getOutputStream()); + + final TcpConnection con = new TcpConnection( + mockConnection.getSocketA(), runtime); + con.init(); + + final Future<Void> f = executor.submit(new Callable<Void>() { + public Void call() throws Exception { + con.run(); + return null; + } + }); + + assertBlocks(f); + + remoteWriter.visitDumpCommand(false, true); + + final RemoteControlReader remoteReader = new RemoteControlReader( + mockConnection.getSocketB().getInputStream()); + + final ExecutionDataStore execStore = new ExecutionDataStore(); + remoteReader.setExecutionDataVisitor(execStore); + final SessionInfoStore infoStore = new SessionInfoStore(); + remoteReader.setSessionInfoVisitor(infoStore); + + assertTrue(remoteReader.read()); + assertTrue(infoStore.getInfos().isEmpty()); + assertTrue(execStore.getContents().isEmpty()); + runtime.assertNoProbes(); + + con.close(); + f.get(); + } +} diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpServerControllerTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpServerControllerTest.java index 26c813c6..b965b238 100644 --- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpServerControllerTest.java +++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpServerControllerTest.java @@ -1,142 +1,142 @@ -/*******************************************************************************
- * Copyright (c) 2009, 2012 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:
- * Brock Janiczak - initial API and implementation
- * Marc R. Hoffmann - migration to mock socket
- *
- *******************************************************************************/
-package org.jacoco.agent.rt.controller;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.util.List;
-
-import org.jacoco.agent.rt.ExceptionRecorder;
-import org.jacoco.agent.rt.StubRuntime;
-import org.jacoco.core.data.ExecutionDataStore;
-import org.jacoco.core.data.ExecutionDataWriter;
-import org.jacoco.core.data.SessionInfo;
-import org.jacoco.core.data.SessionInfoStore;
-import org.jacoco.core.runtime.AgentOptions;
-import org.jacoco.core.runtime.RemoteControlReader;
-import org.jacoco.core.runtime.RemoteControlWriter;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Unit tests for {@link TcpServerController}.
- */
-public class TcpServerControllerTest {
-
- private ExceptionRecorder logger;
-
- private AgentOptions options;
-
- private StubRuntime runtime;
-
- private MockServerSocket serverSocket;
-
- private TcpServerController controller;
-
- @Before
- public void setup() throws Exception {
- options = new AgentOptions();
- runtime = new StubRuntime();
- logger = new ExceptionRecorder();
- serverSocket = new MockServerSocket();
- controller = new TcpServerController(logger) {
- @Override
- protected ServerSocket createServerSocket(AgentOptions options)
- throws IOException {
- return serverSocket;
- }
- };
- controller.startup(options, runtime);
- }
-
- @Test
- public void testShutdownWithoutConnection() throws Exception {
- serverSocket.waitForAccept();
- controller.shutdown();
- logger.assertEmpty();
- }
-
- @Test
- public void testShutdownWithConnection() throws Exception {
- serverSocket.waitForAccept();
- new ExecutionDataWriter(serverSocket.connect().getOutputStream());
- controller.shutdown();
- logger.assertEmpty();
- }
-
- @Test
- public void testWriteExecutionData() throws Exception {
- final Socket socket = serverSocket.connect();
- final RemoteControlWriter remoteWriter = new RemoteControlWriter(
- socket.getOutputStream());
- final RemoteControlReader remoteReader = new RemoteControlReader(
- socket.getInputStream());
-
- // First process a NOP command to ensure the connection is initialized:
- remoteWriter.visitDumpCommand(false, false);
- remoteReader.read();
-
- // Now the actual test starts:
- controller.writeExecutionData();
-
- final ExecutionDataStore execStore = new ExecutionDataStore();
- remoteReader.setExecutionDataVisitor(execStore);
- final SessionInfoStore infoStore = new SessionInfoStore();
- remoteReader.setSessionInfoVisitor(infoStore);
- remoteReader.read();
-
- assertEquals("Foo", execStore.get(0x12345678).getName());
-
- final List<SessionInfo> infos = infoStore.getInfos();
- assertEquals(1, infos.size());
- assertEquals("stubid", infos.get(0).getId());
-
- logger.assertEmpty();
- controller.shutdown();
- }
-
- @Test
- public void testInvalidHeader() throws Exception {
- final Socket socket = serverSocket.connect();
- final OutputStream out = socket.getOutputStream();
- out.write(0xca);
- out.write(0xfe);
- out.write(0xba);
- out.write(0xbe);
- serverSocket.waitForAccept();
- logger.assertException(IOException.class,
- "Invalid execution data file.");
- controller.shutdown();
- }
-
- @Test
- public void testGetInetAddressLoopback() throws UnknownHostException {
- final InetAddress addr = controller.getInetAddress(null);
- assertTrue(addr.isLoopbackAddress());
- }
-
- @Test
- public void testGetInetAddressAny() throws UnknownHostException {
- final InetAddress addr = controller.getInetAddress("*");
- assertNull(addr);
- }
-
-}
+/******************************************************************************* + * Copyright (c) 2009, 2012 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: + * Brock Janiczak - initial API and implementation + * Marc R. Hoffmann - migration to mock socket + * + *******************************************************************************/ +package org.jacoco.agent.rt.controller; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.UnknownHostException; +import java.util.List; + +import org.jacoco.agent.rt.ExceptionRecorder; +import org.jacoco.agent.rt.StubRuntime; +import org.jacoco.core.data.ExecutionDataStore; +import org.jacoco.core.data.ExecutionDataWriter; +import org.jacoco.core.data.SessionInfo; +import org.jacoco.core.data.SessionInfoStore; +import org.jacoco.core.runtime.AgentOptions; +import org.jacoco.core.runtime.RemoteControlReader; +import org.jacoco.core.runtime.RemoteControlWriter; +import org.junit.Before; +import org.junit.Test; + +/** + * Unit tests for {@link TcpServerController}. + */ +public class TcpServerControllerTest { + + private ExceptionRecorder logger; + + private AgentOptions options; + + private StubRuntime runtime; + + private MockServerSocket serverSocket; + + private TcpServerController controller; + + @Before + public void setup() throws Exception { + options = new AgentOptions(); + runtime = new StubRuntime(); + logger = new ExceptionRecorder(); + serverSocket = new MockServerSocket(); + controller = new TcpServerController(logger) { + @Override + protected ServerSocket createServerSocket(AgentOptions options) + throws IOException { + return serverSocket; + } + }; + controller.startup(options, runtime); + } + + @Test + public void testShutdownWithoutConnection() throws Exception { + serverSocket.waitForAccept(); + controller.shutdown(); + logger.assertEmpty(); + } + + @Test + public void testShutdownWithConnection() throws Exception { + serverSocket.waitForAccept(); + new ExecutionDataWriter(serverSocket.connect().getOutputStream()); + controller.shutdown(); + logger.assertEmpty(); + } + + @Test + public void testWriteExecutionData() throws Exception { + final Socket socket = serverSocket.connect(); + final RemoteControlWriter remoteWriter = new RemoteControlWriter( + socket.getOutputStream()); + final RemoteControlReader remoteReader = new RemoteControlReader( + socket.getInputStream()); + + // First process a NOP command to ensure the connection is initialized: + remoteWriter.visitDumpCommand(false, false); + remoteReader.read(); + + // Now the actual test starts: + controller.writeExecutionData(); + + final ExecutionDataStore execStore = new ExecutionDataStore(); + remoteReader.setExecutionDataVisitor(execStore); + final SessionInfoStore infoStore = new SessionInfoStore(); + remoteReader.setSessionInfoVisitor(infoStore); + remoteReader.read(); + + assertEquals("Foo", execStore.get(0x12345678).getName()); + + final List<SessionInfo> infos = infoStore.getInfos(); + assertEquals(1, infos.size()); + assertEquals("stubid", infos.get(0).getId()); + + logger.assertEmpty(); + controller.shutdown(); + } + + @Test + public void testInvalidHeader() throws Exception { + final Socket socket = serverSocket.connect(); + final OutputStream out = socket.getOutputStream(); + out.write(0xca); + out.write(0xfe); + out.write(0xba); + out.write(0xbe); + serverSocket.waitForAccept(); + logger.assertException(IOException.class, + "Invalid execution data file."); + controller.shutdown(); + } + + @Test + public void testGetInetAddressLoopback() throws UnknownHostException { + final InetAddress addr = controller.getInetAddress(null); + assertTrue(addr.isLoopbackAddress()); + } + + @Test + public void testGetInetAddressAny() throws UnknownHostException { + final InetAddress addr = controller.getInetAddress("*"); + assertNull(addr); + } + +} |