sinatra_fake_webservice 0.2.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/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +53 -0
- data/Rakefile +55 -0
- data/VERSION +1 -0
- data/lib/sinatra_ext.rb +16 -0
- data/lib/sinatra_webservice.rb +53 -0
- data/lib/web_service.rb +60 -0
- data/metal/sinatra_stem.rb +9 -0
- data/sinatra.log +273 -0
- data/sinatra_fake_webservice.gemspec +61 -0
- data/test/helper.rb +16 -0
- data/test/test_sinatra_fake_webservice.rb +35 -0
- metadata +89 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Elad Meidar
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
= Sinatra Fake Webservice
|
2
|
+
|
3
|
+
SFW provides an easy and simple wrapper for a sinatra application you can use in your tests in order to test/simulate remote API and HTTP calls and responses.
|
4
|
+
|
5
|
+
== Why shouldn't i use FakeWeb?
|
6
|
+
|
7
|
+
FakeWeb is awesome, but it allows you only to register *one* response per url, although in some cases you might need more than one response per url depend on your usage for example: testing an XMLRPC service or a WSDL that both might have only one url and respond based on parameters.
|
8
|
+
|
9
|
+
== Installation
|
10
|
+
|
11
|
+
Command line:
|
12
|
+
sudo gem install sinatra_fake_webservice+
|
13
|
+
|
14
|
+
Or in bundler (0.9.x) add this line to your .gemfile:
|
15
|
+
|
16
|
+
gem 'sinatra_fake_webservice', :group => :test
|
17
|
+
|
18
|
+
|
19
|
+
== Usage
|
20
|
+
|
21
|
+
First you'll need to create a SinatraWebService instance that can accept +:host+ and +:port+ options:
|
22
|
+
|
23
|
+
@fakews = SinatraWebService.new :host => 'localhost', :port => 7000
|
24
|
+
|
25
|
+
and then simply use the familiar sinatra DSL to create methods and responses.
|
26
|
+
|
27
|
+
@fakews.get '/awesome' do
|
28
|
+
"YAY!!"
|
29
|
+
end+
|
30
|
+
|
31
|
+
tada!
|
32
|
+
|
33
|
+
i simply used Net::HTTP to access the sinatra app, but i bet there are more ways to do it:
|
34
|
+
|
35
|
+
res = Net::HTTP.start(@fakews.host, @fakews.port) do |http|
|
36
|
+
http.get('/awesome')
|
37
|
+
end
|
38
|
+
|
39
|
+
assert_equal "YAY!!", res.body
|
40
|
+
|
41
|
+
== Note on Patches/Pull Requests
|
42
|
+
|
43
|
+
* Fork the project.
|
44
|
+
* Make your feature addition or bug fix.
|
45
|
+
* Add tests for it. This is important so I don't break it in a
|
46
|
+
future version unintentionally.
|
47
|
+
* Commit, do not mess with rakefile, version, or history.
|
48
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
49
|
+
* Send me a pull request. Bonus points for topic branches.
|
50
|
+
|
51
|
+
== Copyright
|
52
|
+
|
53
|
+
Copyright (c) 2010 Elad Meidar. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "sinatra_fake_webservice"
|
8
|
+
gem.summary = %Q{use a sinatra application in your Rails test environment to fake a remote web service that needs more magic than Fakeweb}
|
9
|
+
gem.description = %Q{FakeWeb allows you to fake a response from a specific url, this gem intends to give developers the option to allow several responses from the same url based on parameters (ex: WSDL)}
|
10
|
+
gem.email = "elad@nautilus6.com"
|
11
|
+
gem.homepage = "http://github.com/eladmeidar/sinatra_fake_webservice"
|
12
|
+
gem.authors = ["Elad Meidar"]
|
13
|
+
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
+
gem.add_dependency 'sinatra'
|
15
|
+
|
16
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
|
+
end
|
18
|
+
Jeweler::GemcutterTasks.new
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'rake/testtask'
|
24
|
+
Rake::TestTask.new(:test) do |test|
|
25
|
+
test.libs << 'lib' << 'test'
|
26
|
+
test.pattern = 'test/**/test_*.rb'
|
27
|
+
test.verbose = true
|
28
|
+
end
|
29
|
+
|
30
|
+
begin
|
31
|
+
require 'rcov/rcovtask'
|
32
|
+
Rcov::RcovTask.new do |test|
|
33
|
+
test.libs << 'test'
|
34
|
+
test.pattern = 'test/**/test_*.rb'
|
35
|
+
test.verbose = true
|
36
|
+
end
|
37
|
+
rescue LoadError
|
38
|
+
task :rcov do
|
39
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
task :test => :check_dependencies
|
44
|
+
|
45
|
+
task :default => :test
|
46
|
+
|
47
|
+
require 'rake/rdoctask'
|
48
|
+
Rake::RDocTask.new do |rdoc|
|
49
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
50
|
+
|
51
|
+
rdoc.rdoc_dir = 'rdoc'
|
52
|
+
rdoc.title = "sinatra_fake_webservice #{version}"
|
53
|
+
rdoc.rdoc_files.include('README*')
|
54
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
55
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.0
|
data/lib/sinatra_ext.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# Disabling the capture of the Errno::EADDRINUSE exception in #run! so we can make WebService catch it.
|
2
|
+
# class Sinatra::Base
|
3
|
+
# def self.run!(options={})
|
4
|
+
# attempts = 0
|
5
|
+
# set options
|
6
|
+
# handler = detect_rack_handler
|
7
|
+
# handler_name = handler.name.gsub(/.*::/, '')
|
8
|
+
# handler.run self, :Host => bind, :Port => port do |server|
|
9
|
+
# trap(:INT) do
|
10
|
+
# ## Use thins' hard #stop! if available, otherwise just #stop
|
11
|
+
# server.respond_to?(:stop!) ? server.stop! : server.stop
|
12
|
+
# end
|
13
|
+
# set :running, true
|
14
|
+
# end
|
15
|
+
# end
|
16
|
+
# end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
class SinatraWebService
|
4
|
+
|
5
|
+
attr_accessor :host, :port
|
6
|
+
|
7
|
+
class SinatraStem < Sinatra::Base
|
8
|
+
get '/' do
|
9
|
+
"Hello! i am lindesy lohan!"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def initialize(options = {})
|
15
|
+
@host = options[:host] ||= 'localhost'
|
16
|
+
@port = options[:port] ||= 4567
|
17
|
+
end
|
18
|
+
|
19
|
+
def running?
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
23
|
+
def run!
|
24
|
+
@port = find_free_port
|
25
|
+
|
26
|
+
app = Thread.new("running_app") do
|
27
|
+
SinatraStem.run! :post => @host, :port => @port.to_i
|
28
|
+
sleep 1
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def find_free_port
|
33
|
+
found = false
|
34
|
+
attempts = 0
|
35
|
+
while !found and attempts < 10
|
36
|
+
puts "\n== Trying port #{@port}"
|
37
|
+
begin
|
38
|
+
res = Net::HTTP.start(host,port) do |http|
|
39
|
+
http.get('/')
|
40
|
+
end
|
41
|
+
attempts += 1
|
42
|
+
@port = @port.succ
|
43
|
+
rescue Errno::ECONNREFUSED
|
44
|
+
return @port
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def method_missing(method, *args, &block)
|
50
|
+
SinatraStem.send(method, *args, &block) unless method.to_s == "proxy"
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
data/lib/web_service.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
class WebService
|
3
|
+
|
4
|
+
class SinatraStem < Sinatra::Base
|
5
|
+
get '/' do
|
6
|
+
"Hello! i am lindesy lohan!"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_accessor :port, :host, :name, :sinatra_app
|
11
|
+
|
12
|
+
|
13
|
+
# Initialize a new face service
|
14
|
+
def initialize(options = {})
|
15
|
+
@name = options[:name] ||= "App"
|
16
|
+
@port = options[:port] ||= "4567"
|
17
|
+
@host = options[:host] ||= "localhost"
|
18
|
+
@sinatra_app = Sinatra::Base.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def proxy
|
22
|
+
@sinatra_app
|
23
|
+
end
|
24
|
+
|
25
|
+
def run
|
26
|
+
|
27
|
+
@port = find_free_port
|
28
|
+
|
29
|
+
app = Thread.new("running_#{self.name}") do
|
30
|
+
puts "\n == Starting webservice '#{@name}' on port #{@port}"
|
31
|
+
proxy.run! :post => @host, :port => @port.to_i
|
32
|
+
sleep 1
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def find_free_port
|
37
|
+
found = false
|
38
|
+
attempts = 0
|
39
|
+
while !found and attempts < 10
|
40
|
+
puts "\n== Trying port #{@port}"
|
41
|
+
begin
|
42
|
+
res = Net::HTTP.start(host,port) do |http|
|
43
|
+
http.get('/')
|
44
|
+
end
|
45
|
+
attempts += 1
|
46
|
+
@port = @port.succ
|
47
|
+
rescue Errno::ECONNREFUSED
|
48
|
+
return @port
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def proxy
|
54
|
+
@sinatra_app
|
55
|
+
end
|
56
|
+
|
57
|
+
def method_missing(method, *args, &block)
|
58
|
+
proxy.send(method, *args, &block) unless method.to_s == "proxy"
|
59
|
+
end
|
60
|
+
end
|
data/sinatra.log
ADDED
@@ -0,0 +1,273 @@
|
|
1
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
2
|
+
Started
|
3
|
+
.....
|
4
|
+
== Trying to run App on post 4567
|
5
|
+
.== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
6
|
+
..
|
7
|
+
== Trying to run App on post 4567
|
8
|
+
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
9
|
+
== Someone is already performing on port 4567!
|
10
|
+
Hiya!
|
11
|
+
.
|
12
|
+
Finished in 0.22206 seconds.
|
13
|
+
|
14
|
+
9 tests, 10 assertions, 0 failures, 0 errors
|
15
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
16
|
+
Started
|
17
|
+
.....
|
18
|
+
== Trying to run App on post 4567
|
19
|
+
.== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
20
|
+
..
|
21
|
+
== Trying to run App on post 4567
|
22
|
+
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
23
|
+
== Someone is already performing on port 4567!
|
24
|
+
Hiya!
|
25
|
+
.
|
26
|
+
Finished in 0.19735 seconds.
|
27
|
+
|
28
|
+
9 tests, 10 assertions, 0 failures, 0 errors
|
29
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
30
|
+
Started
|
31
|
+
..
|
32
|
+
== Trying to run App on post 4567
|
33
|
+
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
34
|
+
Hiya!
|
35
|
+
.
|
36
|
+
Finished in 0.046046 seconds.
|
37
|
+
|
38
|
+
3 tests, 4 assertions, 0 failures, 0 errors
|
39
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
40
|
+
Started
|
41
|
+
.....
|
42
|
+
== Trying to run App on post 4567
|
43
|
+
.== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
44
|
+
..
|
45
|
+
== Trying to run App on post 4567
|
46
|
+
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
47
|
+
== Someone is already performing on port 4567!
|
48
|
+
Hiya!
|
49
|
+
.
|
50
|
+
Finished in 0.04921 seconds.
|
51
|
+
|
52
|
+
9 tests, 10 assertions, 0 failures, 0 errors
|
53
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
54
|
+
Started
|
55
|
+
.....
|
56
|
+
== Trying to run App on post 4567
|
57
|
+
.== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
58
|
+
..
|
59
|
+
== Trying to run App on post 4567
|
60
|
+
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
61
|
+
== Someone is already performing on port 4567!
|
62
|
+
Hiya!
|
63
|
+
.
|
64
|
+
Finished in 0.047577 seconds.
|
65
|
+
|
66
|
+
9 tests, 10 assertions, 0 failures, 0 errors
|
67
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
68
|
+
Started
|
69
|
+
.....
|
70
|
+
== Trying to run App on post 4567
|
71
|
+
.== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
72
|
+
..
|
73
|
+
== Trying to run App on post 4567
|
74
|
+
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
75
|
+
== Someone is already performing on port 4567!
|
76
|
+
Hiya!
|
77
|
+
.
|
78
|
+
Finished in 0.260547 seconds.
|
79
|
+
|
80
|
+
9 tests, 10 assertions, 0 failures, 0 errors
|
81
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
82
|
+
Started
|
83
|
+
.....
|
84
|
+
== Trying to run App on post 4567
|
85
|
+
.== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4568
|
86
|
+
|
87
|
+
== Trying to run App on post 4568
|
88
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4569
|
89
|
+
|
90
|
+
== Trying to run App on post 4569
|
91
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4570
|
92
|
+
|
93
|
+
== Trying to run App on post 4570
|
94
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4571
|
95
|
+
|
96
|
+
== Trying to run App on post 4571
|
97
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4572
|
98
|
+
|
99
|
+
== Trying to run App on post 4572
|
100
|
+
..
|
101
|
+
== Trying to run App on post 4567
|
102
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4568
|
103
|
+
|
104
|
+
== Trying to run App on post 4568
|
105
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4569
|
106
|
+
|
107
|
+
== Trying to run App on post 4569
|
108
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4570
|
109
|
+
|
110
|
+
== Trying to run App on post 4570
|
111
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4571
|
112
|
+
|
113
|
+
== Trying to run App on post 4571
|
114
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4572
|
115
|
+
|
116
|
+
== Trying to run App on post 4572
|
117
|
+
E
|
118
|
+
Finished in 0.045649 seconds.
|
119
|
+
|
120
|
+
1) Error:
|
121
|
+
test: a new web service with a custom method should respond to '/test' with 'Hiya!'. (TestWebservice):
|
122
|
+
Errno::ECONNREFUSED: Connection refused - connect(2)
|
123
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:560:in `initialize'
|
124
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:560:in `open'
|
125
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:560:in `connect'
|
126
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/timeout.rb:53:in `timeout'
|
127
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/timeout.rb:93:in `timeout'
|
128
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:560:in `connect'
|
129
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:553:in `do_start'
|
130
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:542:in `start'
|
131
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:440:in `start'
|
132
|
+
./test/test_web_service.rb:31:in `__bind_1266537637_187400'
|
133
|
+
/Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call'
|
134
|
+
/Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: a new web service with a custom method should respond to '/test' with 'Hiya!'. '
|
135
|
+
|
136
|
+
9 tests, 9 assertions, 0 failures, 1 errors
|
137
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
138
|
+
Started
|
139
|
+
.....
|
140
|
+
== Trying to run App on post 4567
|
141
|
+
.== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4568
|
142
|
+
|
143
|
+
== Trying to run App on post 4568
|
144
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4569
|
145
|
+
|
146
|
+
== Trying to run App on post 4569
|
147
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4570
|
148
|
+
|
149
|
+
== Trying to run App on post 4570
|
150
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4571
|
151
|
+
|
152
|
+
== Trying to run App on post 4571
|
153
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4572
|
154
|
+
|
155
|
+
== Trying to run App on post 4572
|
156
|
+
..
|
157
|
+
== Trying to run App on post 4567
|
158
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4568
|
159
|
+
|
160
|
+
== Trying to run App on post 4568
|
161
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4569
|
162
|
+
|
163
|
+
== Trying to run App on post 4569
|
164
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4570
|
165
|
+
|
166
|
+
== Trying to run App on post 4570
|
167
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4571
|
168
|
+
|
169
|
+
== Trying to run App on post 4571
|
170
|
+
== Failed (undefined local variable or method `bind' for WebService::App:Class), retrying again on port 4572
|
171
|
+
|
172
|
+
== Trying to run App on post 4572
|
173
|
+
E
|
174
|
+
Finished in 0.045099 seconds.
|
175
|
+
|
176
|
+
1) Error:
|
177
|
+
test: a new web service with a custom method should respond to '/test' with 'Hiya!'. (TestWebservice):
|
178
|
+
Errno::ECONNREFUSED: Connection refused - connect(2)
|
179
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:560:in `initialize'
|
180
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:560:in `open'
|
181
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:560:in `connect'
|
182
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/timeout.rb:53:in `timeout'
|
183
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/timeout.rb:93:in `timeout'
|
184
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:560:in `connect'
|
185
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:553:in `do_start'
|
186
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:542:in `start'
|
187
|
+
/Users/elad/.rvm/rubies/ruby-1.8.7-p249/lib/ruby/1.8/net/http.rb:440:in `start'
|
188
|
+
./test/test_web_service.rb:31:in `__bind_1266537644_167228'
|
189
|
+
/Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call'
|
190
|
+
/Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: a new web service with a custom method should respond to '/test' with 'Hiya!'. '
|
191
|
+
|
192
|
+
9 tests, 9 assertions, 0 failures, 1 errors
|
193
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
194
|
+
Started
|
195
|
+
.....
|
196
|
+
== Trying to run App on post 4567
|
197
|
+
.== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
198
|
+
..
|
199
|
+
== Trying to run App on post 4567
|
200
|
+
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
201
|
+
== Someone is already performing on port 4567!
|
202
|
+
Hiya!
|
203
|
+
.
|
204
|
+
Finished in 0.047605 seconds.
|
205
|
+
|
206
|
+
9 tests, 10 assertions, 0 failures, 0 errors
|
207
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
208
|
+
Started
|
209
|
+
.....
|
210
|
+
== Trying to run App on post 4567
|
211
|
+
.== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
212
|
+
..
|
213
|
+
Finished in 0.042507 seconds.
|
214
|
+
|
215
|
+
8 tests, 9 assertions, 0 failures, 0 errors
|
216
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
217
|
+
Started
|
218
|
+
.......
|
219
|
+
Finished in 0.000965 seconds.
|
220
|
+
|
221
|
+
7 tests, 9 assertions, 0 failures, 0 errors
|
222
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
223
|
+
Started
|
224
|
+
.......
|
225
|
+
Finished in 0.000975 seconds.
|
226
|
+
|
227
|
+
7 tests, 9 assertions, 0 failures, 0 errors
|
228
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
229
|
+
Started
|
230
|
+
..
|
231
|
+
Finished in 0.000354 seconds.
|
232
|
+
|
233
|
+
2 tests, 3 assertions, 0 failures, 0 errors
|
234
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
235
|
+
Started
|
236
|
+
..
|
237
|
+
Finished in 0.000353 seconds.
|
238
|
+
|
239
|
+
2 tests, 3 assertions, 0 failures, 0 errors
|
240
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
241
|
+
Started
|
242
|
+
..
|
243
|
+
Finished in 0.000357 seconds.
|
244
|
+
|
245
|
+
2 tests, 3 assertions, 0 failures, 0 errors
|
246
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
247
|
+
Started
|
248
|
+
..
|
249
|
+
Finished in 0.000355 seconds.
|
250
|
+
|
251
|
+
2 tests, 3 assertions, 0 failures, 0 errors
|
252
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
253
|
+
Started
|
254
|
+
.....
|
255
|
+
Finished in 0.000809 seconds.
|
256
|
+
|
257
|
+
5 tests, 6 assertions, 0 failures, 0 errors
|
258
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
259
|
+
Started
|
260
|
+
.......
|
261
|
+
Finished in 0.000972 seconds.
|
262
|
+
|
263
|
+
7 tests, 9 assertions, 0 failures, 0 errors
|
264
|
+
Loaded suite /Users/elad/.rvm/gems/ruby-1.8.7-p249/gems/rake-0.8.7/lib/rake/rake_test_loader
|
265
|
+
Started
|
266
|
+
.......
|
267
|
+
== Trying to run App on post 4567
|
268
|
+
== Sinatra/0.9.4 has taken the stage on 4567 for development with backup from WEBrick
|
269
|
+
Hiya!
|
270
|
+
.
|
271
|
+
Finished in 0.197477 seconds.
|
272
|
+
|
273
|
+
8 tests, 10 assertions, 0 failures, 0 errors
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{sinatra_fake_webservice}
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Elad Meidar"]
|
12
|
+
s.date = %q{2010-02-18}
|
13
|
+
s.description = %q{FakeWeb allows you to fake a response from a specific url, this gem intends to give developers the option to allow several responses from the same url based on parameters (ex: WSDL)}
|
14
|
+
s.email = %q{elad@nautilus6.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/sinatra_ext.rb",
|
27
|
+
"lib/sinatra_webservice.rb",
|
28
|
+
"lib/web_service.rb",
|
29
|
+
"metal/sinatra_stem.rb",
|
30
|
+
"sinatra.log",
|
31
|
+
"sinatra_fake_webservice.gemspec",
|
32
|
+
"test/helper.rb",
|
33
|
+
"test/test_sinatra_fake_webservice.rb"
|
34
|
+
]
|
35
|
+
s.homepage = %q{http://github.com/eladmeidar/sinatra_fake_webservice}
|
36
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
37
|
+
s.require_paths = ["lib"]
|
38
|
+
s.rubygems_version = %q{1.3.5}
|
39
|
+
s.summary = %q{use a sinatra application in your Rails test environment to fake a remote web service that needs more magic than Fakeweb}
|
40
|
+
s.test_files = [
|
41
|
+
"test/helper.rb",
|
42
|
+
"test/test_sinatra_fake_webservice.rb"
|
43
|
+
]
|
44
|
+
|
45
|
+
if s.respond_to? :specification_version then
|
46
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
|
+
s.specification_version = 3
|
48
|
+
|
49
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
50
|
+
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
51
|
+
s.add_runtime_dependency(%q<sinatra>, [">= 0"])
|
52
|
+
else
|
53
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
54
|
+
s.add_dependency(%q<sinatra>, [">= 0"])
|
55
|
+
end
|
56
|
+
else
|
57
|
+
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
58
|
+
s.add_dependency(%q<sinatra>, [">= 0"])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
require 'net/http'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'metal'))
|
9
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
10
|
+
require 'sinatra/base'
|
11
|
+
#require 'sinatra_ext'
|
12
|
+
require 'sinatra_webservice'
|
13
|
+
#require 'web_service'
|
14
|
+
|
15
|
+
class Test::Unit::TestCase
|
16
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestSinatraFakeWebservice < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "a new sinatra web service" do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@sinatra_app = SinatraWebService.new
|
9
|
+
end
|
10
|
+
|
11
|
+
should "have default host and port" do
|
12
|
+
assert_equal 4567, @sinatra_app.port
|
13
|
+
assert_equal 'localhost', @sinatra_app.host
|
14
|
+
end
|
15
|
+
|
16
|
+
context "with a registered GET service" do
|
17
|
+
|
18
|
+
setup do
|
19
|
+
@sinatra_app.get '/payme' do
|
20
|
+
"OMG I GOT PAID"
|
21
|
+
end
|
22
|
+
|
23
|
+
@sinatra_app.run!
|
24
|
+
end
|
25
|
+
|
26
|
+
should "respond to '/payme' with 'OMG I GOT PAID" do
|
27
|
+
res = Net::HTTP.start(@sinatra_app.host, @sinatra_app.port) do |http|
|
28
|
+
http.get('/payme')
|
29
|
+
end
|
30
|
+
|
31
|
+
assert_equal "OMG I GOT PAID",res.body
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sinatra_fake_webservice
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Elad Meidar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-18 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: thoughtbot-shoulda
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: sinatra
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: "FakeWeb allows you to fake a response from a specific url, this gem intends to give developers the option to allow several responses from the same url based on parameters (ex: WSDL)"
|
36
|
+
email: elad@nautilus6.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- LICENSE
|
43
|
+
- README.rdoc
|
44
|
+
files:
|
45
|
+
- .document
|
46
|
+
- .gitignore
|
47
|
+
- LICENSE
|
48
|
+
- README.rdoc
|
49
|
+
- Rakefile
|
50
|
+
- VERSION
|
51
|
+
- lib/sinatra_ext.rb
|
52
|
+
- lib/sinatra_webservice.rb
|
53
|
+
- lib/web_service.rb
|
54
|
+
- metal/sinatra_stem.rb
|
55
|
+
- sinatra.log
|
56
|
+
- sinatra_fake_webservice.gemspec
|
57
|
+
- test/helper.rb
|
58
|
+
- test/test_sinatra_fake_webservice.rb
|
59
|
+
has_rdoc: true
|
60
|
+
homepage: http://github.com/eladmeidar/sinatra_fake_webservice
|
61
|
+
licenses: []
|
62
|
+
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options:
|
65
|
+
- --charset=UTF-8
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
73
|
+
version:
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: "0"
|
79
|
+
version:
|
80
|
+
requirements: []
|
81
|
+
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 1.3.5
|
84
|
+
signing_key:
|
85
|
+
specification_version: 3
|
86
|
+
summary: use a sinatra application in your Rails test environment to fake a remote web service that needs more magic than Fakeweb
|
87
|
+
test_files:
|
88
|
+
- test/helper.rb
|
89
|
+
- test/test_sinatra_fake_webservice.rb
|