diff options
Diffstat (limited to 'org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java')
-rw-r--r-- | org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java new file mode 100644 index 00000000..62e7dc44 --- /dev/null +++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java @@ -0,0 +1,131 @@ +/******************************************************************************* + * Copyright (c) 2009, 2017 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.cli.internal.commands; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; + +import org.jacoco.cli.internal.CommandTestBase; +import org.jacoco.core.runtime.IRemoteCommandVisitor; +import org.jacoco.core.runtime.RemoteControlReader; +import org.jacoco.core.runtime.RemoteControlWriter; +import org.junit.After; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +/** + * Unit tests for {@link Dump}. + */ +public class DumpTest extends CommandTestBase { + + @Rule + public TemporaryFolder tmp = new TemporaryFolder(); + + private ServerSocket serverSocket; + + @After + public void after() throws IOException { + if (serverSocket != null) { + serverSocket.close(); + } + } + + @Test + public void should_print_usage_when_no_argument_is_given() + throws Exception { + execute("dump"); + assertFailure(); + assertContains("Option \"-destfile\" is required", err); + assertContains("java -jar jacococli.jar dump [-address <address>]", + err); + } + + @Test + public void should_write_dump() throws Exception { + + File execfile = new File(tmp.getRoot(), "jacoco.exec"); + int port = startMockServer(); + + execute("dump", "-destfile", execfile.getAbsolutePath(), "-port", + String.valueOf(port)); + + assertOk(); + assertContains("[INFO] Connecting to ", out); + assertContains("[INFO] Writing execution data to " + + execfile.getAbsolutePath(), out); + assertTrue(execfile.exists()); + } + + @Test + public void should_log_connection_error_when_retry_is_specified() + throws Exception { + + File execfile = new File(tmp.getRoot(), "jacoco.exec"); + int port = unusedPort(); + + try { + execute("dump", "-destfile", execfile.getAbsolutePath(), "-port", + String.valueOf(port), "-retry", "1"); + fail("IOException expected"); + } catch (IOException ignore) { + } + + assertContains("[WARN] Connection refused", err); + } + + private int startMockServer() throws IOException { + serverSocket = new ServerSocket(0, 0, InetAddress.getByName(null)); + new Thread() { + @Override + public void run() { + try { + serveRequest(serverSocket.accept()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }.start(); + return serverSocket.getLocalPort(); + } + + private void serveRequest(Socket socket) throws IOException { + final RemoteControlWriter writer = new RemoteControlWriter( + socket.getOutputStream()); + final RemoteControlReader reader = new RemoteControlReader( + socket.getInputStream()); + reader.setRemoteCommandVisitor(new IRemoteCommandVisitor() { + + public void visitDumpCommand(boolean dump, boolean reset) + throws IOException { + writer.sendCmdOk(); + } + }); + while (reader.read()) { + } + } + + private int unusedPort() throws IOException { + final ServerSocket serverSocket = new ServerSocket(0, 0, + InetAddress.getByName(null)); + final int port = serverSocket.getLocalPort(); + serverSocket.close(); + return port; + } + +} |