1 package org.apache.maven.surefire.booter;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.junit.Test;
23
24 import java.io.File;
25 import java.lang.management.ManagementFactory;
26 import java.util.regex.Matcher;
27
28 import static org.apache.commons.lang3.SystemUtils.IS_OS_UNIX;
29 import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS;
30 import static org.fest.assertions.Assertions.assertThat;
31 import static org.hamcrest.CoreMatchers.is;
32 import static org.hamcrest.CoreMatchers.not;
33 import static org.hamcrest.CoreMatchers.notNullValue;
34 import static org.junit.Assume.assumeThat;
35 import static org.junit.Assume.assumeTrue;
36 import static org.powermock.reflect.Whitebox.invokeMethod;
37
38
39
40
41
42
43
44 public class PpidCheckerTest
45 {
46 @Test
47 public void shouldHavePpidAsWindows()
48 {
49 assumeTrue( IS_OS_WINDOWS );
50
51 long expectedPid = Long.parseLong( ManagementFactory.getRuntimeMXBean().getName().split( "@" )[0].trim() );
52
53 PpidChecker checker = new PpidChecker( expectedPid );
54 ProcessInfo processInfo = checker.windows();
55
56 assertThat( processInfo )
57 .isNotNull();
58
59 assertThat( checker.canUse() )
60 .isTrue();
61
62 assertThat( checker.isProcessAlive() )
63 .isTrue();
64
65 assertThat( processInfo.getPID() )
66 .isEqualTo( expectedPid );
67
68 assertThat( processInfo.getTime() )
69 .isNotNull();
70 }
71
72 @Test
73 public void shouldHavePpidAsUnix()
74 {
75 assumeTrue( IS_OS_UNIX );
76
77 assertThat( PpidChecker.canExecuteUnixPs() )
78 .as( "Surefire should be tested on real box OS, e.g. Ubuntu or FreeBSD." )
79 .isTrue();
80
81 long expectedPid = Long.parseLong( ManagementFactory.getRuntimeMXBean().getName().split( "@" )[0].trim() );
82
83 PpidChecker checker = new PpidChecker( expectedPid );
84 ProcessInfo processInfo = checker.unix();
85
86 assertThat( processInfo )
87 .isNotNull();
88
89 assertThat( checker.canUse() )
90 .isTrue();
91
92 assertThat( checker.isProcessAlive() )
93 .isTrue();
94
95 assertThat( processInfo.getPID() )
96 .isEqualTo( expectedPid );
97
98 assertThat( processInfo.getTime() )
99 .isNotNull();
100 }
101
102 @Test
103 public void shouldNotFindSuchPID()
104 {
105 PpidChecker checker = new PpidChecker( 1000000L );
106 assertThat( checker.canUse() )
107 .isTrue();
108
109 boolean isAlive = checker.isProcessAlive();
110
111 assertThat( isAlive )
112 .isFalse();
113 }
114
115 @Test
116 public void shouldParseEtime()
117 {
118 Matcher m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "38" );
119 assertThat( m.matches() )
120 .isFalse();
121
122 m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "05:38" );
123 assertThat( m.matches() )
124 .isTrue();
125 assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 0L );
126 assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 0L );
127 assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
128 assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 38L );
129
130 m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "00:05:38" );
131 assertThat( m.matches() )
132 .isTrue();
133 assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 0L );
134 assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 0L );
135 assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
136 assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 38L );
137
138 m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "01:05:38" );
139 assertThat( m.matches() )
140 .isTrue();
141 assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 0L );
142 assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 3600L );
143 assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
144 assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 38L );
145
146 m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "02-01:05:38" );
147 assertThat( m.matches() )
148 .isTrue();
149 assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 2 * 24 * 3600L );
150 assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 3600L );
151 assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
152 assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 38L );
153
154 m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "02-1:5:3" );
155 assertThat( m.matches() )
156 .isTrue();
157 assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 2 * 24 * 3600L );
158 assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 3600L );
159 assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
160 assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 3L );
161 }
162
163 @Test
164 public void shouldHaveSystemPathToWmicOnWindows() throws Exception
165 {
166 assumeTrue( IS_OS_WINDOWS );
167 assumeThat( System.getenv( "SystemRoot" ), is( notNullValue() ) );
168 assumeThat( System.getenv( "SystemRoot" ), is( not( "" ) ) );
169 assumeTrue( new File( System.getenv( "SystemRoot" ), "System32\\Wbem" ).isDirectory() );
170 assumeTrue( new File( System.getenv( "SystemRoot" ), "System32\\Wbem\\wmic.exe" ).isFile() );
171 assertThat( (Boolean) invokeMethod( PpidChecker.class, "hasWmicStandardSystemPath" ) ).isTrue();
172 assertThat( new File( System.getenv( "SystemRoot" ), "System32\\Wbem\\wmic.exe" ) ).isFile();
173 }
174 }