fakeweb 1.2.0 → 1.2.1
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/CHANGELOG +14 -0
- data/README.rdoc +21 -1
- data/Rakefile +9 -2
- data/lib/fake_web/ext/net_http.rb +13 -3
- data/lib/fake_web/registry.rb +9 -8
- data/test/test_fake_authentication.rb +44 -0
- data/test/test_fake_web.rb +11 -0
- data/test/test_query_string.rb +13 -1
- data/test/test_trailing_slashes.rb +62 -0
- metadata +7 -3
data/CHANGELOG
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
fakeweb (1.2.1)
|
2
|
+
|
3
|
+
* fix that query parameters are handled correctly when registering with a URI
|
4
|
+
object [Anselmo Alves, Chris Kampmeier]
|
5
|
+
|
6
|
+
* fix an exception when registering with the :response option and a string
|
7
|
+
containing "\0" [Jonathan Baudanza, Chris Kampmeier]
|
8
|
+
|
9
|
+
* fix that trailing slashes were considered significant for requests to the root
|
10
|
+
of a domain [Chris Kampmeier]
|
11
|
+
|
12
|
+
* add support for HTTP basic authentication via userinfo strings in URIs
|
13
|
+
[Michael Bleigh]
|
14
|
+
|
1
15
|
fakeweb (1.2.0)
|
2
16
|
|
3
17
|
* add lib/fakeweb.rb so you can require "fakeweb" as well [Chris Kampmeier]
|
data/README.rdoc
CHANGED
@@ -11,6 +11,10 @@ RubyForge mirror. Just install the gem:
|
|
11
11
|
|
12
12
|
sudo gem install fakeweb
|
13
13
|
|
14
|
+
Note: the gem was previously available as +FakeWeb+ (capital letters), but now
|
15
|
+
all versions are simply registered as +fakeweb+. If you have any old +FakeWeb+
|
16
|
+
gems lying around, remove them: <tt>sudo gem uninstall FakeWeb</tt>
|
17
|
+
|
14
18
|
|
15
19
|
== Help and discussion
|
16
20
|
|
@@ -19,6 +23,7 @@ RDocs for the current release are available at http://fakeweb.rubyforge.org.
|
|
19
23
|
There's a mailing list for questions and discussion at
|
20
24
|
http://groups.google.com/group/fakeweb-users.
|
21
25
|
|
26
|
+
The main source repository is http://github.com/chrisk/fakeweb.
|
22
27
|
|
23
28
|
== Examples
|
24
29
|
|
@@ -86,6 +91,21 @@ option for that response.)
|
|
86
91
|
req.delete("/posts/1").body # => "Post not found"
|
87
92
|
end
|
88
93
|
|
94
|
+
=== Using HTTP basic authentication
|
95
|
+
|
96
|
+
You can stub requests that use basic authentication with +userinfo+ strings in
|
97
|
+
the URIs:
|
98
|
+
|
99
|
+
FakeWeb.register_uri("http://example.com/secret", :string => "Unauthorized", :status => ["401", "Unauthorized"])
|
100
|
+
FakeWeb.register_uri("http://user:pass@example.com/secret", :string => "Authorized")
|
101
|
+
|
102
|
+
Net::HTTP.start("example.com") do |http|
|
103
|
+
req = Net::HTTP::Get.new("/secret")
|
104
|
+
http.request(req) # => "Unauthorized"
|
105
|
+
req.basic_auth("user", "pass")
|
106
|
+
http.request(req) # => "Authorized"
|
107
|
+
end
|
108
|
+
|
89
109
|
=== Clearing registered URIs
|
90
110
|
|
91
111
|
The FakeWeb registry is a singleton that lasts for the duration of your
|
@@ -159,4 +179,4 @@ Copyright 2008-2009 various contributors
|
|
159
179
|
with FakeWeb; if not, write to the Free Software Foundation, Inc., 51
|
160
180
|
Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
161
181
|
|
162
|
-
See <tt>LICENSE.txt</tt> for the full terms.
|
182
|
+
See <tt>LICENSE.txt</tt> for the full terms.
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'rake/gempackagetask'
|
2
3
|
require 'rake/testtask'
|
3
4
|
require 'rake/rdoctask'
|
4
5
|
|
@@ -7,7 +8,7 @@ task :default => :test
|
|
7
8
|
desc "Run All Tests"
|
8
9
|
Rake::TestTask.new :test do |test|
|
9
10
|
test.test_files = ["test/**/*.rb"]
|
10
|
-
test.verbose =
|
11
|
+
test.verbose = false
|
11
12
|
end
|
12
13
|
|
13
14
|
desc "Generate Documentation"
|
@@ -60,4 +61,10 @@ else
|
|
60
61
|
t.rcov_opts << "--exclude gems"
|
61
62
|
t.rcov_opts << "--no-validator-links"
|
62
63
|
end
|
63
|
-
end
|
64
|
+
end
|
65
|
+
|
66
|
+
spec = eval(File.read(File.join(File.dirname(__FILE__), "fakeweb.gemspec")))
|
67
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
68
|
+
pkg.need_tar_gz = true
|
69
|
+
pkg.need_zip = true
|
70
|
+
end
|
@@ -14,7 +14,11 @@ module Net #:nodoc: all
|
|
14
14
|
when Socket, OpenSSL::SSL::SSLSocket, IO
|
15
15
|
io
|
16
16
|
when String
|
17
|
-
|
17
|
+
if !io.include?("\0") && File.exists?(io)
|
18
|
+
File.open(io, "r")
|
19
|
+
else
|
20
|
+
StringIO.new(io)
|
21
|
+
end
|
18
22
|
end
|
19
23
|
raise "Unable to create local socket" unless @io
|
20
24
|
end
|
@@ -34,7 +38,13 @@ module Net #:nodoc: all
|
|
34
38
|
path = request.path
|
35
39
|
path = URI.parse(request.path).request_uri if request.path =~ /^http/
|
36
40
|
|
37
|
-
|
41
|
+
if request['authorization'].nil?
|
42
|
+
userinfo = ""
|
43
|
+
else
|
44
|
+
userinfo = request['authorization'].sub(/^Basic /, "").unpack("m").first + "@"
|
45
|
+
end
|
46
|
+
|
47
|
+
uri = "#{protocol}://#{userinfo}#{self.address}:#{self.port}#{path}"
|
38
48
|
method = request.method.downcase.to_sym
|
39
49
|
|
40
50
|
if FakeWeb.registered_uri?(method, uri)
|
@@ -53,4 +63,4 @@ module Net #:nodoc: all
|
|
53
63
|
end
|
54
64
|
end
|
55
65
|
|
56
|
-
end
|
66
|
+
end
|
data/lib/fake_web/registry.rb
CHANGED
@@ -56,14 +56,15 @@ module FakeWeb
|
|
56
56
|
private
|
57
57
|
|
58
58
|
def normalize_uri(uri)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
59
|
+
normalized_uri =
|
60
|
+
case uri
|
61
|
+
when URI then uri
|
62
|
+
else
|
63
|
+
uri = 'http://' + uri unless uri.match('^https?://')
|
64
|
+
URI.parse(uri)
|
65
|
+
end
|
66
|
+
normalized_uri.query = sort_query_params(normalized_uri.query)
|
67
|
+
normalized_uri.normalize
|
67
68
|
end
|
68
69
|
|
69
70
|
def sort_query_params(query)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_helper")
|
2
|
+
|
3
|
+
class TestFakeAuthentication < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
FakeWeb.register_uri('http://user:pass@mock/auth.txt', :string => 'authorized')
|
6
|
+
FakeWeb.register_uri('http://user2:pass@mock/auth.txt', :string => 'wrong user')
|
7
|
+
FakeWeb.register_uri('http://mock/auth.txt', :string => 'unauthorized')
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_register_uri_with_authentication
|
11
|
+
FakeWeb.register_uri('http://user:pass@mock/test_example.txt', :string => "example")
|
12
|
+
assert FakeWeb.registered_uri?('http://user:pass@mock/test_example.txt')
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_register_uri_with_authentication_doesnt_trigger_without
|
16
|
+
FakeWeb.register_uri('http://user:pass@mock/test_example.txt', :string => "example")
|
17
|
+
assert !FakeWeb.registered_uri?('http://mock/test_example.txt')
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_register_uri_with_authentication_doesnt_trigger_with_incorrect_credentials
|
21
|
+
FakeWeb.register_uri('http://user:pass@mock/test_example.txt', :string => "example")
|
22
|
+
assert !FakeWeb.registered_uri?('http://user:wrong@mock/test_example.txt')
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_unauthenticated_request
|
26
|
+
http = Net::HTTP.new('mock', 80)
|
27
|
+
req = Net::HTTP::Get.new('/auth.txt')
|
28
|
+
assert_equal http.request(req).body, 'unauthorized'
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_authenticated_request
|
32
|
+
http = Net::HTTP.new('mock',80)
|
33
|
+
req = Net::HTTP::Get.new('/auth.txt')
|
34
|
+
req.basic_auth 'user', 'pass'
|
35
|
+
assert_equal http.request(req).body, 'authorized'
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_incorrectly_authenticated_request
|
39
|
+
http = Net::HTTP.new('mock',80)
|
40
|
+
req = Net::HTTP::Get.new('/auth.txt')
|
41
|
+
req.basic_auth 'user2', 'pass'
|
42
|
+
assert_equal http.request(req).body, 'wrong user'
|
43
|
+
end
|
44
|
+
end
|
data/test/test_fake_web.rb
CHANGED
@@ -486,4 +486,15 @@ class TestFakeWeb < Test::Unit::TestCase
|
|
486
486
|
def test_requiring_fakeweb_instead_of_fake_web
|
487
487
|
require "fakeweb"
|
488
488
|
end
|
489
|
+
|
490
|
+
def test_registering_using_response_with_string_containing_null_byte
|
491
|
+
# Regression test for File.exists? raising an ArgumentError ("string
|
492
|
+
# contains null byte") since :response first tries to find by filename.
|
493
|
+
# The string should be treated as a response body, instead, and an
|
494
|
+
# EOFError is raised when the byte is encountered.
|
495
|
+
FakeWeb.register_uri("http://example.com", :response => "test\0test")
|
496
|
+
assert_raise EOFError do
|
497
|
+
Net::HTTP.get(URI.parse("http://example.com"))
|
498
|
+
end
|
499
|
+
end
|
489
500
|
end
|
data/test/test_query_string.rb
CHANGED
@@ -6,24 +6,36 @@ class TestFakeWebQueryString < Test::Unit::TestCase
|
|
6
6
|
FakeWeb.clean_registry
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
9
|
+
def test_register_uri_string_with_query_params
|
10
10
|
FakeWeb.register_uri('http://example.com/?a=1&b=1', :string => 'foo')
|
11
11
|
assert FakeWeb.registered_uri?('http://example.com/?a=1&b=1')
|
12
|
+
|
13
|
+
FakeWeb.register_uri(URI.parse("http://example.org/?a=1&b=1"), :string => "foo")
|
14
|
+
assert FakeWeb.registered_uri?("http://example.org/?a=1&b=1")
|
12
15
|
end
|
13
16
|
|
14
17
|
def test_register_uri_with_query_params_and_check_in_different_order
|
15
18
|
FakeWeb.register_uri('http://example.com/?a=1&b=1', :string => 'foo')
|
16
19
|
assert FakeWeb.registered_uri?('http://example.com/?b=1&a=1')
|
20
|
+
|
21
|
+
FakeWeb.register_uri(URI.parse('http://example.org/?a=1&b=1'), :string => 'foo')
|
22
|
+
assert FakeWeb.registered_uri?('http://example.org/?b=1&a=1')
|
17
23
|
end
|
18
24
|
|
19
25
|
def test_registered_uri_gets_recognized_with_empty_query_params
|
20
26
|
FakeWeb.register_uri('http://example.com/', :string => 'foo')
|
21
27
|
assert FakeWeb.registered_uri?('http://example.com/?')
|
28
|
+
|
29
|
+
FakeWeb.register_uri(URI.parse('http://example.org/'), :string => 'foo')
|
30
|
+
assert FakeWeb.registered_uri?('http://example.org/?')
|
22
31
|
end
|
23
32
|
|
24
33
|
def test_register_uri_with_empty_query_params_and_check_with_none
|
25
34
|
FakeWeb.register_uri('http://example.com/?', :string => 'foo')
|
26
35
|
assert FakeWeb.registered_uri?('http://example.com/')
|
36
|
+
|
37
|
+
FakeWeb.register_uri(URI.parse('http://example.org/?'), :string => 'foo')
|
38
|
+
assert FakeWeb.registered_uri?('http://example.org/')
|
27
39
|
end
|
28
40
|
|
29
41
|
def test_registry_sort_query_params
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_helper")
|
2
|
+
|
3
|
+
class TestFakeWebTrailingSlashes < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
FakeWeb.clean_registry
|
7
|
+
@original_allow_net_connect = FakeWeb.allow_net_connect?
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
FakeWeb.allow_net_connect = @old_allow_net_conncet
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_registering_root_without_slash_and_ask_predicate_method_with_slash
|
15
|
+
FakeWeb.register_uri(:get, "http://www.example.com", :string => "root")
|
16
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com/")
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_registering_root_without_slash_and_request
|
20
|
+
FakeWeb.register_uri(:get, "http://www.example.com", :string => "root")
|
21
|
+
response = Net::HTTP.start("www.example.com") { |query| query.get('/') }
|
22
|
+
assert_equal "root", response.body
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_registering_root_with_slash_and_ask_predicate_method_without_slash
|
26
|
+
FakeWeb.register_uri(:get, "http://www.example.com/", :string => "root")
|
27
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com")
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_registering_root_with_slash_and_request
|
31
|
+
FakeWeb.register_uri(:get, "http://www.example.com/", :string => "root")
|
32
|
+
response = Net::HTTP.start("www.example.com") { |query| query.get('/') }
|
33
|
+
assert_equal "root", response.body
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_registering_path_without_slash_and_ask_predicate_method_with_slash
|
37
|
+
FakeWeb.register_uri(:get, "http://www.example.com/users", :string => "User list")
|
38
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.com/users/")
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_registering_path_without_slash_and_request_with_slash
|
42
|
+
FakeWeb.allow_net_connect = false
|
43
|
+
FakeWeb.register_uri(:get, "http://www.example.com/users", :string => "User list")
|
44
|
+
assert_raise FakeWeb::NetConnectNotAllowedError do
|
45
|
+
response = Net::HTTP.start("www.example.com") { |query| query.get('/users/') }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_registering_path_with_slash_and_ask_predicate_method_without_slash
|
50
|
+
FakeWeb.register_uri(:get, "http://www.example.com/users/", :string => "User list")
|
51
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.com/users")
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_registering_path_with_slash_and_request_without_slash
|
55
|
+
FakeWeb.allow_net_connect = false
|
56
|
+
FakeWeb.register_uri(:get, "http://www.example.com/users/", :string => "User list")
|
57
|
+
assert_raise FakeWeb::NetConnectNotAllowedError do
|
58
|
+
response = Net::HTTP.start("www.example.com") { |query| query.get('/users') }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fakeweb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blaine Cook
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-04-29 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -56,10 +56,12 @@ files:
|
|
56
56
|
- test/fixtures/test_example.txt
|
57
57
|
- test/fixtures/test_txt_file
|
58
58
|
- test/test_allow_net_connect.rb
|
59
|
+
- test/test_fake_authentication.rb
|
59
60
|
- test/test_fake_web.rb
|
60
61
|
- test/test_fake_web_open_uri.rb
|
61
62
|
- test/test_helper.rb
|
62
63
|
- test/test_query_string.rb
|
64
|
+
- test/test_trailing_slashes.rb
|
63
65
|
has_rdoc: true
|
64
66
|
homepage: http://github.com/chrisk/fakeweb
|
65
67
|
post_install_message:
|
@@ -89,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
91
|
requirements: []
|
90
92
|
|
91
93
|
rubyforge_project: fakeweb
|
92
|
-
rubygems_version: 1.3.
|
94
|
+
rubygems_version: 1.3.0
|
93
95
|
signing_key:
|
94
96
|
specification_version: 2
|
95
97
|
summary: A tool for faking responses to HTTP requests
|
@@ -101,7 +103,9 @@ test_files:
|
|
101
103
|
- test/fixtures/test_example.txt
|
102
104
|
- test/fixtures/test_txt_file
|
103
105
|
- test/test_allow_net_connect.rb
|
106
|
+
- test/test_fake_authentication.rb
|
104
107
|
- test/test_fake_web.rb
|
105
108
|
- test/test_fake_web_open_uri.rb
|
106
109
|
- test/test_helper.rb
|
107
110
|
- test/test_query_string.rb
|
111
|
+
- test/test_trailing_slashes.rb
|