blade-sauce_labs_plugin 0.3.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5befcf6015449c3de00d447ac348673ca4664d91
4
- data.tar.gz: ead65f990ffbef9d70bc08fd43f8311ce597ce48
3
+ metadata.gz: 7019507ca64d76eb63254b7815ff95898f3898cf
4
+ data.tar.gz: ac458f0a4b05b834aa3385fb450a59ff00d863b1
5
5
  SHA512:
6
- metadata.gz: bf9179f4b1b9cca0ef8b370baed82018e5714627a8725410b4292df86e3d6b4041b48316eda120a3190fa7736c5d270250c3364b27d4ab4e1484c63f07101bec
7
- data.tar.gz: c56794d5d9f565dea324dd208ac8a477aff498d647530cd7eab92c7337f3b1c98a4bbfffbc9dc4225e2cc532441e0810950297198d6b87062dbd94a74365b4db
6
+ metadata.gz: 895a2fd9fefc3e40e638a0c0628afe0fb6b9bea2fcd21d814c8fe49a9b5e85bf2fad86b81502c843313ea9893dec2ad58fc578f174e5bb54abcb87ad0cf779cc
7
+ data.tar.gz: 2955c25d211c78e40a430f340cc68db21a2f2ccf7496f0edc70ac9b6f14da68e0c48f76fea4448f84131a9699bb66c963147c67d594f0937a037545b6a256281
@@ -24,5 +24,4 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_dependency "blade"
26
26
  spec.add_dependency "faraday"
27
- spec.add_dependency "childprocess"
28
27
  end
@@ -13,9 +13,10 @@ module Blade::SauceLabsPlugin
13
13
 
14
14
  def start
15
15
  if Blade.config.interface == :ci
16
- Tunnel.start
17
- Blade.config.expected_sessions = Client.platforms.size
18
- Client.request(:post, "rest/v1/#{username}/js-tests", test_params)
16
+ Tunnel.start do
17
+ Blade.config.expected_sessions = Client.platforms.size
18
+ Client.request(:post, "rest/v1/#{username}/js-tests", test_params)
19
+ end
19
20
  end
20
21
  end
21
22
 
@@ -37,7 +38,7 @@ module Blade::SauceLabsPlugin
37
38
 
38
39
  private
39
40
  def test_params
40
- { url: Blade.url, platforms: Client.platforms, framework: Blade.config.framework }.merge(default_test_config).merge(test_config)
41
+ { url: Blade.url, platforms: Client.platforms, framework: Blade.config.framework, tunnelIdentifier: Tunnel.identifier }.merge(default_test_config).merge(test_config)
41
42
  end
42
43
 
43
44
  def default_test_config
@@ -1,4 +1,5 @@
1
- require "childprocess"
1
+ require "securerandom"
2
+ require "shellwords"
2
3
 
3
4
  module Blade::SauceLabsPlugin::Tunnel
4
5
  extend self
@@ -6,37 +7,51 @@ module Blade::SauceLabsPlugin::Tunnel
6
7
  extend Forwardable
7
8
  def_delegators Blade::SauceLabsPlugin, :username, :access_key
8
9
 
10
+ attr_reader :identifier, :pid
11
+
9
12
  def start
10
- return if @process
11
- cmd = Pathname.new(File.dirname(__FILE__)).join("../../../support/sc-#{os}/bin/sc").to_s
12
- @process = ChildProcess.build(cmd, "--user", username, "--api-key", access_key)
13
- reader, writer = IO.pipe
14
- @process.io.stdout = @process.io.stderr = writer
15
- @process.start
16
-
17
- output = ""
18
- while line = reader.gets
19
- output << line
20
- case line
21
- when /Sauce Connect is up, you may start your tests/
22
- break
23
- when /Goodbye/
24
- STDERR.puts output
25
- raise "Sauce Connect tunnel connection error"
13
+ @identifier = SecureRandom.hex(10)
14
+ @pid = EM::DeferrableChildProcess.open(command).get_pid
15
+
16
+ timer = EM::PeriodicTimer.new(1) do
17
+ if ready_file_exists?
18
+ timer.cancel
19
+ yield
26
20
  end
27
21
  end
28
-
29
- ensure
30
- writer.close if writer
31
- reader.close if reader
32
22
  end
33
23
 
34
24
  def stop
35
- return unless @process
36
- @process.stop
25
+ signal = ready_file_exists? ? "INT" : "KILL"
26
+ remove_ready_file
27
+ Process.kill(signal, pid) rescue nil
37
28
  end
38
29
 
39
30
  private
31
+ def command
32
+ [tunnel_command, tunnel_args].join(" ")
33
+ end
34
+
35
+ def tunnel_command
36
+ Pathname.new(File.dirname(__FILE__)).join("../../../support/sc-#{os}/bin/sc").to_s
37
+ end
38
+
39
+ def tunnel_args
40
+ ["--user", username, "--api-key", access_key, "--tunnel-identifier", identifier, "--readyfile", ready_file_path].shelljoin
41
+ end
42
+
43
+ def ready_file_path
44
+ Blade.tmp_path.join("sauce_tunnel_#{identifier}_ready").to_s
45
+ end
46
+
47
+ def ready_file_exists?
48
+ File.exists?(ready_file_path)
49
+ end
50
+
51
+ def remove_ready_file
52
+ File.unlink(ready_file_path) if ready_file_exists?
53
+ end
54
+
40
55
  def os
41
56
  @os ||=
42
57
  case RUBY_PLATFORM.downcase
@@ -1,5 +1,5 @@
1
1
  module Blade
2
2
  module SauceLabsPlugin
3
- VERSION = "0.3.0"
3
+ VERSION = "0.3.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blade-sauce_labs_plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Javan Makhmali
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-30 00:00:00.000000000 Z
11
+ date: 2015-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: childprocess
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  description:
98
84
  email:
99
85
  - javan@javan.us
@@ -147,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
133
  version: '0'
148
134
  requirements: []
149
135
  rubyforge_project:
150
- rubygems_version: 2.4.6
136
+ rubygems_version: 2.4.5
151
137
  signing_key:
152
138
  specification_version: 4
153
139
  summary: Blade Runner plugin for Sauce Labs (saucelabs.com)