browsermob-proxy 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e808535e52ce4cd5ddce8c18fe12c5a20e894be1
4
- data.tar.gz: f855084dea71862621514fc59a3ec563d82082a0
3
+ metadata.gz: 12560fbaf3be7cee85565cdafc44429b393a3ca6
4
+ data.tar.gz: 2261e5b2be1871c539351af9b4cbd6a3beaa6591
5
5
  SHA512:
6
- metadata.gz: baf0f7f29b3d8956778d9fd78f253468ff98ff57388fb63cf56c47bbe820a91a35848af43eef5ccdea65714f706035c2e7c98e37c56092056e1988c495b47f3f
7
- data.tar.gz: f6461f9495e7288a82b07d0ab1b781bfb9a6af646c0dde04c78a0241ce1dc59a0b8b218e670d231e4464cb3a5567b91fce3abec8d366ea972baae5ef25726a5a
6
+ metadata.gz: 45fbe33909820112dc59664407358a01ad7b7600fe25558ff8db3623ca4beb3c3a003c85aacdbb873376c64e05235621c267fd6361fdf3f3c4addd88079a773b
7
+ data.tar.gz: 3d84b98806736425abefaebaf11e2805a80d4e02dff4aaa4c906b6395c5b6db457fba722e1fe2cba8b945d1f7f80fb7514a551e2f60556d46c7cfe9fa47892b0
data/.gitignore CHANGED
@@ -2,4 +2,5 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
- .ruby-version
5
+ .ruby-version
6
+ .ruby-gemset
data/.travis.yml CHANGED
@@ -3,9 +3,9 @@ rvm:
3
3
  - 2.0.0
4
4
  before_script:
5
5
  - sudo apt-get install -y unzip
6
- - curl -k -L -O https://s3-us-west-1.amazonaws.com/lightbody-bmp/browsermob-proxy-2.0-beta-8-bin.zip
7
- - unzip browsermob-proxy-2.0-beta-8-bin.zip
8
- - export BROWSERMOB_PROXY_HOME=`pwd`/browsermob-proxy-2.0-beta-8
6
+ - curl -k -L -O https://s3-us-west-1.amazonaws.com/lightbody-bmp/browsermob-proxy-2.0-beta-9-bin.zip
7
+ - unzip browsermob-proxy-2.0-beta-9-bin.zip
8
+ - export BROWSERMOB_PROXY_HOME=`pwd`/browsermob-proxy-2.0-beta-9
9
9
  - sudo chmod +x $BROWSERMOB_PROXY_HOME/bin/browsermob-proxy
10
10
  - sh -e /etc/init.d/xvfb start
11
11
  - export DISPLAY=:99
data/README.md CHANGED
@@ -38,7 +38,7 @@ driver.quit
38
38
 
39
39
  With event listener:
40
40
 
41
- ``` ruby
41
+ ```ruby
42
42
  require 'selenium/webdriver'
43
43
  require 'browsermob/proxy'
44
44
  require 'browsermob/proxy/webdriver_listener'
@@ -65,7 +65,7 @@ The HAR gem includes a HAR viewer. After running the code above, you can view th
65
65
  See also
66
66
  --------
67
67
 
68
- * http://proxy.browsermob.com/
68
+ * http://bmp.lightbody.net/
69
69
  * https://github.com/lightbody/browsermob-proxy
70
70
 
71
71
  Note on Patches/Pull Requests
@@ -93,11 +93,19 @@ module BrowserMob
93
93
  @resource['whitelist'].put :regex => regex, :status => status_code
94
94
  end
95
95
 
96
+ def clear_whitelist
97
+ @resource['whitelist'].delete
98
+ end
99
+
96
100
  def blacklist(regexp, status_code)
97
101
  regex = Regexp === regexp ? regexp.source : regexp.to_s
98
102
  @resource['blacklist'].put :regex => regex, :status => status_code
99
103
  end
100
104
 
105
+ def clear_blacklist
106
+ @resource['blacklist'].delete
107
+ end
108
+
101
109
  def header(hash)
102
110
  @resource['headers'].post hash.to_json, :content_type => "application/json"
103
111
  end
@@ -108,6 +116,38 @@ module BrowserMob
108
116
  @resource["auth/basic/#{domain}"].post data.to_json, :content_type => "application/json"
109
117
  end
110
118
 
119
+ #
120
+ # Specify timeouts that will be used by a proxy
121
+ # (see README of browsermob-proxy itself for more info about what they mean)
122
+ #
123
+ # @param timeouts [Hash] options that specify desired timeouts (in seconds)
124
+ # @option timeouts [Numeric] :request request timeout
125
+ # @option timeouts [Numeric] :read read timeout
126
+ # @option timeouts [Numeric] :connection connection timeout
127
+ # @option timeouts [Numeric] :dns_cache dns cache timeout
128
+ #
129
+
130
+ TIMEOUTS = {
131
+ request: :requestTimeout,
132
+ read: :readTimeout,
133
+ connection: :connectionTimeout,
134
+ dns_cache: :dnsCacheTimeout
135
+ }
136
+
137
+ def timeouts(timeouts = {})
138
+ params = {}
139
+
140
+ timeouts.each do |key, value|
141
+ unless TIMEOUTS.member?(key)
142
+ raise ArgumentError, "invalid key: #{key.inspect}, should belong to: #{TIMEOUTS.keys.inspect}"
143
+ end
144
+
145
+ params[TIMEOUTS[key]] = (value * 1000).to_i
146
+ end
147
+
148
+ @resource['timeout'].put params
149
+ end
150
+
111
151
  #
112
152
  # Override normal DNS lookups (remap the given hosts with the associated IP address).
113
153
  #
@@ -1,5 +1,5 @@
1
1
  module BrowserMob
2
2
  module Proxy
3
- VERSION = "0.1.4"
3
+ VERSION = "0.1.5"
4
4
  end
5
5
  end
@@ -86,6 +86,15 @@ describe "Proxy + WebDriver" do
86
86
  driver.get url_for('2.html')
87
87
  proxy.har.entries.first.response.status.should == 404
88
88
  end
89
+
90
+ it "can be cleared" do
91
+ proxy.new_har('whitelist')
92
+ proxy.whitelist('foo\.bar\.com', 404)
93
+
94
+ proxy.clear_whitelist
95
+ driver.get url_for('2.html')
96
+ proxy.har.entries.first.response.status.should_not == 404
97
+ end
89
98
  end
90
99
 
91
100
  describe 'blacklist' do
@@ -105,6 +114,24 @@ describe "Proxy + WebDriver" do
105
114
 
106
115
  wait.until { driver.title == '2' }
107
116
  end
117
+
118
+ it "can be cleared" do
119
+ proxy.new_har('blacklist')
120
+
121
+ dest = url_for('1.html')
122
+ proxy.blacklist(Regexp.quote(dest), 404)
123
+
124
+ proxy.clear_blacklist
125
+ driver.get dest
126
+
127
+ proxy.har.entries.first.response.status.should_not == 404
128
+ end
129
+ end
130
+
131
+ it 'should set timeouts' do
132
+ proxy.timeouts(read: 0.001)
133
+ driver.get url_for('slow')
134
+ wait.until { driver.title == 'Problem loading page' } # This title appears in Firefox
108
135
  end
109
136
 
110
137
  it "should set headers" do
data/spec/spec_helper.rb CHANGED
@@ -9,7 +9,7 @@ module BrowserMob
9
9
  module Proxy
10
10
  module SpecHelper
11
11
  def self.httpd
12
- @httpd ||= HttpServer.new(Rack::File.new(fixture_dir))
12
+ @httpd ||= HttpServer.new(SpecApp.new(Rack::File.new(fixture_dir)))
13
13
  end
14
14
 
15
15
  def self.fixture_dir
@@ -68,6 +68,22 @@ module BrowserMob
68
68
  end
69
69
  end
70
70
 
71
+ class SpecApp
72
+ def initialize(app)
73
+ @app = app
74
+ end
75
+
76
+ def call(env)
77
+ case env['REQUEST_PATH']
78
+ when '/slow'
79
+ sleep 0.1
80
+ [200, {}, []]
81
+ else
82
+ @app.call(env)
83
+ end
84
+ end
85
+
86
+ end
71
87
  end
72
88
  end
73
89
  end
@@ -18,7 +18,8 @@ module BrowserMob
18
18
  "limit" => double("resource[limit]"),
19
19
  "headers" => double("resource[headers]"),
20
20
  "auth/basic/#{DOMAIN}" => double("resource[auth/basic/#{DOMAIN}]"),
21
- "hosts" => double("resource[hosts]")
21
+ "hosts" => double("resource[hosts]"),
22
+ "timeout" => double("resource[timeout]")
22
23
  }.each do |path, mock|
23
24
  resource.stub(:[]).with(path).and_return(mock)
24
25
  end
@@ -120,6 +121,12 @@ module BrowserMob
120
121
  client.blacklist(%r[http://example.com], 401)
121
122
  end
122
123
 
124
+ it "clears the blacklist" do
125
+ resource['blacklist'].should_receive(:delete)
126
+
127
+ client.clear_blacklist
128
+ end
129
+
123
130
  describe 'whitelist' do
124
131
  it "supports a string" do
125
132
  resource['whitelist'].should_receive(:put).
@@ -141,6 +148,12 @@ module BrowserMob
141
148
 
142
149
  client.whitelist([%r{http://example\.com/1/.+}, 'http://example\.com/2/.+'], 401)
143
150
  end
151
+
152
+ it "clears the whitelist" do
153
+ resource['whitelist'].should_receive(:delete)
154
+
155
+ client.clear_whitelist
156
+ end
144
157
  end
145
158
 
146
159
  it "sets the :downstream_kbps limit" do
@@ -189,6 +202,28 @@ module BrowserMob
189
202
  client.basic_authentication(DOMAIN, user, password)
190
203
  end
191
204
 
205
+ describe 'timeouts' do
206
+ it 'supports valid options' do
207
+ resource['timeout'].should_receive(:put).with(
208
+ :requestTimeout => 1,
209
+ :readTimeout => 2000,
210
+ :connectionTimeout => 3000,
211
+ :dnsCacheTimeout => 6_000_000
212
+ )
213
+
214
+ client.timeouts(
215
+ :request => 0.001,
216
+ :read => 2,
217
+ :connection => 3,
218
+ :dns_cache => 6000
219
+ )
220
+ end
221
+
222
+ it 'raises ArgumentError when invalid options are passed' do
223
+ expect { client.timeouts(:invalid => 2) }.to raise_error(ArgumentError, "invalid key: :invalid, should belong to: [:request, :read, :connection, :dns_cache]")
224
+ end
225
+ end
226
+
192
227
  it 'sets mapped dns hosts' do
193
228
  resource['hosts'].should_receive(:post).with(%({"#{DOMAIN}":"1.2.3.4"}),
194
229
  :content_type => "application/json")
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.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - jari.bakken
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-09 00:00:00.000000000 Z
11
+ date: 2013-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
186
  version: '0'
187
187
  requirements: []
188
188
  rubyforge_project: browsermob-proxy-rb
189
- rubygems_version: 2.1.10
189
+ rubygems_version: 2.1.9
190
190
  signing_key:
191
191
  specification_version: 4
192
192
  summary: Ruby client for the BrowserMob Proxy REST API
@@ -201,4 +201,3 @@ test_files:
201
201
  - spec/spec_helper.rb
202
202
  - spec/unit/client_spec.rb
203
203
  - spec/unit/webdriver_listener_spec.rb
204
- has_rdoc: