proxy_tester 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +22 -0
- data/.rdebugrc +7 -0
- data/.rspec +3 -0
- data/.simplecov +8 -0
- data/Gemfile +37 -0
- data/Gemfile.lock +199 -0
- data/LICENSE.txt +22 -0
- data/Procfile +1 -0
- data/README.md +582 -0
- data/Rakefile +64 -0
- data/bin/proxy_tester +11 -0
- data/db/migrate/20140314_create_environment.rb +8 -0
- data/files/config.yaml +1 -0
- data/files/example-config.erb +12 -0
- data/files/example-spec_helper.rb.erb +23 -0
- data/files/example-test_case.rb.erb +27 -0
- data/files/example-test_cases-gemfile.rb.erb +9 -0
- data/files/example-user_file.erb +4 -0
- data/lib/proxy_tester/actions/add_examples_to_test_cases_directory.rb +125 -0
- data/lib/proxy_tester/actions/clone_repository.rb +39 -0
- data/lib/proxy_tester/actions/create_directory.rb +33 -0
- data/lib/proxy_tester/actions/create_file.rb +55 -0
- data/lib/proxy_tester/actions/create_output.rb +36 -0
- data/lib/proxy_tester/actions/handle_error.rb +37 -0
- data/lib/proxy_tester/actions/initialize_application.rb +70 -0
- data/lib/proxy_tester/actions/show_config.rb +10 -0
- data/lib/proxy_tester/capybara_proxy.rb +54 -0
- data/lib/proxy_tester/capybara_proxy_pac.rb +62 -0
- data/lib/proxy_tester/cli/main.rb +59 -0
- data/lib/proxy_tester/config.rb +100 -0
- data/lib/proxy_tester/data.rb +23 -0
- data/lib/proxy_tester/database_session.rb +15 -0
- data/lib/proxy_tester/environment.rb +21 -0
- data/lib/proxy_tester/erb_generator.rb +34 -0
- data/lib/proxy_tester/error_handler.rb +107 -0
- data/lib/proxy_tester/error_messages.rb +82 -0
- data/lib/proxy_tester/exceptions.rb +53 -0
- data/lib/proxy_tester/git_file.rb +31 -0
- data/lib/proxy_tester/git_null_file.rb +32 -0
- data/lib/proxy_tester/git_repository.rb +120 -0
- data/lib/proxy_tester/handle_error.rb +37 -0
- data/lib/proxy_tester/locales/en-rails.yml +205 -0
- data/lib/proxy_tester/locales/en.yml +42 -0
- data/lib/proxy_tester/main.rb +46 -0
- data/lib/proxy_tester/models/user.rb +17 -0
- data/lib/proxy_tester/pac_result.rb +50 -0
- data/lib/proxy_tester/rspec/helper.rb +211 -0
- data/lib/proxy_tester/rspec_runner.rb +43 -0
- data/lib/proxy_tester/template_file.rb +19 -0
- data/lib/proxy_tester/template_repository.rb +22 -0
- data/lib/proxy_tester/ui_logger.rb +30 -0
- data/lib/proxy_tester/user_database.rb +24 -0
- data/lib/proxy_tester/version.rb +3 -0
- data/lib/proxy_tester.rb +54 -0
- data/proxy_tester.gemspec +34 -0
- data/script/acceptance_test +4 -0
- data/script/bootstrap +56 -0
- data/script/ci +3 -0
- data/script/console +14 -0
- data/script/release +3 -0
- data/script/test_web +22 -0
- data/script/unit_test +3 -0
- data/spec/actions/add_examples_to_test_cases_directory_spec.rb +52 -0
- data/spec/actions/clone_repository_spec.rb +83 -0
- data/spec/actions/create_directory_spec.rb +59 -0
- data/spec/actions/create_file_spec.rb +139 -0
- data/spec/actions/create_output_spec.rb +46 -0
- data/spec/actions/handle_error_spec.rb +74 -0
- data/spec/actions/initialize_application_spec.rb +40 -0
- data/spec/actions/show_config_spec.rb +22 -0
- data/spec/capybara_proxy_pac_spec.rb +42 -0
- data/spec/capybara_proxy_spec.rb +76 -0
- data/spec/config_spec.rb +86 -0
- data/spec/data_spec.rb +34 -0
- data/spec/environment_spec.rb +25 -0
- data/spec/erb_generator_spec.rb +31 -0
- data/spec/examples/proxy.pac +7 -0
- data/spec/factories.rb +8 -0
- data/spec/features/check_ssl_sites_spec.rb +8 -0
- data/spec/git_file_spec.rb +46 -0
- data/spec/git_repository_spec.rb +111 -0
- data/spec/main_spec.rb +25 -0
- data/spec/pac_result_spec.rb +20 -0
- data/spec/proxy_tester_spec_helper_spec.rb +137 -0
- data/spec/rspec_runner_spec.rb +29 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/capybara.rb +11 -0
- data/spec/support/database_cleaner.rb +14 -0
- data/spec/support/debugging.rb +3 -0
- data/spec/support/environment.rb +33 -0
- data/spec/support/example.rb +16 -0
- data/spec/support/factory_girl.rb +15 -0
- data/spec/support/filesystem.rb +19 -0
- data/spec/support/helper_features.rb +31 -0
- data/spec/support/matcher.rb +17 -0
- data/spec/support/reporting.rb +1 -0
- data/spec/support/rspec.rb +5 -0
- data/spec/support/string.rb +2 -0
- data/spec/template_file_spec.rb +25 -0
- data/spec/template_repository_spec.rb +44 -0
- data/spec/user_database_spec.rb +63 -0
- data/spec/user_spec.rb +62 -0
- metadata +398 -0
data/README.md
ADDED
@@ -0,0 +1,582 @@
|
|
1
|
+
# ProxyTester - testing with rspec for http and socks proxies
|
2
|
+
|
3
|
+
The `proxy_tester` helps you maintaining your proxy infrastructure by writing
|
4
|
+
tests which can be run automatically. It uses `rspec` in the background to make
|
5
|
+
that thing possible and adds some helper methods to make testing proxies
|
6
|
+
easier.
|
7
|
+
|
8
|
+
Today `proxy_tester` supports "HTTP"- and "SOCKS5"-Proxies.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
gem 'proxy_tester'
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
$ bundle
|
19
|
+
|
20
|
+
Or install it yourself as:
|
21
|
+
|
22
|
+
$ gem install proxy_tester
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
### Quick start
|
27
|
+
|
28
|
+
**Initialize proxy tester**
|
29
|
+
|
30
|
+
This will create all files and directories needed to run proxy tester. Thanks
|
31
|
+
to `--pre-seed` it will also add some example files to your test
|
32
|
+
infrastructure, e.g. `spec_helper`, `example_spec.rb`.
|
33
|
+
|
34
|
+
```bash
|
35
|
+
% proxy_tester init --pre-seed
|
36
|
+
```
|
37
|
+
|
38
|
+
**Modify example spec**
|
39
|
+
|
40
|
+
1. Add your proxy, e.g. `localhost:3128` to the spec
|
41
|
+
2. Add a user + password to `users.csv` and to the `example_spec.rb` if your proxy needs authentication
|
42
|
+
|
43
|
+
**Run tests**
|
44
|
+
|
45
|
+
```bash
|
46
|
+
% proxy_tester test
|
47
|
+
```
|
48
|
+
|
49
|
+
**Getting in touch with the screenshots taken during test**
|
50
|
+
|
51
|
+
```bash
|
52
|
+
# Please choose your preferred viewer, e.g. feh and the correct date/time for your test
|
53
|
+
% feh ~/.local/share/proxy_tester/reports.d/2014-03-19_17:22:00/*.png
|
54
|
+
```
|
55
|
+
|
56
|
+
### Getting started (WIP)
|
57
|
+
|
58
|
+
**Getting help**
|
59
|
+
|
60
|
+
```bash
|
61
|
+
% proxy_tester help
|
62
|
+
% proxy_tester help <cmd>
|
63
|
+
```
|
64
|
+
|
65
|
+
**Prepare a configuration file for proxy_tester**
|
66
|
+
|
67
|
+
For more details please see the chapter [Writing Configuration File](#write_config) for
|
68
|
+
that.
|
69
|
+
|
70
|
+
**Initialize proxy tester**
|
71
|
+
|
72
|
+
This will create all files and directories needed to run proxy tester.
|
73
|
+
|
74
|
+
```bash
|
75
|
+
% proxy_tester init
|
76
|
+
```
|
77
|
+
|
78
|
+
By default it creates the following directories/files:
|
79
|
+
|
80
|
+
* `$HOME/.local/share/proxy_tester`
|
81
|
+
* `$HOME/.local/share/proxy_tester/reports.d`
|
82
|
+
* `$HOME/.config/proxy_tester`
|
83
|
+
* `$HOME/.config/proxy_tester/testcases.d`
|
84
|
+
* `$HOME/.config/proxy_tester/config.yaml`
|
85
|
+
* `$HOME/.config/proxy_tester/users.csv`
|
86
|
+
|
87
|
+
`proxy_tester` supports different options for init
|
88
|
+
|
89
|
+
|
90
|
+
```bash
|
91
|
+
% proxy_tester help init
|
92
|
+
|
93
|
+
# Usage:
|
94
|
+
# proxy_tester init
|
95
|
+
#
|
96
|
+
# Options:
|
97
|
+
# [--force] # Overwrite existing files?
|
98
|
+
# [--pre-seed] # Add examples to test cases directory
|
99
|
+
# [--test-cases-directory=TEST_CASES_DIRECTORY] # Directory with test cases
|
100
|
+
# [--user-file=USER_FILE] # Path to user file
|
101
|
+
# [--create-config-file] # Create config file
|
102
|
+
# # Default: true
|
103
|
+
# [--create-user-file] # Create user file
|
104
|
+
# # Default: true
|
105
|
+
# [--create-test-cases-directory] # Create directory to store test cases
|
106
|
+
# # Default: true
|
107
|
+
# [--config-file=CONFIG_FILE] # Config file
|
108
|
+
# [--log-level=LOG_LEVEL] # Log level for ui logging
|
109
|
+
# [--debug-mode] # Run application in debug mode
|
110
|
+
```
|
111
|
+
|
112
|
+
**Adding users to users.csv**
|
113
|
+
|
114
|
+
If your proxy needs user authentication you can use the `use_user`-method
|
115
|
+
together with the `users.csv`. Make sure you keep the users.csv safe (and out
|
116
|
+
of a central vcs) because the passwords need to be stored in plain text.
|
117
|
+
|
118
|
+
|
119
|
+
```csv
|
120
|
+
"name","password","description"
|
121
|
+
"user1","password1","test user abc"
|
122
|
+
"user2","password2","test user efg"
|
123
|
+
```
|
124
|
+
|
125
|
+
In your spec you can refer to the users by using the following code snippet.
|
126
|
+
There is no need to write the password into the spec file. `proxy_helper` will
|
127
|
+
look it up.
|
128
|
+
|
129
|
+
```ruby
|
130
|
+
it 'blocks www.example.org' do
|
131
|
+
use_proxy 'localhost:3128'
|
132
|
+
use_user 'user1'
|
133
|
+
|
134
|
+
use_timeout(100) do
|
135
|
+
visit 'http://www.example.org'
|
136
|
+
end
|
137
|
+
|
138
|
+
expect(page).to have_content('Access forbidden')
|
139
|
+
expect(page.status_code).to eq 403
|
140
|
+
end
|
141
|
+
```
|
142
|
+
|
143
|
+
**Writing specs**
|
144
|
+
|
145
|
+
For more details please see the chapter [Writing Specs](#writing_specs) for
|
146
|
+
that.
|
147
|
+
|
148
|
+
**Run the tests**
|
149
|
+
|
150
|
+
Run the tests on commandline
|
151
|
+
|
152
|
+
```bash
|
153
|
+
% proxy_tester test
|
154
|
+
```
|
155
|
+
|
156
|
+
It supports several different options:
|
157
|
+
|
158
|
+
```bash
|
159
|
+
% proxy_tester help test
|
160
|
+
|
161
|
+
# Usage:
|
162
|
+
# proxy_tester test
|
163
|
+
#
|
164
|
+
# Options:
|
165
|
+
# [--test-cases-directory=TEST_CASES_DIRECTORY] # Directory with test cases
|
166
|
+
# [--tags=one two three] # Filter tests based on tags
|
167
|
+
# [--config-file=CONFIG_FILE] # Config file
|
168
|
+
# [--log-level=LOG_LEVEL] # Log level for ui logging
|
169
|
+
# [--debug-mode] # Run application in debug mode
|
170
|
+
#
|
171
|
+
```
|
172
|
+
|
173
|
+
If you want to limit the tests which should be run by `proxy_tester` you can
|
174
|
+
use the `--tags`-switch. Make sure you've flagged your examples correctly - see
|
175
|
+
[rspec documentation](https://www.relishapp.com/rspec/rspec-core/v/2-4/docs/command-line/tag-option)
|
176
|
+
for more about this topic.
|
177
|
+
|
178
|
+
|
179
|
+
## Writing Specs
|
180
|
+
<a name="writing_specs"></a>
|
181
|
+
|
182
|
+
### Introduction
|
183
|
+
|
184
|
+
**Recommended structure for testcases**
|
185
|
+
|
186
|
+
For my specs I use the following structure. Additionally I use `git` for
|
187
|
+
version control.
|
188
|
+
|
189
|
+
```
|
190
|
+
testcase.d
|
191
|
+
infrastructure1
|
192
|
+
infrastructure1_abc_spec.rb
|
193
|
+
infrastructure1_def_spec.rb
|
194
|
+
spec_helper.rb
|
195
|
+
support
|
196
|
+
rspec.rb
|
197
|
+
shared_examples-base.rb
|
198
|
+
[...]
|
199
|
+
```
|
200
|
+
|
201
|
+
**The spec file(s)**
|
202
|
+
|
203
|
+
I took screenshots for all my tests in an `after`-hook to be able to provide reports after
|
204
|
+
testing. For each environment, e.g. `production`, `staging`, I create a diffent
|
205
|
+
context adding a flag, e.g `:production`, for easier filterung. For each proxy
|
206
|
+
I add a context and set the subject to the proxy hostname/ip address + port.
|
207
|
+
The `it_behaves_like`-method is special because it references a shared example.
|
208
|
+
More on this can be found later.
|
209
|
+
|
210
|
+
Name: `infrastructure1_abc_spec.rb`
|
211
|
+
|
212
|
+
```ruby
|
213
|
+
# encoding: utf-8
|
214
|
+
describe 'Infrastructure XY' do
|
215
|
+
after :each do
|
216
|
+
take_screenshot
|
217
|
+
end
|
218
|
+
|
219
|
+
before :each do
|
220
|
+
use_user 'user1'
|
221
|
+
end
|
222
|
+
|
223
|
+
context 'Production', :production do
|
224
|
+
context 'proxy1' do
|
225
|
+
subject { 'proxy1.localdomain:8080' }
|
226
|
+
|
227
|
+
it_behaves_like 'a base proxy'
|
228
|
+
end
|
229
|
+
|
230
|
+
context 'proxy2' do
|
231
|
+
subject { 'proxy2.localdomain:8080' }
|
232
|
+
|
233
|
+
it_behaves_like 'a base proxy'
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
context 'Staging', :staging do
|
238
|
+
context 'proxy1-int' do
|
239
|
+
subject { 'proxy1-int.localdomain:8080' }
|
240
|
+
|
241
|
+
it_behaves_like 'a base proxy'
|
242
|
+
end
|
243
|
+
|
244
|
+
context 'proxy2-int' do
|
245
|
+
subject { 'proxy2-int.localdomain:8080' }
|
246
|
+
|
247
|
+
it_behaves_like 'a base proxy'
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
```
|
252
|
+
|
253
|
+
**The spec helper file**
|
254
|
+
|
255
|
+
In my spec helper file I load all files found in support to make shared
|
256
|
+
examples and other files available.
|
257
|
+
|
258
|
+
Name: `spec_helper.rb`
|
259
|
+
|
260
|
+
```
|
261
|
+
# encoding: utf-8
|
262
|
+
|
263
|
+
# Loading support files
|
264
|
+
Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
|
265
|
+
|
266
|
+
begin
|
267
|
+
require 'bundler'
|
268
|
+
Bundler.require :default
|
269
|
+
rescue
|
270
|
+
$stderr.puts 'Please install ruby gem "bundler" before using this spec_helper.rb in your proxy_tester-spec files.'
|
271
|
+
exit(-1)
|
272
|
+
end
|
273
|
+
|
274
|
+
# *open-uri*
|
275
|
+
# Easier use of urls in scripts
|
276
|
+
# Please see "http://www.ruby-doc.org/stdlib-2.1.1/libdoc/open-uri/rdoc/OpenURI.html" for further information
|
277
|
+
require 'open-uri'
|
278
|
+
```
|
279
|
+
|
280
|
+
**The spec configuration**
|
281
|
+
|
282
|
+
I want `rspec` to run only those examples which are flagged with `:focus`. If
|
283
|
+
there is no example with a flag `:focus`. It should run all examples. I use the
|
284
|
+
`:focus`-flag while developing a test or debugging existing tests.
|
285
|
+
|
286
|
+
Name: `rspec.rb`
|
287
|
+
|
288
|
+
```
|
289
|
+
RSpec.configure do |c|
|
290
|
+
c.filter_run_including :focus => true
|
291
|
+
c.run_all_when_everything_filtered = true
|
292
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true
|
293
|
+
end
|
294
|
+
```
|
295
|
+
|
296
|
+
**Shared examples: base**
|
297
|
+
|
298
|
+
To `DRY` my examples up I use shared examples. Please see [rspec
|
299
|
+
documentation](https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples)
|
300
|
+
for more detailed information.
|
301
|
+
|
302
|
+
Name: `shared_examples-base.rb`
|
303
|
+
|
304
|
+
```
|
305
|
+
# encoding: utf-8
|
306
|
+
require_relative 'shared_examples'
|
307
|
+
|
308
|
+
shared_examples 'a base proxy' do
|
309
|
+
before :each do
|
310
|
+
use_proxy subject
|
311
|
+
end
|
312
|
+
|
313
|
+
it 'works with http://www.example.org' do
|
314
|
+
visit 'http://www.example.org'
|
315
|
+
expect(page).to have_content('Example Domain')
|
316
|
+
expect(page.status_code).to eq 200
|
317
|
+
end
|
318
|
+
|
319
|
+
it 'blocks eicar virus' do
|
320
|
+
visit 'http://www.eicar.org/download/eicar.com'
|
321
|
+
find('div#lk_info').trigger('click')
|
322
|
+
|
323
|
+
expect(page).to have_content('Access blocked')
|
324
|
+
expect(page.status_code).to eq 403
|
325
|
+
end
|
326
|
+
end
|
327
|
+
```
|
328
|
+
|
329
|
+
### Helper methods
|
330
|
+
|
331
|
+
This gem includes all helper methods provided by
|
332
|
+
[`capybara`](https://github.com/jnicklas/capybara) and
|
333
|
+
[`poltergeist`](https://github.com/jonleighton/poltergeist) plus those listed
|
334
|
+
below. To see the most current list of available methods please look for
|
335
|
+
`lib/proxy_tester/rspec/helper.rb`.
|
336
|
+
|
337
|
+
* `runtime`
|
338
|
+
|
339
|
+
This method returns the time of `proxy_tester`-run.
|
340
|
+
|
341
|
+
```ruby
|
342
|
+
# time of run, YYYY-MM-DD_HH:mm:ss
|
343
|
+
runtime
|
344
|
+
```
|
345
|
+
|
346
|
+
* proxy
|
347
|
+
|
348
|
+
This method returns the proxy set earlier. It holds the proxy-object.
|
349
|
+
|
350
|
+
```ruby
|
351
|
+
# proxy host
|
352
|
+
proxy.host
|
353
|
+
proxy.host = 'host'
|
354
|
+
|
355
|
+
# proxy port
|
356
|
+
proxy.port
|
357
|
+
proxy.port = 3128
|
358
|
+
|
359
|
+
# proxy type :none, :http, :socks5
|
360
|
+
proxy.type
|
361
|
+
proxy.type = :none
|
362
|
+
|
363
|
+
# is blank?
|
364
|
+
proxy.blank?
|
365
|
+
```
|
366
|
+
|
367
|
+
* proxy_pac
|
368
|
+
|
369
|
+
This method returns the proxy pac set earlier. It holds the proxy_pac-object.
|
370
|
+
|
371
|
+
```ruby
|
372
|
+
# proxy host
|
373
|
+
proxy_pac.host
|
374
|
+
|
375
|
+
# proxy port
|
376
|
+
proxy_pac.port
|
377
|
+
|
378
|
+
# client ip
|
379
|
+
proxy_pac.client_ip
|
380
|
+
proxy_pac.client_ip = '127.0.0.1'
|
381
|
+
|
382
|
+
# url to proxy pac
|
383
|
+
proxy_pac.url
|
384
|
+
proxy_pac.url = 'http://www.example.org'
|
385
|
+
proxy_pac.url = 'www.example.org' # heuristic parsing via addressable
|
386
|
+
|
387
|
+
# path/url to proxy pac-file
|
388
|
+
proxy_pac.pac_file
|
389
|
+
proxy_pac.pac_file = 'http://pac.in.domain.org/proxy.pac'
|
390
|
+
proxy_pac.pac_file = '/path/to/file.pac'
|
391
|
+
|
392
|
+
# is blank? => port + host = blank
|
393
|
+
proxy_pac.blank?
|
394
|
+
|
395
|
+
# direct? => no proxy
|
396
|
+
proxy_pac.direct?
|
397
|
+
|
398
|
+
```
|
399
|
+
|
400
|
+
* cleanup_reports
|
401
|
+
|
402
|
+
The gem supports a method to create a screenshot for a visited website. To
|
403
|
+
keep the `reports.d`-directory clean, the last 5 report-directories are kept only.
|
404
|
+
|
405
|
+
```ruby
|
406
|
+
before :all do
|
407
|
+
cleanup_reports
|
408
|
+
end
|
409
|
+
```
|
410
|
+
|
411
|
+
If you want to change this, set the `@__keep_report_directories` to the needed
|
412
|
+
value in an `before(:all)`-hook.
|
413
|
+
|
414
|
+
```ruby
|
415
|
+
before :all do
|
416
|
+
# keep the last 10 report directories
|
417
|
+
@__keep_report_directories = 10
|
418
|
+
cleanup_reports
|
419
|
+
end
|
420
|
+
```
|
421
|
+
|
422
|
+
* take_screenshot
|
423
|
+
|
424
|
+
If you want to take a screenshot of a visited website, you can use
|
425
|
+
`take_screenshot`. By default all screenshots are stored in `reports.d`.
|
426
|
+
|
427
|
+
```ruby
|
428
|
+
after :each do
|
429
|
+
take_screenshot
|
430
|
+
end
|
431
|
+
```
|
432
|
+
|
433
|
+
* view_screenshot (alias: show_screenshot)
|
434
|
+
|
435
|
+
While debugging an example it might be handy to view the fetched website. This
|
436
|
+
can be done using the `view_screenshot`-helper. It opens the screenshot in your
|
437
|
+
preferred image viewer.
|
438
|
+
|
439
|
+
```ruby
|
440
|
+
context 'proxy1' do
|
441
|
+
subject { 'proxy1.localdomain:8080' }
|
442
|
+
|
443
|
+
it 'works with http://www.example.org' do
|
444
|
+
use_proxy subject
|
445
|
+
|
446
|
+
visit 'http://www.example.org'
|
447
|
+
|
448
|
+
view_screenshot
|
449
|
+
|
450
|
+
expect(page).to have_content('Example Domain')
|
451
|
+
expect(page.status_code).to eq 200
|
452
|
+
end
|
453
|
+
|
454
|
+
end
|
455
|
+
```
|
456
|
+
|
457
|
+
* use_user_agent
|
458
|
+
|
459
|
+
Set the user agent used by the driver.
|
460
|
+
|
461
|
+
```ruby
|
462
|
+
context 'proxy1' do
|
463
|
+
subject { 'proxy1.localdomain:8080' }
|
464
|
+
|
465
|
+
it 'works with http://www.example.org' do
|
466
|
+
use_proxy subject
|
467
|
+
|
468
|
+
use_user_agent 'Mozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0'
|
469
|
+
|
470
|
+
visit 'http://www.example.org'
|
471
|
+
|
472
|
+
expect(page).to have_content('Example Domain')
|
473
|
+
expect(page.status_code).to eq 200
|
474
|
+
end
|
475
|
+
end
|
476
|
+
```
|
477
|
+
|
478
|
+
* use_user
|
479
|
+
|
480
|
+
Set the user used to connect to the proxy.
|
481
|
+
|
482
|
+
|
483
|
+
```ruby
|
484
|
+
it 'blocks www.example.org for user "user1"' do
|
485
|
+
use_proxy subject
|
486
|
+
use_user 'user1'
|
487
|
+
|
488
|
+
visit 'http://www.example.org'
|
489
|
+
|
490
|
+
expect(page).to have_content('Access forbidden')
|
491
|
+
expect(page.status_code).to eq 403
|
492
|
+
end
|
493
|
+
```
|
494
|
+
|
495
|
+
* use_client_ip
|
496
|
+
|
497
|
+
Set the client ip address used during proxy pac evaluation.
|
498
|
+
|
499
|
+
```ruby
|
500
|
+
it 'blocks www.example.org' do
|
501
|
+
use_proxy :pac, 'http://localhost/proxy.pac'
|
502
|
+
use_client_ip '127.0.0.1'
|
503
|
+
|
504
|
+
visit 'http://www.example.org'
|
505
|
+
|
506
|
+
expect(page).to have_content('Access forbidden')
|
507
|
+
expect(page.status_code).to eq 403
|
508
|
+
end
|
509
|
+
```
|
510
|
+
|
511
|
+
* use_time
|
512
|
+
|
513
|
+
Set the time used during proxy pac evaluation.
|
514
|
+
|
515
|
+
```ruby
|
516
|
+
it 'blocks www.example.org' do
|
517
|
+
use_proxy :pac, 'http://localhost/proxy.pac'
|
518
|
+
use_time '2014-03-07 05:12:20'
|
519
|
+
|
520
|
+
visit 'http://www.example.org'
|
521
|
+
|
522
|
+
expect(page).to have_content('Access forbidden')
|
523
|
+
expect(page.status_code).to eq 403
|
524
|
+
end
|
525
|
+
|
526
|
+
```
|
527
|
+
|
528
|
+
* use_proxy
|
529
|
+
|
530
|
+
Set the proxy host or proxy pac used to forward the traffic.
|
531
|
+
|
532
|
+
```ruby
|
533
|
+
use_proxy :host, 'localhost:3128'
|
534
|
+
use_proxy 'localhost:3128'
|
535
|
+
use_proxy :pac, 'http://localhost/proxy.pac'
|
536
|
+
```
|
537
|
+
|
538
|
+
* use_timeout
|
539
|
+
|
540
|
+
Set the timeout in seconds for visiting a website.
|
541
|
+
|
542
|
+
```ruby
|
543
|
+
it 'blocks www.example.org' do
|
544
|
+
use_proxy 'localhost:3128'
|
545
|
+
use_time '2014-03-07 05:12:20'
|
546
|
+
|
547
|
+
use_timeout(100) do
|
548
|
+
visit 'http://www.example.org'
|
549
|
+
end
|
550
|
+
|
551
|
+
expect(page).to have_content('Access forbidden')
|
552
|
+
expect(page.status_code).to eq 403
|
553
|
+
end
|
554
|
+
```
|
555
|
+
|
556
|
+
## Writing Configuration File
|
557
|
+
<a name="write_config"></a>
|
558
|
+
|
559
|
+
The configuration file of `proxy_tester` is a simple
|
560
|
+
[yaml](http://www.yaml.org)-file. Those configuration variables are overwritten
|
561
|
+
if you choose a corresponding commandline-switch, e.g. `--config-file`-switch
|
562
|
+
for `config_file`-option. If a configuration option is not defined in config
|
563
|
+
file and not given on commandline `proxy_tester` uses default hardcoded within
|
564
|
+
the application. It supports the following variables.
|
565
|
+
|
566
|
+
```yaml
|
567
|
+
# configuration options with defaults
|
568
|
+
# $HOME = '/home/user'
|
569
|
+
:config_file: /home/user/.config/proxy_tester/config.yaml
|
570
|
+
:user_file: /home/user/.config/proxy_tester/user.csv
|
571
|
+
:test_cases_directory: /home/user/.config/proxy_tester/test_cases.d
|
572
|
+
:examples_directory: /home/user/.config/proxy_tester/test_cases.d/examples
|
573
|
+
:reports_directory: /home/user/.share/proxy_tester/reports.d
|
574
|
+
```
|
575
|
+
|
576
|
+
## Contributing
|
577
|
+
|
578
|
+
1. Fork it ( http://github.com/dg-vrnetze/proxy_tester/fork )
|
579
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
580
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
581
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
582
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
require 'fedux_org/stdlib/rake'
|
4
|
+
|
5
|
+
require 'proxy_tester/version'
|
6
|
+
|
7
|
+
def software
|
8
|
+
'proxy_tester'
|
9
|
+
end
|
10
|
+
|
11
|
+
def version
|
12
|
+
ProxyTester::VERSION
|
13
|
+
end
|
14
|
+
|
15
|
+
def root_directory
|
16
|
+
::File.expand_path('../', __FILE__)
|
17
|
+
end
|
18
|
+
|
19
|
+
def tar_file
|
20
|
+
::File.join(pkg_directory, "#{software}-#{version}.tar.gz")
|
21
|
+
end
|
22
|
+
|
23
|
+
def tmp_directory
|
24
|
+
::File.join(root_directory, 'tmp', "#{software}-#{version}")
|
25
|
+
end
|
26
|
+
|
27
|
+
def gem_file
|
28
|
+
::File.join(root_directory, 'pkg', "#{software}-#{version}.gem")
|
29
|
+
end
|
30
|
+
|
31
|
+
def pkg_directory
|
32
|
+
::File.join(root_directory, 'pkg')
|
33
|
+
end
|
34
|
+
|
35
|
+
def gem_directory
|
36
|
+
::File.join(root_directory, 'vendor', 'cache')
|
37
|
+
end
|
38
|
+
|
39
|
+
task :default => 'gem:build'
|
40
|
+
|
41
|
+
file gem_file => 'gem:build'
|
42
|
+
|
43
|
+
file tmp_directory do
|
44
|
+
FileUtils.mkdir_p tmp_directory
|
45
|
+
end
|
46
|
+
|
47
|
+
namespace :gem do
|
48
|
+
desc 'build tar file'
|
49
|
+
task :package => [gem_file, tmp_directory] do
|
50
|
+
FileUtils.mv ::File.join(pkg_directory, "#{software}-#{version}.gem"), tmp_directory
|
51
|
+
|
52
|
+
Dir.chdir('tmp') do
|
53
|
+
sh "tar -czf #{tar_file} #{::File.basename tmp_directory}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
require 'coveralls/rake/task'
|
59
|
+
Coveralls::RakeTask.new
|
60
|
+
|
61
|
+
namespace :test do
|
62
|
+
desc 'Test with coveralls'
|
63
|
+
task :coveralls => ['test:rspec', 'test:cucumber', 'coveralls:push']
|
64
|
+
end
|
data/bin/proxy_tester
ADDED
data/files/config.yaml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
---
|
@@ -0,0 +1,12 @@
|
|
1
|
+
---
|
2
|
+
# You might want to copy the following output to one of the allowed config
|
3
|
+
# file paths - in the given order. But be aware that at
|
4
|
+
# <%= lookup('config_file') -%>, there might be a
|
5
|
+
# config file created during initialization.
|
6
|
+
<% Array(lookup('allowed_config_file_paths')).each do |p| -%>
|
7
|
+
# * <%= p %>
|
8
|
+
<% end -%>
|
9
|
+
|
10
|
+
<% ProxyTester::Config.options.delete_if { |o| [].include? o }.each do |o| -%>
|
11
|
+
:<%= o %>: <%= lookup(o) %>
|
12
|
+
<% end -%>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Loading support files
|
4
|
+
Dir.glob(::File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'bundler'
|
8
|
+
Bundler.require :default
|
9
|
+
rescue
|
10
|
+
$stderr.puts 'Please install ruby gem "bundler" before using this spec_helper.rb in your proxy_tester-spec files.'
|
11
|
+
exit -1
|
12
|
+
end
|
13
|
+
|
14
|
+
<% Array(lookup('libraries')).each do |l| -%>
|
15
|
+
# *<%= l[:name] %>*
|
16
|
+
# <%= l[:description] %>
|
17
|
+
# Please see "<%= l[:url] %>" for further information
|
18
|
+
<%- if l[:require] -%>
|
19
|
+
require '<%= l[:require] %>'
|
20
|
+
<%- else -%>
|
21
|
+
require '<%= l[:require] %>'
|
22
|
+
<%- end -%>
|
23
|
+
<% end -%>
|