net-httpstub 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / 2009-04-25
2
+
3
+ * initial release
4
+
data/README ADDED
@@ -0,0 +1,67 @@
1
+
2
+ = net-httpstub - a stub of Net::HTTP.
3
+
4
+ by momotaro <info@momo-lab.net>
5
+
6
+ == Description
7
+
8
+ net-httpstub is a stub of Net::HTTP.
9
+
10
+ This changes the operation of the Net::HTTP,
11
+ and returns the response originally specified.
12
+
13
+ == Installation
14
+
15
+ === Archive Installation
16
+
17
+ rake install
18
+
19
+ === Gem Installation
20
+
21
+ gem install nethttpstub
22
+
23
+
24
+ == Features/Problems
25
+
26
+ This depends on internal processing of Net::HTTP.
27
+ Therefore, it is likely not to move excluding
28
+ the following environment.
29
+
30
+ * ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
31
+
32
+ == Synopsis
33
+
34
+ class SampleTest < Test::Unit:TestCase
35
+ def test_get_request
36
+ Net::HTTP.push "response body"
37
+ Net::HTTP.start('www.example.com') do |http|
38
+ res = http.get('/')
39
+ assert_instance_of Net::HTTPOK, res
40
+ assert_equal "200", res.code
41
+ assert_equal "response body", res.body
42
+ end
43
+ end
44
+ end
45
+
46
+ The HTTP response header can be specified.
47
+
48
+ class SampleTest < Test::Unit:TestCase
49
+ def test_get_request
50
+ Net::HTTP.push <<-EOF
51
+ HTTP/1.1 404 Not Found
52
+
53
+ EOF
54
+ Net::HTTP.start('www.example.com') do |http|
55
+ res = http.get('/')
56
+ assert_instance_of Net::HTTPNotFound, res
57
+ assert_equal "404", res.code
58
+ assert_equal "", res.body
59
+ end
60
+ end
61
+ end
62
+
63
+ == Copyright
64
+
65
+ Author:: momotaro <info@momo-lab.net>
66
+ Copyright:: Copyright (c) 2000-2009 momotaro
67
+ License:: Ruby's
data/Rakefile ADDED
@@ -0,0 +1,134 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'rake/contrib/sshpublisher'
10
+ require 'rubyforge'
11
+ require 'fileutils'
12
+ include FileUtils
13
+
14
+ NAME = "net-httpstub"
15
+ AUTHOR = "momotaro"
16
+ EMAIL = "info@momo-lab.net"
17
+ DESCRIPTION = "net-httpstub is a stub of Net::HTTP."
18
+ RUBYFORGE_PROJECT = "net-httpstub"
19
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
20
+ BIN_FILES = %w( )
21
+ VERS = "0.0.1"
22
+
23
+ sudo = 'sudo ' unless /mswin|mingw/ =~ RUBY_PLATFORM
24
+
25
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
26
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
27
+ RDOC_OPTS = [
28
+ '--title', "#{NAME} documentation",
29
+ "--charset", "utf-8",
30
+ "--opname", "index.html",
31
+ "--line-numbers",
32
+ "--main", "README",
33
+ "--inline-source",
34
+ ]
35
+
36
+ task :default => [:test]
37
+ task :package => [:clean]
38
+
39
+ Rake::TestTask.new("test") do |t|
40
+ t.libs << "test"
41
+ t.pattern = "test/**/*_test.rb"
42
+ t.verbose = true
43
+ end
44
+
45
+ spec = Gem::Specification.new do |s|
46
+ s.name = NAME
47
+ s.version = VERS
48
+ s.platform = Gem::Platform::RUBY
49
+ s.has_rdoc = true
50
+ s.extra_rdoc_files = ["README", "ChangeLog"]
51
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
52
+ s.summary = DESCRIPTION
53
+ s.description = DESCRIPTION
54
+ s.author = AUTHOR
55
+ s.email = EMAIL
56
+ s.homepage = HOMEPATH
57
+ s.executables = BIN_FILES
58
+ s.rubyforge_project = RUBYFORGE_PROJECT
59
+ s.bindir = "bin"
60
+ s.require_path = "lib"
61
+ s.test_files = Dir["test/test_*.rb"]
62
+
63
+ #s.add_dependency('activesupport', '>=1.3.1')
64
+ #s.required_ruby_version = '>= 1.8.2'
65
+
66
+ s.files = %w(README ChangeLog Rakefile) +
67
+ Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
68
+ Dir.glob("ext/**/*.{h,c,rb}") +
69
+ Dir.glob("examples/**/*.rb") +
70
+ Dir.glob("tools/*.rb")
71
+
72
+ s.extensions = FileList["ext/**/extconf.rb"].to_a
73
+ end
74
+
75
+ Rake::GemPackageTask.new(spec) do |p|
76
+ p.need_tar = true
77
+ p.gem_spec = spec
78
+ end
79
+
80
+ task :install do
81
+ name = "#{NAME}-#{VERS}.gem"
82
+ sh %{rake package}
83
+ sh %{#{sudo}gem install pkg/#{name}}
84
+ end
85
+
86
+ task :uninstall => [:clean] do
87
+ sh %{#{sudo}gem uninstall #{NAME}}
88
+ end
89
+
90
+
91
+ Rake::RDocTask.new do |rdoc|
92
+ rdoc.rdoc_dir = 'html'
93
+ rdoc.options += RDOC_OPTS
94
+ rdoc.template = "resh"
95
+ #rdoc.template = "#{ENV['template']}.rb" if ENV['template']
96
+ if ENV['DOC_FILES']
97
+ rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
98
+ else
99
+ rdoc.rdoc_files.include('README', 'ChangeLog')
100
+ rdoc.rdoc_files.include('lib/**/*.rb')
101
+ rdoc.rdoc_files.include('ext/**/*.c')
102
+ end
103
+ end
104
+
105
+ desc "Publish to RubyForge"
106
+ task :rubyforge => [:rdoc, :package] do
107
+ require 'rubyforge'
108
+ Rake::RubyForgePublisher.new(RUBYFORGE_PROJECT, 'momotaro').upload
109
+ end
110
+
111
+ desc 'Package and upload the release to rubyforge.'
112
+ task :release => [:clean, :package] do |t|
113
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
114
+ abort "Versions don't match #{v} vs #{VERS}" unless v == VERS
115
+ pkg = "pkg/#{NAME}-#{VERS}"
116
+
117
+ rf = RubyForge.new
118
+ puts "Logging in"
119
+ rf.configure
120
+ rf.login
121
+
122
+ c = rf.userconfig
123
+ # c["release_notes"] = description if description
124
+ # c["release_changes"] = changes if changes
125
+ c["preformatted"] = true
126
+
127
+ files = [
128
+ "#{pkg}.tgz",
129
+ "#{pkg}.gem"
130
+ ].compact
131
+
132
+ puts "Releasing #{NAME} v.#{VERS}"
133
+ rf.add_release RUBYFORGE_PROJECT, NAME, VERS, *files
134
+ end
@@ -0,0 +1,82 @@
1
+ require 'net/http'
2
+ require 'stringio'
3
+
4
+ module Net
5
+ class HTTP
6
+ @@responses = []
7
+
8
+ class << HTTP
9
+ # push response list and stub mode.
10
+ def push(res)
11
+ @@responses.push add_header(res)
12
+ self.stub = true
13
+ end
14
+
15
+ # return stub mode.
16
+ def stub
17
+ @stub || false
18
+ end
19
+
20
+ alias :stub? :stub
21
+
22
+ # set stub mode.
23
+ def stub=(value)
24
+ @stub = value
25
+ if @stub
26
+ module_eval do
27
+ alias :request :request_stub
28
+ alias :connect :connect_stub
29
+ public :request
30
+ end
31
+ else
32
+ module_eval do
33
+ alias :request :request_orig
34
+ alias :connect :connect_orig
35
+ public :request
36
+ end
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def add_header(res) #:nodoc:
43
+ head, body = res.split(/(\r|\n|\r\n)\1/, 2)
44
+ if body.nil?
45
+ res = [
46
+ "HTTP/1.1 200 OK",
47
+ "Content-Length: #{res.size}",
48
+ "",
49
+ res
50
+ ].join("\n")
51
+ end
52
+ res
53
+ end
54
+ end
55
+
56
+ private
57
+
58
+ alias :request_orig :request #:nodoc:
59
+ alias :connect_orig :connect #:nodoc:
60
+ private :request_orig, :connect_orig
61
+
62
+ def request_stub(req, body = nil, &block) #:nodoc:
63
+ res = @@responses.shift
64
+ if res.nil?
65
+ res = "HTTP/1.1 404 Not Found\n\n"
66
+ else
67
+ Net::HTTP.stub = false if @@responses.empty?
68
+ end
69
+ io = BufferedIO.new(StringIO.new(res))
70
+ res = HTTPResponse.read_new(io)
71
+ res.reading_body(io, req.response_body_permitted?) do
72
+ yield res if block_given?
73
+ end
74
+ res
75
+ end
76
+
77
+ def connect_stub #:nodoc:
78
+ @socket = BufferedIO.new(StringIO.new)
79
+ on_connect
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,176 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ require 'test/unit'
4
+ require 'open-uri'
5
+
6
+ class SampleTest < Test::Unit::TestCase
7
+ def test_get_request
8
+ Net::HTTP.push "response body"
9
+ Net::HTTP.start('www.example.com') do |http|
10
+ res = http.get('/')
11
+ assert_instance_of Net::HTTPOK, res
12
+ assert_equal "200", res.code
13
+ assert_equal "response body", res.body
14
+ end
15
+ end
16
+
17
+ def test_get_request
18
+ Net::HTTP.push <<-EOF
19
+ HTTP/1.1 404 Not Found
20
+
21
+ EOF
22
+ Net::HTTP.start('www.example.com') do |http|
23
+ res = http.get('/')
24
+ assert_instance_of Net::HTTPNotFound, res
25
+ assert_equal "404", res.code
26
+ assert_equal "", res.body
27
+ end
28
+ end
29
+
30
+ end
31
+
32
+ class HttpstubTest < Test::Unit::TestCase
33
+ def test_stub
34
+ assert_equal false, Net::HTTP.stub?
35
+ assert_equal false, Net::HTTP.stub
36
+ Net::HTTP.push "response body"
37
+ assert_equal true, Net::HTTP.stub?
38
+ assert_equal true, Net::HTTP.stub
39
+ assert_equal "response body", open('http://www.example.com/').read
40
+ assert_equal false, Net::HTTP.stub?
41
+ assert_equal false, Net::HTTP.stub
42
+ end
43
+
44
+ def test_stub=
45
+ assert_equal false, Net::HTTP.stub?
46
+ Net::HTTP.stub = true
47
+ assert_equal true, Net::HTTP.stub?
48
+ Net::HTTP.stub = false
49
+ assert_equal false, Net::HTTP.stub?
50
+ end
51
+
52
+ def test_stub_noset
53
+ Net::HTTP.stub = true
54
+ Net::HTTP.start('www.example.com') do |http|
55
+ res = http.get('/')
56
+ assert_instance_of Net::HTTPNotFound, res
57
+ end
58
+ assert_equal true, Net::HTTP.stub
59
+ end
60
+
61
+ def test_http_get_request
62
+ Net::HTTP.push "response body"
63
+ Net::HTTP.start('www.example.com') do |http|
64
+ res = http.get('/')
65
+ assert_equal "200", res.code
66
+ assert_equal "response body", res.body
67
+ end
68
+ end
69
+
70
+ def test_http_get_request_has_body
71
+ Net::HTTP.push "response body"
72
+ Net::HTTP.start('www.example.com') do |http|
73
+ http.request(Net::HTTP::Get.new('/')) do |res|
74
+ assert_equal res.code, "200"
75
+ res.read_body do |str|
76
+ assert_equal "response body", str
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ def test_http_get_request_twice
83
+ Net::HTTP.push "response body"
84
+ Net::HTTP.push "response body2"
85
+ Net::HTTP.start('www.example.com') do |http|
86
+ res = http.get('/')
87
+ assert_equal "response body", res.body
88
+ res = http.get('/')
89
+ assert_equal "response body2", res.body
90
+ end
91
+ end
92
+
93
+ def test_http_get_request_with_header
94
+ Net::HTTP.push <<-EOF
95
+ HTTP/1.1 200 OKOK
96
+ Content-Type: text/plain
97
+ Content-Length: 14
98
+
99
+ response body
100
+ EOF
101
+ Net::HTTP.start('www.example.com') do |http|
102
+ res = http.get('/')
103
+ assert_equal "OKOK", res.message
104
+ assert_equal "response body\n", res.body
105
+ assert_equal "text/plain", res['Content-Type']
106
+ assert_equal "14", res['Content-Length']
107
+ end
108
+ end
109
+
110
+ def test_http_get_request_with_header_404
111
+ Net::HTTP.push <<-EOF
112
+ HTTP/1.1 404 Not Found
113
+
114
+ response body
115
+ EOF
116
+ Net::HTTP.start('www.example.com') do |http|
117
+ res = http.get('/')
118
+ assert_instance_of Net::HTTPNotFound, res
119
+ assert_equal "404", res.code
120
+ assert_equal "Not Found", res.message
121
+ assert_equal "response body\n", res.body
122
+ end
123
+ end
124
+
125
+ def test_proxy
126
+ assert_equal false, Net::HTTP.stub
127
+ Net::HTTP.push "response body"
128
+ assert_equal true, Net::HTTP.stub
129
+ Net::HTTP.Proxy('proxy.example.com', 8080).start('www.example.com') do |http|
130
+ res = http.get('/')
131
+ assert_equal "response body", res.body
132
+ end
133
+ assert_equal false, Net::HTTP.stub
134
+ end
135
+
136
+ def test_proxy2
137
+ assert_equal false, Net::HTTP.stub
138
+ Net::HTTP.push "response body"
139
+ assert_equal true, Net::HTTP.stub
140
+ Net::HTTP.start('www.example.com', 80, 'proxy.example.com', 8080) do |http|
141
+ res = http.get('/')
142
+ assert_equal "response body", res.body
143
+ end
144
+ assert_equal false, Net::HTTP.stub
145
+ end
146
+ end
147
+
148
+ class OpenURITest < Test::Unit::TestCase
149
+ def test_open
150
+ Net::HTTP.push "response body"
151
+ open("http://www.example.com/") do |f|
152
+ assert_equal "response body", f.read
153
+ end
154
+ end
155
+
156
+ def test_uri_read
157
+ Net::HTTP.push "response body"
158
+ assert_equal "response body", URI.parse("http://www.example.com").read
159
+ end
160
+
161
+ def test_uri_open
162
+ Net::HTTP.push "response body"
163
+ assert_equal "response body", URI.parse("http://www.example.com").open.read
164
+ end
165
+
166
+ def test_redirect
167
+ Net::HTTP.push <<-EOF
168
+ HTTP/1.1 302 Found
169
+ Location: http://www.example.com/index.html
170
+
171
+ response moved.
172
+ EOF
173
+ Net::HTTP.push "response body"
174
+ assert_equal "response body", open("http://www.example.com/").read
175
+ end
176
+ end
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/net/httpstub'
3
+
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: net-httpstub
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - momotaro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-25 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: net-httpstub is a stub of Net::HTTP.
17
+ email: info@momo-lab.net
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - ChangeLog
25
+ files:
26
+ - README
27
+ - ChangeLog
28
+ - Rakefile
29
+ - test/net-httpstub_test.rb
30
+ - test/test_helper.rb
31
+ - lib/net/httpstub.rb
32
+ has_rdoc: true
33
+ homepage: http://net-httpstub.rubyforge.org
34
+ licenses: []
35
+
36
+ post_install_message:
37
+ rdoc_options:
38
+ - --title
39
+ - net-httpstub documentation
40
+ - --charset
41
+ - utf-8
42
+ - --opname
43
+ - index.html
44
+ - --line-numbers
45
+ - --main
46
+ - README
47
+ - --inline-source
48
+ - --exclude
49
+ - ^(examples|extras)/
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ requirements: []
65
+
66
+ rubyforge_project: net-httpstub
67
+ rubygems_version: 1.3.2
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: net-httpstub is a stub of Net::HTTP.
71
+ test_files:
72
+ - test/test_helper.rb