aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.agent.rt.test
diff options
context:
space:
mode:
Diffstat (limited to 'org.jacoco.agent.rt.test')
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java33
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java17
-rw-r--r--org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java46
3 files changed, 60 insertions, 36 deletions
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java
index 8e20e24e..d82ef8f6 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java
@@ -41,15 +41,15 @@ public class MockSocketConnection {
socketA.connect(socketB);
}
- public Socket getSocketA() {
+ public MockSocket getSocketA() {
return socketA;
}
- public Socket getSocketB() {
+ public MockSocket getSocketB() {
return socketB;
}
- private class MockSocket extends Socket {
+ class MockSocket extends Socket {
private MockSocket other;
@@ -85,6 +85,7 @@ public class MockSocketConnection {
return -1;
}
final Byte b = buffer.poll();
+ buffer.notifyAll();
if (b != null) {
return 0xff & b.intValue();
}
@@ -98,26 +99,36 @@ public class MockSocketConnection {
@Override
public int available() throws IOException {
- return buffer.size();
+ synchronized (buffer) {
+ return buffer.size();
+ }
}
};
- public MockSocket() throws SocketException {
+ private MockSocket() throws SocketException {
super((SocketImpl) null);
closed = false;
}
- void connect(MockSocket other) {
+ private void connect(MockSocket other) {
this.other = other;
other.other = this;
}
+ public void waitUntilInputBufferIsEmpty() throws InterruptedException {
+ synchronized (buffer) {
+ while (!closed && !buffer.isEmpty()) {
+ buffer.wait();
+ }
+ }
+ }
+
// socket methods with mocking behavior:
@Override
public OutputStream getOutputStream() throws IOException {
- if (closed) {
+ if (isClosed()) {
throw new SocketException("Socket is closed");
}
return out;
@@ -125,7 +136,7 @@ public class MockSocketConnection {
@Override
public InputStream getInputStream() throws IOException {
- if (closed) {
+ if (isClosed()) {
throw new SocketException("Socket is closed");
}
return in;
@@ -133,8 +144,8 @@ public class MockSocketConnection {
@Override
public void close() throws IOException {
- closed = true;
synchronized (buffer) {
+ closed = true;
buffer.notifyAll();
}
synchronized (other.buffer) {
@@ -144,7 +155,9 @@ public class MockSocketConnection {
@Override
public boolean isClosed() {
- return closed;
+ synchronized (buffer) {
+ return closed;
+ }
}
// unsupported socket methods:
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java
index 9ac8fa82..e7f18661 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java
@@ -21,6 +21,7 @@ import java.net.Socket;
import java.util.List;
import org.jacoco.agent.rt.internal.ExceptionRecorder;
+import org.jacoco.agent.rt.internal.output.MockSocketConnection.MockSocket;
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.data.SessionInfo;
import org.jacoco.core.data.SessionInfoStore;
@@ -40,7 +41,8 @@ public class TcpClientOutputTest {
private IAgentOutput controller;
- private Socket remoteSocket;
+ private MockSocket localSocket;
+ private MockSocket remoteSocket;
private RemoteControlWriter remoteWriter;
@@ -52,13 +54,14 @@ public class TcpClientOutputTest {
public void setup() throws Exception {
logger = new ExceptionRecorder();
final MockSocketConnection con = new MockSocketConnection();
+ localSocket = con.getSocketA();
remoteSocket = con.getSocketB();
remoteWriter = new RemoteControlWriter(remoteSocket.getOutputStream());
controller = new TcpClientOutput(logger) {
@Override
protected Socket createSocket(AgentOptions options)
throws IOException {
- return con.getSocketA();
+ return localSocket;
}
};
data = new RuntimeData();
@@ -75,6 +78,8 @@ public class TcpClientOutputTest {
@Test
public void testRemoteClose() throws Exception {
+ localSocket.waitUntilInputBufferIsEmpty();
+
remoteSocket.close();
controller.shutdown();
logger.assertNoException();
@@ -82,16 +87,18 @@ public class TcpClientOutputTest {
@Test
public void testInvalidCommand() throws Exception {
+ // send invalid command to agent
remoteWriter.visitSessionInfo(new SessionInfo("info", 1, 2));
- while (remoteReader.read()) {
- }
+
+ localSocket.waitUntilInputBufferIsEmpty();
controller.shutdown();
logger.assertException(IOException.class, "No session info visitor.");
}
@Test
public void testWriteExecutionData() throws Exception {
- data.getExecutionData(Long.valueOf(0x12345678), "Foo", 42).getProbes()[0] = true;
+ data.getExecutionData(Long.valueOf(0x12345678), "Foo", 42)
+ .getProbes()[0] = true;
data.setSessionId("stubid");
controller.writeExecutionData(false);
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java
index d713203d..3108a992 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java
@@ -66,8 +66,8 @@ public class TcpConnectionTest extends ExecutorTestBase {
final OutputStream remoteOut = mockConnection.getSocketB()
.getOutputStream();
new ExecutionDataWriter(remoteOut);
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), data);
+ final TcpConnection con = new TcpConnection(mockConnection.getSocketA(),
+ data);
con.init();
remoteOut.write(123);
con.run();
@@ -82,8 +82,8 @@ public class TcpConnectionTest extends ExecutorTestBase {
.getOutputStream();
new ExecutionDataWriter(remoteOut);
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), data);
+ final TcpConnection con = new TcpConnection(mockConnection.getSocketA(),
+ data);
con.init();
final Future<Void> f = executor.submit(new Callable<Void>() {
@@ -95,6 +95,7 @@ public class TcpConnectionTest extends ExecutorTestBase {
assertBlocks(f);
+ mockConnection.getSocketA().waitUntilInputBufferIsEmpty();
mockConnection.getSocketB().close();
f.get();
}
@@ -103,8 +104,8 @@ public class TcpConnectionTest extends ExecutorTestBase {
* Remote endpoint is closed before even a valid header was send.
*/
public void testRemoteCloseWithoutHeader() throws Throwable {
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), data);
+ final TcpConnection con = new TcpConnection(mockConnection.getSocketA(),
+ data);
final Future<Void> f = executor.submit(new Callable<Void>() {
public Void call() throws Exception {
@@ -130,8 +131,8 @@ public class TcpConnectionTest extends ExecutorTestBase {
.getOutputStream();
new ExecutionDataWriter(remoteOut);
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), data);
+ final TcpConnection con = new TcpConnection(mockConnection.getSocketA(),
+ data);
con.init();
final Future<Void> f = executor.submit(new Callable<Void>() {
@@ -149,14 +150,15 @@ public class TcpConnectionTest extends ExecutorTestBase {
@Test
public void testRemoteDump() throws Exception {
- data.getExecutionData(Long.valueOf(0x12345678), "Foo", 42).getProbes()[0] = true;
+ data.getExecutionData(Long.valueOf(0x12345678), "Foo", 42)
+ .getProbes()[0] = true;
data.setSessionId("stubid");
final RemoteControlWriter remoteWriter = new RemoteControlWriter(
mockConnection.getSocketB().getOutputStream());
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), data);
+ final TcpConnection con = new TcpConnection(mockConnection.getSocketA(),
+ data);
con.init();
final Future<Void> f = executor.submit(new Callable<Void>() {
@@ -177,13 +179,14 @@ public class TcpConnectionTest extends ExecutorTestBase {
@Test
public void testLocalDump() throws Exception {
- data.getExecutionData(Long.valueOf(0x12345678), "Foo", 42).getProbes()[0] = true;
+ data.getExecutionData(Long.valueOf(0x12345678), "Foo", 42)
+ .getProbes()[0] = true;
data.setSessionId("stubid");
new RemoteControlWriter(mockConnection.getSocketB().getOutputStream());
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), data);
+ final TcpConnection con = new TcpConnection(mockConnection.getSocketA(),
+ data);
con.init();
final Future<Void> f = executor.submit(new Callable<Void>() {
@@ -204,13 +207,13 @@ public class TcpConnectionTest extends ExecutorTestBase {
@Test
public void testLocalDumpWithoutInit() throws Exception {
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), data);
+ final TcpConnection con = new TcpConnection(mockConnection.getSocketA(),
+ data);
// Must not write any data as we're not initialized:
con.writeExecutionData(false);
- assertEquals(0, mockConnection.getSocketB().getInputStream()
- .available());
+ assertEquals(0,
+ mockConnection.getSocketB().getInputStream().available());
}
private void readAndAssertData() throws IOException {
@@ -233,13 +236,14 @@ public class TcpConnectionTest extends ExecutorTestBase {
@Test
public void testRemoteReset() throws Exception {
- data.getExecutionData(Long.valueOf(123), "Foo", 1).getProbes()[0] = true;
+ data.getExecutionData(Long.valueOf(123), "Foo", 1)
+ .getProbes()[0] = true;
final RemoteControlWriter remoteWriter = new RemoteControlWriter(
mockConnection.getSocketB().getOutputStream());
- final TcpConnection con = new TcpConnection(
- mockConnection.getSocketA(), data);
+ final TcpConnection con = new TcpConnection(mockConnection.getSocketA(),
+ data);
con.init();
final Future<Void> f = executor.submit(new Callable<Void>() {