Skip to content

Commit 80580cf

Browse files
committed
Merge pull request #24 from sharethrough/master
Add support for rewrite rules
2 parents a5ed649 + 0d09390 commit 80580cf

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

lib/browsermob/proxy/client.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,15 @@ def clear_blacklist
105105
@resource['blacklist'].delete
106106
end
107107

108+
def rewrite(match_regex, replace)
109+
regex = Regexp === match_regex ? match_regex.source : match_regex.to_s
110+
@resource['rewrite'].put :matchRegex => regex, :replace => replace
111+
end
112+
113+
def clear_rewrites
114+
@resource['rewrite'].delete
115+
end
116+
108117
def header(hash)
109118
@resource['headers'].post hash.to_json, :content_type => "application/json"
110119
end

spec/e2e/selenium_spec.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,29 @@
128128
end
129129
end
130130

131+
describe 'rewrite rules' do
132+
133+
let(:uri) { URI.parse url_for('1.html') }
134+
135+
before do
136+
proxy.rewrite(%r{1\.html}, '2.html')
137+
end
138+
139+
it 'fetches the rewritten url' do
140+
driver.get uri
141+
142+
wait.until { driver.title == '2' }
143+
end
144+
145+
it 'can be cleared' do
146+
proxy.clear_rewrites
147+
driver.get uri
148+
149+
wait.until { driver.title == '1' }
150+
end
151+
152+
end
153+
131154
it 'should set timeouts' do
132155
proxy.timeouts(read: 0.001)
133156
driver.get url_for('slow')

spec/unit/client_spec.rb

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ module Proxy
1919
"headers" => double("resource[headers]"),
2020
"auth/basic/#{DOMAIN}" => double("resource[auth/basic/#{DOMAIN}]"),
2121
"hosts" => double("resource[hosts]"),
22-
"timeout" => double("resource[timeout]")
22+
"timeout" => double("resource[timeout]"),
23+
"rewrite" => double("resource[rewrite]")
2324
}.each do |path, mock|
2425
resource.stub(:[]).with(path).and_return(mock)
2526
end
@@ -231,6 +232,34 @@ module Proxy
231232
client.remap_dns_hosts(DOMAIN => '1.2.3.4')
232233
end
233234

235+
describe 'rewrite rules' do
236+
237+
context 'when using a regular expression' do
238+
it 'sets a rewrite rule' do
239+
resource['rewrite'].should_receive(:put).
240+
with(:matchRegex => 'old\.com', :replace => 'new.com')
241+
242+
client.rewrite('old\.com', 'new.com')
243+
end
244+
end
245+
246+
context 'when using a string' do
247+
it 'sets a rewrite rule' do
248+
resource['rewrite'].should_receive(:put).
249+
with(:matchRegex => 'old\.com', :replace => 'new.com')
250+
251+
client.rewrite(%r{old\.com}, 'new.com')
252+
end
253+
end
254+
255+
it 'clears the rewrite rules' do
256+
resource['rewrite'].should_receive(:delete)
257+
258+
client.clear_rewrites
259+
end
260+
end
261+
262+
234263
context "#selenium_proxy" do
235264
it "defaults to HTTP proxy only" do
236265
proxy = client.selenium_proxy

0 commit comments

Comments
 (0)