proxy_tester 0.0.9 → 0.1.0

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- proxy_tester (0.0.8)
4
+ proxy_tester (0.0.10)
5
5
  activerecord (~> 4.0)
6
6
  activesupport (~> 4.0)
7
7
  addressable
data/README.md CHANGED
@@ -596,6 +596,19 @@ it 'blocks www.example.org' do
596
596
  expect(page.status_code).to eq 403
597
597
  end
598
598
  ```
599
+ * set_offline
600
+
601
+ Disable online activities issued by visit.
602
+
603
+ ```ruby
604
+ it 'does not send out requests if is offline' do
605
+ set_offline true
606
+ visit 'http://www.example.org'
607
+
608
+ expect(page).to eq "<html><head></head><body></body></html>"
609
+ end
610
+
611
+ * offline?
599
612
 
600
613
  ### Custom matchers
601
614
 
data/lib/proxy_tester.rb CHANGED
@@ -64,3 +64,4 @@ require 'proxy_tester/capybara_proxy'
64
64
  require 'proxy_tester/rspec/helper'
65
65
  require 'proxy_tester/rspec/matchers/reference_domains'
66
66
  require 'proxy_tester/rspec/matchers/have_requests_with_status_code'
67
+ require 'proxy_tester/rspec/matchers/return_proxy'
@@ -1,18 +1,19 @@
1
1
  # encoding: utf-8
2
2
  module ProxyTester
3
3
  class CapybaraProxyPac
4
+ private
4
5
 
5
- attr_accessor :client_ip, :time, :pac_file, :url, :resul
6
+ attr_reader :content
6
7
 
7
- def host
8
- @result ||= result
8
+ public
9
+
10
+ attr_accessor :client_ip, :time, :pac_file, :url, :result
9
11
 
12
+ def host
10
13
  result.proxy
11
14
  end
12
15
 
13
16
  def port
14
- @result ||= result
15
-
16
17
  result.proxy_port
17
18
  end
18
19
 
@@ -21,29 +22,33 @@ module ProxyTester
21
22
  end
22
23
 
23
24
  def direct?
24
- @result ||= result
25
-
26
25
  result.request_type == 'DIRECT'
27
26
  end
28
27
 
28
+ def verbatim
29
+ result.verbatim
30
+ end
31
+
29
32
  def pac_file=(source)
33
+ @pac_file = source
34
+
30
35
  uri = Addressable::URI.heuristic_parse(source)
31
36
 
32
37
  if uri.host.blank?
33
- @pac_file = File.read(source)
38
+ @content = File.read(source)
34
39
  else
35
- @pac_file = open(uri, { proxy: false })
40
+ @content = open(uri, { proxy: false })
36
41
  end
37
42
 
38
- @pac_file
43
+ @content
39
44
  rescue Errno::ENOENT
40
- raise Exceptions::PacFileNotFound, JSON.dump(file: pac_file)
45
+ raise Exceptions::PacFileNotFound, JSON.dump(file: source)
41
46
  end
42
47
 
43
48
  private
44
49
 
45
50
  def result
46
- return PacResult.new if pac_file.blank?
51
+ return PacResult.new if content.blank?
47
52
 
48
53
  env_hash = {}
49
54
  env_hash[:client_ip] = client_ip if client_ip
@@ -51,7 +56,7 @@ module ProxyTester
51
56
 
52
57
  parser = ProxyPacRb::Parser.new(ProxyPacRb::Environment.new(env_hash))
53
58
 
54
- file = parser.source(pac_file)
59
+ file = parser.source(content)
55
60
  result = PacResult.new(file.find(url))
56
61
 
57
62
  raise Exceptions::PacResultResult, JSON.dump(file: pac_file, result: result) if result.blank?
@@ -4,12 +4,13 @@ module ProxyTester
4
4
 
5
5
  attr_reader :proxy, :proxy_port, :request_type
6
6
 
7
- def initialize(verbatim_content = nil)
7
+ def initialize(verbatim = '')
8
+ @verbatim = verbatim
8
9
 
9
- if verbatim_content.blank?
10
+ if verbatim.blank?
10
11
  parsed_content = {}
11
12
  else
12
- parsed_content = parse(verbatim_content) || {}
13
+ parsed_content = parse(verbatim) || {}
13
14
  end
14
15
 
15
16
  @proxy = parsed_content[:proxy]
@@ -17,6 +18,10 @@ module ProxyTester
17
18
  @request_type = parsed_content[:request_type]
18
19
  end
19
20
 
21
+ def verbatim
22
+ @verbatim.to_s
23
+ end
24
+
20
25
  private
21
26
 
22
27
  def parse(string)
@@ -12,12 +12,24 @@ module ProxyTester
12
12
  end
13
13
  end
14
14
 
15
+ def offline
16
+ @__offline ||= false
17
+ end
18
+
19
+ def offline=(status)
20
+ if status == true
21
+ @__offline = true
22
+ else
23
+ @__offline = false
24
+ end
25
+ end
26
+
15
27
  def proxy
16
- @__proxy
28
+ @__proxy ||= ProxyTester::CapybaraProxy.new
17
29
  end
18
30
 
19
31
  def proxy_pac
20
- @__proxy_pac
32
+ @__proxy_pac ||= ProxyTester::CapybaraProxyPac.new
21
33
  end
22
34
 
23
35
  def keep_report_directories
@@ -44,9 +56,6 @@ module ProxyTester
44
56
  end
45
57
 
46
58
  def visit(url)
47
- @__proxy ||= ProxyTester::CapybaraProxy.new
48
- @__proxy_pac ||= ProxyTester::CapybaraProxyPac.new
49
-
50
59
  proxy_pac.url = url
51
60
 
52
61
  if !proxy_pac.blank? and !proxy_pac.direct?
@@ -58,6 +67,8 @@ module ProxyTester
58
67
  use_driver proxy
59
68
  use_user_agent 'Mozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0'
60
69
 
70
+ return if offline?
71
+
61
72
  begin
62
73
  super(url)
63
74
  rescue ::Capybara::Poltergeist::TimeoutError
@@ -67,8 +78,6 @@ module ProxyTester
67
78
  end
68
79
 
69
80
  def use_user(name, options = nil)
70
- @__proxy ||= ProxyTester::CapybaraProxy.new
71
-
72
81
  if name == :ask
73
82
  user_name = HighLine.new.ask('Please enter username: ')
74
83
  user_password = HighLine.new.ask('Please enter user password: ') { |q| q.echo = '*' }
@@ -93,21 +102,14 @@ module ProxyTester
93
102
  end
94
103
 
95
104
  def use_client_ip(ip)
96
- @__proxy_pac ||= ProxyTester::CapybaraProxyPac.new
97
-
98
105
  proxy_pac.client_ip = ip
99
106
  end
100
107
 
101
108
  def use_time(time)
102
- @__proxy_pac ||= ProxyTester::CapybaraProxyPac.new
103
-
104
109
  proxy_pac.time = time
105
110
  end
106
111
 
107
112
  def use_proxy(*args)
108
- @__proxy ||= ProxyTester::CapybaraProxy.new
109
- @__proxy_pac ||= ProxyTester::CapybaraProxyPac.new
110
-
111
113
  if args.first.kind_of? Symbol
112
114
  case args.first
113
115
  when :host
@@ -133,6 +135,16 @@ module ProxyTester
133
135
  ::Capybara.default_wait_time = old_timeout
134
136
  end
135
137
 
138
+ def offline?
139
+ return true if offline == true
140
+
141
+ false
142
+ end
143
+
144
+ def set_offline(status)
145
+ self.offline = status
146
+ end
147
+
136
148
  private
137
149
 
138
150
  def use_driver(proxy)
@@ -216,10 +228,6 @@ end
216
228
  RSpec.configure do |c|
217
229
  c.include ProxyTester::SpecHelper::Capybara
218
230
 
219
- c.before :each do
220
- @__proxy = ProxyTester::CapybaraProxy.new
221
- end
222
-
223
231
  c.before :all do
224
232
  cleanup_reports
225
233
  end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ RSpec::Matchers.define :return_proxy do |expected|
3
+ match do |actual|
4
+ actual.verbatim == expected
5
+ end
6
+
7
+ failure_message_for_should do |actual|
8
+ "expected that \"#{actual.pac_file}\" returns \"#{expected}\", but it returns \"#{actual.verbatim}\" as proxy."
9
+ end
10
+
11
+ failure_message_for_should_not do |actual|
12
+ "expected that \"#{actual.pac_file}\" not returns \"#{expected}\", but it returns \"#{actual.verbatim}\" as proxy."
13
+ end
14
+
15
+ description do
16
+ "to return proxy \"#{expected}\"."
17
+ end
18
+ end
@@ -1,4 +1,4 @@
1
1
  #main ProxyTester
2
2
  module ProxyTester
3
- VERSION = '0.0.9'
3
+ VERSION = '0.1.0'
4
4
  end
@@ -39,4 +39,21 @@ describe CapybaraProxyPac do
39
39
  expect(pac.port).to eq('3128')
40
40
  end
41
41
  end
42
+
43
+ context '#verbatim' do
44
+ it 'verbatim output' do
45
+ file = create_file 'proxy.pac', valid_pac_file1
46
+
47
+ pac = CapybaraProxyPac.new
48
+ pac.pac_file = file
49
+ pac.url = 'http://www.heise.de'
50
+
51
+ expect(pac.verbatim).to eq('PROXY localhost:3128')
52
+ end
53
+
54
+ it 'handles not set file' do
55
+ pac = CapybaraProxyPac.new
56
+ expect { pac.verbatim }.not_to raise_error
57
+ end
58
+ end
42
59
  end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'returns proxy matcher' do
5
+ let(:valid_proxy_pac) {
6
+ <<-EOS.strip_heredoc
7
+ function FindProxyForURL(url, host) {
8
+ if (url == "http://example.com") {
9
+ return "PROXY localhost2:8080";
10
+ } else {
11
+ return "DIRECT";
12
+ }
13
+ }
14
+ EOS
15
+ }
16
+
17
+ before :each do
18
+ set_offline true
19
+ end
20
+
21
+ it 'checks return proxy string' do
22
+ file = create_file 'proxy.pac', valid_proxy_pac
23
+ use_proxy :pac, file
24
+
25
+ visit 'http://example.com'
26
+ expect(proxy_pac).to return_proxy('PROXY localhost2:8080')
27
+
28
+ visit 'http://otherdomain.com'
29
+ expect(proxy_pac).to return_proxy('DIRECT')
30
+ end
31
+
32
+ it 'checks that a proxy string is not returned' do
33
+ file = create_file 'proxy.pac', valid_proxy_pac
34
+ use_proxy :pac, file
35
+
36
+ visit 'http://example.com'
37
+ expect(proxy_pac).not_to return_proxy('DIRECT')
38
+
39
+ visit 'http://otherdomain.com'
40
+ expect(proxy_pac).not_to return_proxy('PROXY localhost2:8080')
41
+ end
42
+ end
@@ -10,6 +10,12 @@ describe PacResult do
10
10
  expect(result.request_type).to eq('PROXY')
11
11
  end
12
12
 
13
+ it 'returns verbatim' do
14
+ string = 'PROXY localhost:3128'
15
+ result = PacResult.new(string)
16
+ expect(result.verbatim).to eq(string)
17
+ end
18
+
13
19
  it 'parses pac result' do
14
20
  result = PacResult.new('DIRECT')
15
21
 
@@ -167,4 +167,12 @@ describe 'Spec helper' do
167
167
  expect(proxy.user.password).to eq('my_password')
168
168
  end
169
169
  end
170
+
171
+ context '#offline' do
172
+ it 'disable requests to website' do
173
+ set_offline true
174
+ visit 'http://www.asdfasdfasdfasdfasdfsadfsadfsdaf1231234567890123456789.de'
175
+ expect(page.source).to eq '<html><head></head><body></body></html>'
176
+ end
177
+ end
170
178
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxy_tester
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -327,6 +327,7 @@ files:
327
327
  - lib/proxy_tester/rspec/helper.rb
328
328
  - lib/proxy_tester/rspec/matchers/have_requests_with_status_code.rb
329
329
  - lib/proxy_tester/rspec/matchers/reference_domains.rb
330
+ - lib/proxy_tester/rspec/matchers/return_proxy.rb
330
331
  - lib/proxy_tester/rspec_runner.rb
331
332
  - lib/proxy_tester/template_file.rb
332
333
  - lib/proxy_tester/template_repository.rb
@@ -365,6 +366,7 @@ files:
365
366
  - spec/main_spec.rb
366
367
  - spec/matchers/have_requests_with_status_code_spec.rb
367
368
  - spec/matchers/reference_domains_spec.rb
369
+ - spec/matchers/returns_proxy_spec.rb
368
370
  - spec/pac_result_spec.rb
369
371
  - spec/remote_repository_spec.rb
370
372
  - spec/reporters/fetch_urls_spec.rb
@@ -443,6 +445,7 @@ test_files:
443
445
  - spec/main_spec.rb
444
446
  - spec/matchers/have_requests_with_status_code_spec.rb
445
447
  - spec/matchers/reference_domains_spec.rb
448
+ - spec/matchers/returns_proxy_spec.rb
446
449
  - spec/pac_result_spec.rb
447
450
  - spec/remote_repository_spec.rb
448
451
  - spec/reporters/fetch_urls_spec.rb