1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugin.surefire.extensions;
20
21 import java.io.Closeable;
22 import java.nio.file.Paths;
23
24 import org.apache.maven.surefire.extensions.EventHandler;
25 import org.apache.maven.surefire.extensions.util.CommandlineExecutor;
26 import org.apache.maven.surefire.extensions.util.CommandlineStreams;
27 import org.apache.maven.surefire.extensions.util.CountdownCloseable;
28 import org.apache.maven.surefire.extensions.util.LineConsumerThread;
29 import org.apache.maven.surefire.shared.utils.cli.Commandline;
30 import org.junit.After;
31 import org.junit.Before;
32 import org.junit.Test;
33
34 import static org.apache.maven.surefire.shared.lang3.SystemUtils.IS_OS_WINDOWS;
35 import static org.assertj.core.api.Assertions.assertThat;
36 import static org.assertj.core.util.Files.delete;
37 import static org.mockito.ArgumentMatchers.contains;
38 import static org.mockito.Mockito.mock;
39 import static org.mockito.Mockito.verify;
40
41
42
43
44 public class CommandlineExecutorTest {
45 private CommandlineExecutor exec;
46 private CommandlineStreams streams;
47 private String baseDir;
48 private LineConsumerThread out;
49
50 @Before
51 public void setUp() throws Exception {
52 baseDir = System.getProperty("user.dir");
53
54 delete(Paths.get(baseDir, "target", "CommandlineExecutorTest").toFile());
55
56 boolean createdDir =
57 Paths.get(baseDir, "target", "CommandlineExecutorTest").toFile().mkdirs();
58
59 assertThat(createdDir).isTrue();
60
61 boolean createdFile = Paths.get(baseDir, "target", "CommandlineExecutorTest", "a.txt")
62 .toFile()
63 .createNewFile();
64
65 assertThat(createdFile).isTrue();
66 }
67
68 @After
69 public void tearDown() throws Exception {
70 if (out != null) {
71 out.close();
72 }
73 exec.close();
74 streams.close();
75 delete(Paths.get(baseDir, "target", "CommandlineExecutorTest").toFile());
76 }
77
78 @Test
79 public void shouldExecuteNativeCommand() throws Exception {
80 Closeable closer = mock(Closeable.class);
81 Commandline cli = new Commandline(IS_OS_WINDOWS ? "dir" : "ls -la");
82 cli.setWorkingDirectory(
83 Paths.get(baseDir, "target", "CommandlineExecutorTest").toFile());
84 CountdownCloseable countdownCloseable = new CountdownCloseable(closer, 1);
85 exec = new CommandlineExecutor(cli, countdownCloseable);
86 streams = exec.execute();
87 @SuppressWarnings("unchecked")
88 EventHandler<String> consumer = mock(EventHandler.class);
89
90 out = new LineConsumerThread("std-out-fork-1", streams.getStdOutChannel(), consumer, countdownCloseable);
91 out.start();
92 exec.awaitExit();
93 verify(consumer).handleEvent(contains("a.txt"));
94 }
95 }