sauce-connect 3.5.0 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +5 -13
  2. data/lib/sauce/connect.rb +100 -38
  3. metadata +9 -12
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZmFjYTAwZTI2N2U0ZDJjY2UxMjM0ZjQ4YWJhNzJkNGJhZWEzZmViYQ==
5
- data.tar.gz: !binary |-
6
- N2JjMTg1YmM5YzQzNmUyNDNhZTI4M2U2NGM4MTg5OTBiMWJhNWVkMg==
2
+ SHA1:
3
+ metadata.gz: ac85a3af79d626f0f58d6deed1db7ebe445ffdbe
4
+ data.tar.gz: d4fb55c8c1ec84446d79acd73ccebb66029d72aa
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- N2Q0YjBlMzYyYzE5MjYyNGQ3MTkyMWNmMWNlMDE5MTY1NGY5NjI5ZGE2ZTFm
10
- NjVjZGMxNjY2OTYxZWFmN2YwMmFmZDY4MzcxNzQyMGFlNzBhOWM5Yzg1NzQ0
11
- OTIxMjhjZDcyYThkYmYwNDEwOGJjNzgxYjMxNWE0YjJmMDhkNTQ=
12
- data.tar.gz: !binary |-
13
- NzMyN2I5YzIxMDg3ZjRkZGRhNTcwZTNiMTE3N2M5OWEwMzM1NzZhNjYzNTZm
14
- M2M2NTBhNTYyZjNhYWY1MDlmMWJlZjdjZTExZjFkYzI0YTljM2MyN2VmNDQ4
15
- ZjMxMTYzZTc1YzIyNjMyNTg0Y2MxMjFhOTE1NWJhNGIwZjk0MDE=
6
+ metadata.gz: c9c703b675f134b84bdcda37d9831fc6628da02b9a77afab434b6ce874adbc752b2263a8ebbcd373f30d683ac5d6a3e2bf362b613232e2628e22b4c82b1595e6
7
+ data.tar.gz: 5398c70e1ee67fbbde0483a268399548c649427f78178bf3cac58d6ed7c81f68e50a2f0bcbab64f78ab5670971f673c7f8a7278fae057f5a799c456294c7e756
data/lib/sauce/connect.rb CHANGED
@@ -19,6 +19,8 @@ module Sauce
19
19
  @timeout = options.fetch(:timeout) { TIMEOUT }
20
20
  @config = Sauce::Config.new(options)
21
21
  @skip_connection_test = @config[:skip_connection_test]
22
+ @cli_options = @config[:connect_options]
23
+ @sc4_executable = @config[:sauce_connect_4_executable]
22
24
 
23
25
  if @config.username.nil?
24
26
  raise ArgumentError, "Username required to launch Sauce Connect. Please set the environment variable $SAUCE_USERNAME"
@@ -60,48 +62,68 @@ module Sauce
60
62
  ensure_connection_is_possible
61
63
  end
62
64
 
63
- puts "[Connecting to Sauce Labs...]"
65
+ if java_is_present?
66
+ puts "[Connecting to Sauce Labs...]"
64
67
 
65
- formatted_cli_options = array_of_formatted_cli_options_from_hash(cli_options)
66
- command_args = [@config.username, @config.access_key] + formatted_cli_options
67
- command = "exec #{Sauce::Connect.connect_command} #{command_args.join(' ')} 2>&1"
68
- @pipe = IO.popen(command)
68
+ formatted_cli_options = array_of_formatted_cli_options_from_hash(cli_options)
69
69
 
70
- @process_status = $?
71
- at_exit do
72
- Process.kill("INT", @pipe.pid)
73
- while @ready
74
- sleep 1
70
+ command_args = []
71
+ if @sc4_executable
72
+ command_args = ['-u', @config.username, '-k', @config.access_key]
73
+ else
74
+ command_args = [@config.username, @config.access_key]
75
75
  end
76
- end
77
- Thread.new {
78
- while( (line = @pipe.gets) )
79
- if line =~ /Tunnel remote VM is (.*) (\.\.|at)/
80
- @status = $1
81
- end
82
- if line =~/You may start your tests\./
83
- @ready = true
84
- end
85
- if line =~ /- (Problem.*)$/
86
- @error = $1
87
- end
88
- if line =~ /== Missing requirements ==/
89
- @error = "Missing requirements"
90
- @quiet = false
91
- end
92
- if line =~/Invalid API_KEY provided/
93
- @error = "Invalid API_KEY provided"
94
- @quiet = false
76
+
77
+ command_args << formatted_cli_options
78
+ command = "exec #{connect_command} #{command_args.join(' ')} 2>&1"
79
+
80
+ unless @quiet
81
+ string_arguments = formatted_cli_options.join(' ')
82
+ puts "[Sauce Connect arguments: '#{string_arguments}' ]"
83
+ end
84
+
85
+ @pipe = IO.popen(command)
86
+
87
+ @process_status = $?
88
+ at_exit do
89
+ Process.kill("INT", @pipe.pid)
90
+ while @ready
91
+ sleep 1
95
92
  end
96
- $stderr.puts line unless @quiet
97
93
  end
98
- @ready = false
99
- }
94
+
95
+ Thread.new {
96
+ while( (line = @pipe.gets) )
97
+ if line =~ /Tunnel remote VM is (.*) (\.\.|at)/
98
+ @status = $1
99
+ end
100
+ if line =~/You may start your tests\./
101
+ @ready = true
102
+ end
103
+ if line =~ /- (Problem.*)$/
104
+ @error = $1
105
+ @quiet = false
106
+ end
107
+ if line =~ /== Missing requirements ==/
108
+ @error = "Missing requirements"
109
+ @quiet = false
110
+ end
111
+ if line =~/Invalid API_KEY provided/
112
+ @error = "Invalid API_KEY provided"
113
+ @quiet = false
114
+ end
115
+ $stderr.puts line unless @quiet
116
+ end
117
+ @ready = false
118
+ }
119
+ else
120
+ raise "Java doesn't seem to be installed. Sauce Connect requires a working install of Java to proceed."
121
+ end
100
122
  end
101
123
 
102
124
  def cli_options
103
125
  cli_options = { readyfile: "sauce_connect.ready" }
104
- cli_options.merge!(@config[:connect_options]) if @config.has_key?(:connect_options)
126
+ cli_options.merge!(@cli_options) if @cli_options
105
127
  cli_options
106
128
  end
107
129
 
@@ -129,12 +151,42 @@ module Sauce
129
151
  end
130
152
  end
131
153
 
132
- def self.find_sauce_connect
133
- File.expand_path(File.dirname(__FILE__) + '/../../support/Sauce-Connect.jar')
154
+ # Check the absolute version of the provided path.
155
+ # Returns true only if the path exists and is executable by the
156
+ # effective current user.
157
+ def find_sauce_connect
158
+ if @sc4_executable and path_is_connect_executable? @sc4_executable
159
+ File.absolute_path @sc4_executable
160
+ else
161
+ File.expand_path(File.dirname(__FILE__) + '/../../support/Sauce-Connect.jar')
162
+ end
163
+ end
164
+
165
+ def connect_command
166
+ command = "#{command_prefix}#{find_sauce_connect}"
167
+ return command
168
+ end
169
+
170
+ # SC4 doesn't require a prefix
171
+ def command_prefix
172
+ unless @sc4_executable
173
+ "java -jar "
174
+ end
175
+
176
+ ""
134
177
  end
135
178
 
136
- def self.connect_command
137
- "java -jar #{Sauce::Connect.find_sauce_connect}"
179
+ def path_is_connect_executable? path
180
+ absolute_path = File.absolute_path path
181
+ if File.exist? absolute_path
182
+ if File.executable? absolute_path
183
+ true
184
+ else
185
+ raise TunnelNotPossibleException "#{absolute_path} is not executable by #{Process.euid}"
186
+ end
187
+ else
188
+ raise TunnelNotPossibleException "#{absolute_path} does not exist"
189
+ end
138
190
  end
139
191
 
140
192
  # Global Sauce Connect-ness
@@ -162,10 +214,20 @@ module Sauce
162
214
  def array_of_formatted_cli_options_from_hash(hash)
163
215
  hash.collect do |key, value|
164
216
  opt_name = key.to_s.gsub("_", "-")
165
- "--#{opt_name}=#{value}"
217
+
218
+ if !@sc4_executable
219
+ "--#{opt_name}=#{value}"
220
+ else
221
+ "--#{opt_name} #{value}"
222
+ end
166
223
  end
167
224
  end
168
225
 
226
+ def java_is_present?
227
+ # This is nieve; Can we be better?
228
+ system 'java -version'
229
+ end
230
+
169
231
  def self.port_not_open_message
170
232
  <<-ENDLINE
171
233
  Unable to connect to port 443 on saucelabs.com, which may interfere with
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sauce-connect
3
3
  version: !ruby/object:Gem::Version
4
- version: !binary |-
5
- My41LjA=
4
+ version: 3.5.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - R. Tyler Croy
@@ -12,24 +11,22 @@ authors:
12
11
  autorequire:
13
12
  bindir: bin
14
13
  cert_chain: []
15
- date: 2014-09-15 00:00:00.000000000 Z
14
+ date: 2015-02-23 00:00:00.000000000 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: sauce
19
18
  requirement: !ruby/object:Gem::Requirement
20
19
  requirements:
21
- - - ~>
20
+ - - "~>"
22
21
  - !ruby/object:Gem::Version
23
- version: !binary |-
24
- My41
22
+ version: '3.5'
25
23
  type: :runtime
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
26
  requirements:
29
- - - ~>
27
+ - - "~>"
30
28
  - !ruby/object:Gem::Version
31
- version: !binary |-
32
- My41
29
+ version: '3.5'
33
30
  description: ''
34
31
  email:
35
32
  - tyler@monkeypox.org
@@ -49,17 +46,17 @@ require_paths:
49
46
  - lib
50
47
  required_ruby_version: !ruby/object:Gem::Requirement
51
48
  requirements:
52
- - - ! '>='
49
+ - - ">="
53
50
  - !ruby/object:Gem::Version
54
51
  version: '0'
55
52
  required_rubygems_version: !ruby/object:Gem::Requirement
56
53
  requirements:
57
- - - ! '>='
54
+ - - ">="
58
55
  - !ruby/object:Gem::Version
59
56
  version: '0'
60
57
  requirements: []
61
58
  rubyforge_project:
62
- rubygems_version: 2.2.1
59
+ rubygems_version: 2.2.2
63
60
  signing_key:
64
61
  specification_version: 4
65
62
  summary: ''