@@ -53,22 +53,58 @@ def initialize(settings, api_port = 9600)
53
53
if @settings . is_set? ( "ls_home_abs_path" )
54
54
@logstash_home = @settings . get ( "ls_home_abs_path" )
55
55
else
56
- # use the LS which was just built in source repo
57
- ls_version_file = YAML . load_file ( LS_VERSION_FILE )
58
- ls_file = "logstash-" + ls_version_file [ "logstash" ]
59
- # First try without the snapshot if it's there
60
- @logstash_home = File . expand_path ( File . join ( LS_BUILD_DIR , ls_file ) , __FILE__ )
61
- @logstash_home += "-SNAPSHOT" unless Dir . exist? ( @logstash_home )
62
-
63
- puts "Using #{ @logstash_home } as LS_HOME"
64
- @logstash_bin = File . join ( "#{ @logstash_home } " , LS_BIN )
65
- raise "Logstash binary not found in path #{ @logstash_home } " unless File . file? @logstash_bin
56
+ @logstash_home = clean_expand_built_tarball
66
57
end
67
58
59
+ puts "Using #{ @logstash_home } as LS_HOME"
60
+ @logstash_bin = File . join ( "#{ @logstash_home } " , LS_BIN )
61
+ raise "Logstash binary not found in path #{ @logstash_home } " unless File . file? @logstash_bin
62
+
68
63
@default_settings_file = File . join ( @logstash_home , LS_CONFIG_FILE )
69
64
@monitoring_api = MonitoringAPI . new ( api_port )
70
65
end
71
66
67
+ ##
68
+ # @return [String] the path to a CLEAN expansion of the locally-built tarball
69
+ def clean_expand_built_tarball
70
+ build_dir = File . expand_path ( LS_BUILD_DIR , __FILE__ ) # source of tarball
71
+ target_dir = File . join ( build_dir , "qa-fixture" )
72
+
73
+ # find the built tarball matching the current version, preferring non-SNAPSHOT
74
+ ls_version = YAML . load_file ( LS_VERSION_FILE ) . fetch ( "logstash" )
75
+ candidates = %W(
76
+ logstash-#{ ls_version } .tar.gz
77
+ logstash-#{ ls_version } -SNAPSHOT.tar.gz
78
+ )
79
+
80
+ candidates . each do |tarball_candidate |
81
+ tarball_candidate_path = File . join ( build_dir , tarball_candidate )
82
+ if File . exist? ( tarball_candidate_path )
83
+ expected_untar_directory = File . basename ( tarball_candidate , ".tar.gz" )
84
+ result_logstash_home = File . join ( target_dir , expected_untar_directory )
85
+
86
+ if Dir . exist? ( result_logstash_home )
87
+ puts "expunging(#{ result_logstash_home } )"
88
+ # FileUtils#rm_rf cannot be used here because it silently fails to remove the bundled jdk on MacOS
89
+ expunge_result = `rm -rf #{ Shellwords . escape ( result_logstash_home ) } 2>&1`
90
+ fail ( "ERROR EXPUNGING: #{ expunge_result } " ) unless $?. success?
91
+ end
92
+
93
+ puts "expanding(#{ tarball_candidate_path } )"
94
+ FileUtils . mkdir_p ( target_dir ) unless Dir . exist? ( target_dir )
95
+ FileUtils . chdir ( target_dir ) do
96
+ expand_result = `tar -xzf #{ Shellwords . escape ( tarball_candidate_path ) } 2>&1`
97
+ fail ( "ERROR EXPANDING: #{ expand_result } " ) unless $?. success?
98
+ end
99
+
100
+ return result_logstash_home
101
+ end
102
+ end
103
+
104
+ fail ( "failed to find any matching build tarballs (looked for `#{ candidates } ` in `#{ build_dir } `)" )
105
+ end
106
+ private :clean_expand_built_tarball
107
+
72
108
def alive?
73
109
if @process . nil? || @process . exited?
74
110
raise "Logstash process is not up because of an error, or it stopped"
0 commit comments