blade-sauce_labs_plugin 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +68 -0
- data/bin/update_sc +25 -0
- data/lib/blade/sauce_labs_plugin/job_manager.rb +8 -14
- data/lib/blade/sauce_labs_plugin/session_manager.rb +39 -0
- data/lib/blade/sauce_labs_plugin/tunnel.rb +6 -1
- data/lib/blade/sauce_labs_plugin/version.rb +1 -1
- data/lib/blade/sauce_labs_plugin/web_driver.rb +13 -3
- data/lib/blade/sauce_labs_plugin.rb +8 -3
- data/support/sc-linux/bin/sc +0 -0
- data/support/sc-linux/lib/libsauceconnect.a +0 -0
- data/support/sc-linux/lib/libsauceconnect.la +2 -2
- data/support/sc-osx/bin/sc +0 -0
- data/support/sc-osx/bin/sc.dSYM/Contents/Info.plist +0 -0
- data/support/sc-osx/bin/sc.dSYM/Contents/Resources/DWARF/sc +0 -0
- data/support/sc-osx/include/sauceconnect.h +0 -0
- data/support/sc-osx/lib/libsauceconnect.a +0 -0
- data/support/sc-osx/lib/libsauceconnect.la +2 -2
- data/support/sc-osx/license.html +0 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36b3598b5eaa5726a03629ec518e327f316bd556
|
4
|
+
data.tar.gz: f30ffedd23ac0dc98cb70bf3135690bc92b0bacc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c7acce2a43bc42c59722174128be43291d8018f0480c02ae85b6d506cc44ce1ede98d46c62bb8bc78c95b1619a61e9d063e74820dcb723c4cea78f14fe276631
|
7
|
+
data.tar.gz: b91a3980daba289f58775c094e6eae01d13c1dd6b1efe842fd2033feb76eb1d28b2df2cffc1b3b5855a6768b38c12c116b0dce1febd1ff442f14e69fdbbff3e7
|
data/README.md
CHANGED
@@ -1 +1,69 @@
|
|
1
1
|
[Blade](https://github.com/javan/blade) plugin for [Sauce Labs](https://saucelabs.com/)
|
2
|
+
|
3
|
+
## Configuration
|
4
|
+
|
5
|
+
### Authenticate with Sauce Labs
|
6
|
+
|
7
|
+
Set the `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables to authenticate with Sauce Labs.
|
8
|
+
|
9
|
+
All CI tools provide a way to set environment variables for a test run. For non-CI test runs, set the environment variables in your shell or in your test runner script.
|
10
|
+
|
11
|
+
### Pick the browsers to run against
|
12
|
+
|
13
|
+
Rather than exhaustively list every permutation of devices, operating systems,
|
14
|
+
and browsers, we use a shorthand to match all the platforms we target.
|
15
|
+
|
16
|
+
Full example:
|
17
|
+
```yaml
|
18
|
+
plugins:
|
19
|
+
sauce_labs:
|
20
|
+
browsers:
|
21
|
+
# Internet Explorer 11 on every device and operating system it supports.
|
22
|
+
IE: 11
|
23
|
+
|
24
|
+
# Latest two Chrome releases on all Mac and Windows platforms:
|
25
|
+
Google Chrome:
|
26
|
+
os: Mac, Windows
|
27
|
+
version: -2
|
28
|
+
|
29
|
+
# Latest two Firefox releases on every platform:
|
30
|
+
Firefox:
|
31
|
+
version: -2
|
32
|
+
|
33
|
+
# Latest Safari release on every Mac platform (OS X 10.x):
|
34
|
+
Safari:
|
35
|
+
platform: Mac
|
36
|
+
version: -1
|
37
|
+
|
38
|
+
# Latest two Edge releases on every platform:
|
39
|
+
Microsoft Edge:
|
40
|
+
version: -2
|
41
|
+
|
42
|
+
# Specific iOS Mobile Safari versions:
|
43
|
+
iPhone:
|
44
|
+
version: [9.2, 8.4]
|
45
|
+
|
46
|
+
# Mobile-specific browser:
|
47
|
+
Motorola Droid 4 Emulator:
|
48
|
+
version: [5.1, 4.4]
|
49
|
+
```
|
50
|
+
|
51
|
+
See Sauce Labs' [Platform Configurator](https://wiki.saucelabs.com/display/DOCS/Platform+Configurator) for an exhaustive list of supported devices, operating systems, and browsers.
|
52
|
+
|
53
|
+
### Advanced configuration
|
54
|
+
|
55
|
+
For low-level Sauce Connect configuration, set `tunnel_args` to an array of command line arguments.
|
56
|
+
|
57
|
+
Example:
|
58
|
+
```yaml
|
59
|
+
plugins:
|
60
|
+
sauce_labs:
|
61
|
+
tunnel_args:
|
62
|
+
- "--verbose" # Turn on verbose logging.
|
63
|
+
- "--vm-version" # Use the varnish VM for WebSockets support.
|
64
|
+
- "dev-varnish"
|
65
|
+
```
|
66
|
+
|
67
|
+
The plugin already sets the `--user`, `--api-key`, `--tunnel-identifier`, and `--readyfile` arguments, so don't set these yourself.
|
68
|
+
|
69
|
+
Full [Sauce Connect command line reference](https://wiki.saucelabs.com/pages/viewpage.action?pageId=48365781).
|
data/bin/update_sc
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
set -euo pipefail
|
3
|
+
|
4
|
+
which -s wget || brew install wget
|
5
|
+
which -s jq || brew install jq
|
6
|
+
|
7
|
+
download_and_extract() {
|
8
|
+
local url="$1"
|
9
|
+
local dirname="$2"
|
10
|
+
local extension="$3"
|
11
|
+
local filename="$dirname$extension"
|
12
|
+
|
13
|
+
wget "$url" -O "$filename"
|
14
|
+
tar -zxvf "$filename" -C "$dirname" --strip=1
|
15
|
+
rm -f "$filename"
|
16
|
+
}
|
17
|
+
|
18
|
+
platforms=$(curl https://saucelabs.com/versions.json | jq '."Sauce Connect"')
|
19
|
+
|
20
|
+
osx_url=$(echo "$platforms" | jq --raw-output '.osx.download_url')
|
21
|
+
linux_url=$(echo "$platforms" | jq --raw-output '.linux.download_url')
|
22
|
+
|
23
|
+
cd support
|
24
|
+
download_and_extract "$osx_url" "sc-osx" ".zip"
|
25
|
+
download_and_extract "$linux_url" "sc-linux" ".tar.gz"
|
@@ -3,7 +3,7 @@ module Blade::SauceLabsPlugin::JobManager
|
|
3
3
|
|
4
4
|
Job = Blade::SauceLabsPlugin::Job
|
5
5
|
|
6
|
-
delegate :config, :client, to: Blade::SauceLabsPlugin
|
6
|
+
delegate :config, :client, :session_manager, to: Blade::SauceLabsPlugin
|
7
7
|
|
8
8
|
cattr_accessor(:job_queue) { EM::Queue.new }
|
9
9
|
cattr_accessor(:jobs) { [] }
|
@@ -11,7 +11,12 @@ module Blade::SauceLabsPlugin::JobManager
|
|
11
11
|
def start
|
12
12
|
enqueue_jobs
|
13
13
|
process_queue
|
14
|
-
|
14
|
+
|
15
|
+
Blade.subscribe("/results") do |details|
|
16
|
+
if details[:completed]
|
17
|
+
EM.add_timer(1) { process_queue }
|
18
|
+
end
|
19
|
+
end
|
15
20
|
end
|
16
21
|
|
17
22
|
def stop
|
@@ -36,6 +41,7 @@ module Blade::SauceLabsPlugin::JobManager
|
|
36
41
|
job_queue.pop do |job|
|
37
42
|
job.callback do
|
38
43
|
jobs << job
|
44
|
+
session_manager.update(job.session_id, job: job)
|
39
45
|
end
|
40
46
|
|
41
47
|
job.errback do
|
@@ -65,18 +71,6 @@ module Blade::SauceLabsPlugin::JobManager
|
|
65
71
|
end
|
66
72
|
end
|
67
73
|
|
68
|
-
def handle_completed_jobs
|
69
|
-
Blade.subscribe("/results") do |details|
|
70
|
-
if details["completed"]
|
71
|
-
if job = jobs.detect { |job| job.session_id == details["session_id"] }
|
72
|
-
job.stop
|
73
|
-
job.update(passed: (details["state"] != "failed"))
|
74
|
-
EM.add_timer(1) { process_queue }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
74
|
def test_params
|
81
75
|
camelize_keys(combined_test_config)
|
82
76
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Blade::SauceLabsPlugin::SessionManager
|
2
|
+
extend self
|
3
|
+
|
4
|
+
delegate :client, to: Blade::SauceLabsPlugin
|
5
|
+
|
6
|
+
mattr_accessor(:sessions) { Hash.new }
|
7
|
+
|
8
|
+
def start
|
9
|
+
Blade.config.expected_sessions = client.platforms.size
|
10
|
+
handle_completed_jobs
|
11
|
+
end
|
12
|
+
|
13
|
+
def stop
|
14
|
+
end
|
15
|
+
|
16
|
+
def update(session_id, data = {})
|
17
|
+
session =
|
18
|
+
if sessions[session_id]
|
19
|
+
sessions[session_id].merge!(data)
|
20
|
+
else
|
21
|
+
sessions[session_id] = data
|
22
|
+
end
|
23
|
+
|
24
|
+
if session.has_key?(:job) && session.has_key?(:passed)
|
25
|
+
session[:job].update(passed: session[:passed])
|
26
|
+
session[:job].stop
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def handle_completed_jobs
|
32
|
+
Blade.subscribe("/results") do |details|
|
33
|
+
if details[:completed]
|
34
|
+
passed = details[:state] != "failed"
|
35
|
+
update(details[:session_id], passed: passed)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -36,6 +36,7 @@ module Blade::SauceLabsPlugin::Tunnel
|
|
36
36
|
ChildProcess.build(tunnel_command, *tunnel_args).tap do |process|
|
37
37
|
process.leader = true
|
38
38
|
process.io.inherit! if debug?
|
39
|
+
process.environment.merge! tunnel_env
|
39
40
|
process.start
|
40
41
|
debug process.inspect
|
41
42
|
end
|
@@ -46,7 +47,11 @@ module Blade::SauceLabsPlugin::Tunnel
|
|
46
47
|
end
|
47
48
|
|
48
49
|
def tunnel_args
|
49
|
-
["--
|
50
|
+
["--tunnel-identifier", identifier, "--readyfile", ready_file_path] + Array(config.tunnel_args)
|
51
|
+
end
|
52
|
+
|
53
|
+
def tunnel_env
|
54
|
+
{ "SAUCE_USERNAME" => username, "SAUCE_ACCESS_KEY" => access_key }
|
50
55
|
end
|
51
56
|
|
52
57
|
def ready_file_path
|
@@ -38,9 +38,19 @@ class Blade::SauceLabsPlugin::WebDriver < EventMachine::Completion
|
|
38
38
|
def navigate_to(url)
|
39
39
|
EM.defer do
|
40
40
|
begin
|
41
|
-
driver.navigate.to
|
42
|
-
|
43
|
-
|
41
|
+
driver.navigate.to(url)
|
42
|
+
|
43
|
+
start = Time.now
|
44
|
+
|
45
|
+
EM.tick_loop do
|
46
|
+
if driver.current_url == url
|
47
|
+
yield true
|
48
|
+
:stop
|
49
|
+
elsif Time.now - start > 2
|
50
|
+
yield false
|
51
|
+
:stop
|
52
|
+
end
|
53
|
+
end
|
44
54
|
rescue
|
45
55
|
yield false
|
46
56
|
end
|
@@ -13,11 +13,12 @@ module Blade::SauceLabsPlugin
|
|
13
13
|
autoload :WebDriver, "blade/sauce_labs_plugin/web_driver"
|
14
14
|
autoload :Job, "blade/sauce_labs_plugin/job"
|
15
15
|
autoload :JobManager, "blade/sauce_labs_plugin/job_manager"
|
16
|
+
autoload :SessionManager, "blade/sauce_labs_plugin/session_manager"
|
16
17
|
|
17
18
|
def start
|
18
19
|
if Blade.config.interface == :ci
|
19
20
|
tunnel.start do
|
20
|
-
|
21
|
+
session_manager.start
|
21
22
|
job_manager.start
|
22
23
|
end
|
23
24
|
end
|
@@ -39,6 +40,10 @@ module Blade::SauceLabsPlugin
|
|
39
40
|
Client
|
40
41
|
end
|
41
42
|
|
43
|
+
def session_manager
|
44
|
+
SessionManager
|
45
|
+
end
|
46
|
+
|
42
47
|
def job_manager
|
43
48
|
JobManager
|
44
49
|
end
|
@@ -48,11 +53,11 @@ module Blade::SauceLabsPlugin
|
|
48
53
|
end
|
49
54
|
|
50
55
|
def username
|
51
|
-
|
56
|
+
ENV["SAUCE_USERNAME"] || config.username
|
52
57
|
end
|
53
58
|
|
54
59
|
def access_key
|
55
|
-
|
60
|
+
ENV["SAUCE_ACCESS_KEY"] || config.access_key
|
56
61
|
end
|
57
62
|
|
58
63
|
def debug(message)
|
data/support/sc-linux/bin/sc
CHANGED
Binary file
|
Binary file
|
@@ -17,7 +17,7 @@ old_library='libsauceconnect.a'
|
|
17
17
|
inherited_linker_flags=' -pthread'
|
18
18
|
|
19
19
|
# Libraries that this one depends upon.
|
20
|
-
dependency_libs=' -L/build/build/Linux/openssl/lib -L/build/curl/ares /build/build/sc-build-
|
20
|
+
dependency_libs=' -L/build/build/Linux/openssl/lib -L/build/c-ares/.libs -L/home/travis/build/saucelabs/libsauceconnect/curl/ares /build/build/sc-build-2396/lib/libevent.la /build/build/sc-build-2396/lib/libevent_openssl.la /build/build/sc-build-2396/lib/libcares.la /build/build/sc-build-2396/lib/libcurl.la /build/build/sc-build-2396/lib/libcares.la -lz -lrt /build/build/sc-build-2396/lib/libunwind.la -lc -lgcc -lssl -lcrypto -ldl'
|
21
21
|
|
22
22
|
# Names of additional weak libraries provided by this library
|
23
23
|
weak_library_names=''
|
@@ -38,4 +38,4 @@ dlopen=''
|
|
38
38
|
dlpreopen=''
|
39
39
|
|
40
40
|
# Directory that this library needs to be installed in:
|
41
|
-
libdir='/build/build/sc-build-
|
41
|
+
libdir='/build/build/sc-build-2396/lib'
|
data/support/sc-osx/bin/sc
CHANGED
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
@@ -17,7 +17,7 @@ old_library='libsauceconnect.a'
|
|
17
17
|
inherited_linker_flags=' -framework CoreFoundation -framework Security'
|
18
18
|
|
19
19
|
# Libraries that this one depends upon.
|
20
|
-
dependency_libs=' -L/Users/travis/build/saucelabs/libsauceconnect/build/Darwin/openssl/lib -L/Users/travis/build/saucelabs/libsauceconnect/curl/ares /Users/travis/build/saucelabs/libsauceconnect/build/sc-build-
|
20
|
+
dependency_libs=' -L/Users/travis/build/saucelabs/libsauceconnect/build/Darwin/openssl/lib -L/Users/travis/build/saucelabs/libsauceconnect/c-ares/.libs -L/Users/travis/build/saucelabs/libsauceconnect/curl/ares /Users/travis/build/saucelabs/libsauceconnect/build/sc-build-2399/lib/libevent.la /Users/travis/build/saucelabs/libsauceconnect/build/sc-build-2399/lib/libevent_openssl.la /Users/travis/build/saucelabs/libsauceconnect/build/sc-build-2399/lib/libcares.la /Users/travis/build/saucelabs/libsauceconnect/build/sc-build-2399/lib/libcurl.la /Users/travis/build/saucelabs/libsauceconnect/build/sc-build-2399/lib/libcares.la -lz -lssl -lcrypto -ldl'
|
21
21
|
|
22
22
|
# Names of additional weak libraries provided by this library
|
23
23
|
weak_library_names=''
|
@@ -38,4 +38,4 @@ dlopen=''
|
|
38
38
|
dlpreopen=''
|
39
39
|
|
40
40
|
# Directory that this library needs to be installed in:
|
41
|
-
libdir='/Users/travis/build/saucelabs/libsauceconnect/build/sc-build-
|
41
|
+
libdir='/Users/travis/build/saucelabs/libsauceconnect/build/sc-build-2399/lib'
|
data/support/sc-osx/license.html
CHANGED
File without changes
|
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.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Javan Makhmali
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04
|
11
|
+
date: 2016-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -123,12 +123,14 @@ files:
|
|
123
123
|
- bin/console
|
124
124
|
- bin/rake
|
125
125
|
- bin/setup
|
126
|
+
- bin/update_sc
|
126
127
|
- blade-sauce_labs_plugin.gemspec
|
127
128
|
- lib/blade/sauce_labs_plugin.rb
|
128
129
|
- lib/blade/sauce_labs_plugin/cli.rb
|
129
130
|
- lib/blade/sauce_labs_plugin/client.rb
|
130
131
|
- lib/blade/sauce_labs_plugin/job.rb
|
131
132
|
- lib/blade/sauce_labs_plugin/job_manager.rb
|
133
|
+
- lib/blade/sauce_labs_plugin/session_manager.rb
|
132
134
|
- lib/blade/sauce_labs_plugin/tunnel.rb
|
133
135
|
- lib/blade/sauce_labs_plugin/version.rb
|
134
136
|
- lib/blade/sauce_labs_plugin/web_driver.rb
|