aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.agent.rt.test
diff options
context:
space:
mode:
authorEvgeny Mandrikov <mandrikov@gmail.com>2012-08-30 22:13:04 +0600
committerEvgeny Mandrikov <mandrikov@gmail.com>2012-08-30 22:13:04 +0600
commite69ba4dbb015949c5d84ba7bbb0b53efac28bb23 (patch)
tree44cbe6d78216fcb3c37c0aca1dc7ed3fc09906fa /org.jacoco.agent.rt.test
parenta888d873ac20357a4a11029bc84c5c4b48e394a3 (diff)
downloadjacoco-e69ba4dbb015949c5d84ba7bbb0b53efac28bb23.tar.gz
Fix EOLs
Diffstat (limited to 'org.jacoco.agent.rt.test')
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/CoverageTransformerTest.java344
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/StubRuntime.java130
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/ExecutorTestBase.java118
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/LocalControllerTest.java122
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocket.java376
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/MockServerSocketTest.java300
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpClientControllerTest.java226
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpConnectionTest.java530
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/controller/TcpServerControllerTest.java284
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);
+ }
+
+}