@@ -198,4 +198,78 @@ private BufferedReader asReader(String s) {
198198 return new BufferedReader (new StringReader (s ));
199199 }
200200
201+
202+ @ Test
203+ public void testSingleEnvSub () throws IOException {
204+ String result = JvmOptionsParser .resolveEnvVar ("-XX:HeapDumpPath=${LOGSTASH_HOME}/heapdump.hprof" ,
205+ Map .of ("LOGSTASH_HOME" , "/path/to/ls_home" ));
206+ assertEquals ("-XX:HeapDumpPath=/path/to/ls_home/heapdump.hprof" , result );
207+ }
208+
209+ @ Test
210+ public void testMultipleEnvSub () throws IOException {
211+ String result = JvmOptionsParser .resolveEnvVar ("-XX:HeapDumpPath=${LOGSTASH_HOME}/${DATA}/heapdump.hprof" ,
212+ Map .of ("LOGSTASH_HOME" , "/path/to/ls_home" , "DATA" , "data" ));
213+ assertEquals ("-XX:HeapDumpPath=/path/to/ls_home/data/heapdump.hprof" , result );
214+ }
215+
216+ @ Test
217+ public void testPeriodEnvSub () throws IOException {
218+ String result = JvmOptionsParser .resolveEnvVar ("-XX:HeapDumpPath=${.HOME}/heapdump.hprof" ,
219+ Map .of (".HOME" , "/path/to/.home" ));
220+ assertEquals ("-XX:HeapDumpPath=/path/to/.home/heapdump.hprof" , result );
221+ }
222+
223+ @ Test
224+ public void testEmptyEnvSub () throws IOException {
225+ String result = JvmOptionsParser .resolveEnvVar ("-XX:HeapDumpPath=${NOT_VALID}/heapdump.hprof" , Map .of ());
226+ assertEquals ("-XX:HeapDumpPath=/heapdump.hprof" , result );
227+ }
228+
229+ @ Test
230+ public void testNoSub () throws IOException {
231+ String result = JvmOptionsParser .resolveEnvVar (" " , Map .of ());
232+ assertEquals (" " , result );
233+ }
234+
235+ @ Test
236+ public void testEnvSubWithDefault () throws IOException {
237+ String result = JvmOptionsParser .resolveEnvVar ("-XX:HeapDumpPath=${LOGSTASH_HOME:/usr/share/logstash}/${DATA:data}/heapdump.hprof" ,
238+ Map .of ());
239+ assertEquals ("-XX:HeapDumpPath=/usr/share/logstash/data/heapdump.hprof" , result );
240+ }
241+
242+ @ Test
243+ public void testEnvSubWithDefaultSpecialChar () throws IOException {
244+ String result = JvmOptionsParser .resolveEnvVar ("-XX:HeapDumpPath=${LOGSTASH_HOME:/usr/share/logstash}/${DATA:{$crazy!enough?'bless'@[you]}/heapdump.hprof" ,
245+ Map .of ());
246+ assertEquals ("-XX:HeapDumpPath=/usr/share/logstash/{$crazy!enough?'bless'@[you]/heapdump.hprof" , result );
247+ }
248+
249+ @ Test
250+ public void testEnvSubWithDefaultOverwritten () throws IOException {
251+ String result = JvmOptionsParser .resolveEnvVar ("-XX:HeapDumpPath=${LOGSTASH_HOME:/usr/share/logstash}/${DATA:data}/heapdump.hprof" ,
252+ Map .of ("DATA" , "data2" ));
253+ assertEquals ("-XX:HeapDumpPath=/usr/share/logstash/data2/heapdump.hprof" , result );
254+ }
255+
256+ @ Test
257+ public void testEnvSubInFile () throws IOException {
258+ File optionsFile = writeIntoTempOptionsFile (
259+ writer -> writer .println ("-Xlog:gc*,gc+age=trace,safepoint:file=${UNKNOWN}:" ));
260+
261+ JvmOptionsParser .handleJvmOptions (new String [] {"/path/to/ls_home" , optionsFile .toString ()}, "-Dcli.opts=something" );
262+
263+ final String output = outputStreamCaptor .toString ();
264+ assertTrue ("env variable should be substituted " , output .contains ("-Xlog:gc*,gc+age=trace,safepoint:file=:" ));
265+ }
266+
267+ @ Test
268+ public void testCommentedEnvSub () throws IOException {
269+ final BufferedReader options = asReader ("# -Xlog:gc*,gc+age=trace,safepoint:file=${UNKNOWN}:" );
270+ final JvmOptionsParser .ParseResult res = JvmOptionsParser .parse (11 , options );
271+
272+ assertTrue ("no invalid lines can be present" , res .getInvalidLines ().isEmpty ());
273+ assertFalse (String .join (System .lineSeparator (), res .getJvmOptions ()).contains ("-Xlog:gc*,gc+age=trace,safepoint" ));
274+ }
201275}
0 commit comments