browsermob-proxy 0.1.8.rc1 → 0.1.8

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: 2bdd2b3507ced188063a1a939bafb7b9793ad19d
4
- data.tar.gz: 169eec559c1dcb96da3a1dbcf8b72849dc26b176
3
+ metadata.gz: d7c5eb8a3141707dbe6e94473f0332074603abf0
4
+ data.tar.gz: fa973c10a15c6ba4eb50314387244b1e0f83535a
5
5
  SHA512:
6
- metadata.gz: 2dd5837ba90f1d3e6ed484e1e725700892df163d16c670805d8aa3486bda7b5fe7ec562bcefdb9dfef98fde45297c8bad2572c621112106a337da4b17dad9408
7
- data.tar.gz: fcaaf1b49b3d60826acd54a042c93e9f9e49328124ed4fa29758318cc5b26eacc14d62c5bc4fc267ced948a76adeccdb8e475fb6b9277f5bf59d11448a80430c
6
+ metadata.gz: fe0a416c7a286bfba23f0ede933f37b13b6c279af029496015fb03f9bec85290a89f88773f0f890849619d31d437932923de9ff333cc96c685c8c44039f92ccd
7
+ data.tar.gz: 744b35697c60c51e821f834c7c32717cd60acdcc367a21c186bc9b3fb4b11ea11aa4cd899259930bd5eecc9fd598b7eca2fe59baae0090db0834e264f58e87cd
data/README.md CHANGED
@@ -15,7 +15,7 @@ Manually:
15
15
  require 'selenium/webdriver'
16
16
  require 'browsermob/proxy'
17
17
 
18
- server = BrowserMob::Proxy::Server.new("/path/to/download/browsermob-proxy") #=> #<BrowserMob::Proxy::Server:0x000001022c6ea8 ...>
18
+ server = BrowserMob::Proxy::Server.new("/path/to/downloads/browsermob-proxy/bin/browsermob-proxy") #=> #<BrowserMob::Proxy::Server:0x000001022c6ea8 ...>
19
19
  server.start
20
20
 
21
21
  proxy = server.create_proxy #=> #<BrowserMob::Proxy::Client:0x0000010224bdc0 ...>
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.rubyforge_project = "browsermob-proxy-rb"
17
17
 
18
18
  s.add_runtime_dependency "rest-client"
19
- s.add_runtime_dependency "childprocess"
19
+ s.add_runtime_dependency "childprocess", "~> 0.5"
20
20
  s.add_runtime_dependency "multi_json", "~> 1.0"
21
21
  s.add_runtime_dependency "har"
22
22
 
@@ -7,25 +7,31 @@ module BrowserMob
7
7
  class Server
8
8
  attr_reader :port
9
9
 
10
- def initialize(path, opts = {})
11
- unless File.exist?(path)
12
- raise Errno::ENOENT, path
13
- end
10
+ #
11
+ # Create a new server instance
12
+ #
13
+ # @param [String] path Path to the BrowserMob Proxy server executable
14
+ # @param [Hash] opts options to create the server with
15
+ # @option opts [Integer] port What port to start the server on
16
+ # @option opts [Boolean] log Show server output (server inherits stdout/stderr)
17
+ # @option opts [Integer] timeout Seconds to wait for server to launch before timing out.
18
+ #
14
19
 
15
- unless File.executable?(path)
16
- raise Errno::EACCES, "not executable: #{path}"
17
- end
20
+ def initialize(path, opts = {})
21
+ assert_executable path
18
22
 
19
- @path = path
20
- @port = Integer(opts[:port] || 8080)
23
+ @path = path
24
+ @port = Integer(opts[:port] || 8080)
25
+ @timeout = Integer(opts[:timeout] || 10)
26
+ @log = !!opts[:log]
21
27
 
22
- @process = ChildProcess.new(path, "--port", port.to_s)
23
- @process.io.inherit! if opts[:log]
28
+ @process = create_process
24
29
  end
25
30
 
26
31
  def start
27
32
  @process.start
28
- sleep 0.1 until listening? && initialized?
33
+
34
+ wait_for_startup
29
35
 
30
36
  pid = Process.pid
31
37
  at_exit { stop if Process.pid == pid }
@@ -47,6 +53,28 @@ module BrowserMob
47
53
 
48
54
  private
49
55
 
56
+ def create_process
57
+ process = ChildProcess.new(@path, "--port", @port.to_s)
58
+ process.leader = true
59
+
60
+ process.io.inherit! if @log
61
+
62
+ process
63
+ end
64
+
65
+ def wait_for_startup
66
+ end_time = Time.now + @timeout
67
+
68
+ sleep 0.1 until (listening? && initialized?) || Time.now > end_time || !@process.alive?
69
+
70
+ if Time.now > end_time
71
+ raise TimeoutError, "timed out waiting for the server to start (rerun with :log => true to see process output)"
72
+ end
73
+
74
+ unless @process.alive?
75
+ raise ServerDiedError, "unable to launch the server (rerun with :log => true to see process output)"
76
+ end
77
+ end
50
78
 
51
79
  def listening?
52
80
  TCPSocket.new("127.0.0.1", port).close
@@ -61,7 +89,23 @@ module BrowserMob
61
89
  rescue RestClient::Exception
62
90
  false
63
91
  end
64
- end # Server
65
92
 
93
+ def assert_executable(path)
94
+ unless File.exist?(path)
95
+ raise Errno::ENOENT, path
96
+ end
97
+
98
+ unless File.executable?(path)
99
+ raise Errno::EACCES, "not executable: #{path}"
100
+ end
101
+ end
102
+
103
+ class TimeoutError < StandardError
104
+ end
105
+
106
+ class ServerDiedError < StandardError
107
+ end
108
+
109
+ end # Server
66
110
  end # Proxy
67
111
  end # BrowserMob
@@ -1,5 +1,5 @@
1
1
  module BrowserMob
2
2
  module Proxy
3
- VERSION = "0.1.8.rc1"
3
+ VERSION = "0.1.8"
4
4
  end
5
5
  end
@@ -105,7 +105,9 @@ describe "Proxy + WebDriver" do
105
105
  proxy.blacklist(Regexp.quote(dest), 404)
106
106
  driver.get dest
107
107
 
108
- proxy.har.entries.first.response.status.should == 404
108
+ entry = proxy.har.entries.find { |e| e.request.url == dest }
109
+ entry.should_not be_nil
110
+ entry.response.status.should == 404
109
111
  end
110
112
 
111
113
  it "allows access to urls outside blacklist" do
@@ -124,7 +126,9 @@ describe "Proxy + WebDriver" do
124
126
  proxy.clear_blacklist
125
127
  driver.get dest
126
128
 
127
- proxy.har.entries.first.response.status.should_not == 404
129
+ entry = proxy.har.entries.find { |e| e.request.url == dest }
130
+ entry.should_not be_nil
131
+ entry.response.status.should_not == 404
128
132
  end
129
133
  end
130
134
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: browsermob-proxy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8.rc1
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - jari.bakken
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-29 00:00:00.000000000 Z
11
+ date: 2014-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: childprocess
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '0.5'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '0.5'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: multi_json
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -181,9 +181,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
181
  version: '0'
182
182
  required_rubygems_version: !ruby/object:Gem::Requirement
183
183
  requirements:
184
- - - ">"
184
+ - - ">="
185
185
  - !ruby/object:Gem::Version
186
- version: 1.3.1
186
+ version: '0'
187
187
  requirements: []
188
188
  rubyforge_project: browsermob-proxy-rb
189
189
  rubygems_version: 2.2.0