http_stub 0.0.1 → 0.0.2
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/lib/http/stub/client.rb +45 -0
- data/lib/http/stub/rake_task.rb +22 -0
- data/lib/http/stub/server.rb +1 -7
- data/lib/http/stub/version.rb +1 -1
- data/lib/http_stub.rb +10 -0
- data/spec/curl_sample.txt +1 -1
- data/spec/lib/http/client_integration_spec.rb +32 -0
- data/spec/lib/http/rake_task_integration_spec.rb +17 -0
- data/spec/spec_helper.rb +3 -1
- data/spec/support/server_integration.rb +28 -0
- metadata +31 -3
@@ -0,0 +1,45 @@
|
|
1
|
+
module Http
|
2
|
+
module Stub
|
3
|
+
module Client
|
4
|
+
|
5
|
+
def self.included(mod)
|
6
|
+
mod.extend(Http::Stub::Client::ClassMethods)
|
7
|
+
mod.send(:include, Http::Stub::Client::InstanceMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
attr_reader :host_value, :port_value
|
13
|
+
|
14
|
+
def host(host)
|
15
|
+
@host_value = host
|
16
|
+
end
|
17
|
+
|
18
|
+
def port(port)
|
19
|
+
@port_value = port
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
module InstanceMethods
|
25
|
+
|
26
|
+
def stub_response!(uri, response_options)
|
27
|
+
request = Net::HTTP::Post.new("/stub")
|
28
|
+
request.content_type = "application/json"
|
29
|
+
request.body = {
|
30
|
+
"uri" => uri,
|
31
|
+
"method" => response_options[:method],
|
32
|
+
"response" => {
|
33
|
+
"status" => response_options[:status] || "200",
|
34
|
+
"body" => response_options[:body]
|
35
|
+
}
|
36
|
+
}.to_json
|
37
|
+
response = Net::HTTP.new(self.class.host_value, self.class.port_value).start { |http| http.request(request) }
|
38
|
+
raise "Unable to stub request, stub responded with: #{response.message}" unless response.code == "200"
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path('../../../http_stub', __FILE__)
|
2
|
+
require 'rake/tasklib' unless defined?(::Rake::TaskLib)
|
3
|
+
|
4
|
+
module Http
|
5
|
+
module Stub
|
6
|
+
|
7
|
+
class RakeTask < ::Rake::TaskLib
|
8
|
+
|
9
|
+
def initialize(server_name, server_port)
|
10
|
+
desc "Starts stub #{server_name} server"
|
11
|
+
task "start_#{server_name}_server" do
|
12
|
+
Http::Stub::Server.instance_eval do
|
13
|
+
set :port, server_port
|
14
|
+
run!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/http/stub/server.rb
CHANGED
@@ -1,8 +1,3 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bundler/setup'
|
3
|
-
Bundler.require(:default)
|
4
|
-
require "json"
|
5
|
-
|
6
1
|
module Http
|
7
2
|
module Stub
|
8
3
|
|
@@ -50,8 +45,7 @@ module Http
|
|
50
45
|
stub_data = @response_register[request.path_info]
|
51
46
|
if stub_data && stub_data["method"].downcase == request.request_method.downcase
|
52
47
|
response_data = stub_data["response"]
|
53
|
-
halt response_data["status"]
|
54
|
-
response_data["body"]
|
48
|
+
halt response_data["status"].to_i, response_data["body"]
|
55
49
|
else
|
56
50
|
halt 404
|
57
51
|
end
|
data/lib/http/stub/version.rb
CHANGED
data/lib/http_stub.rb
ADDED
data/spec/curl_sample.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"uri": "/test", "method": "get", "response": {"status":"200", "body":"Foo"}}' http://localhost:
|
1
|
+
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"uri": "/test", "method": "get", "response": {"status":"200", "body":"Foo"}}' http://localhost:8001/stub
|
@@ -0,0 +1,32 @@
|
|
1
|
+
describe Http::Stub::Client do
|
2
|
+
include_context "server integration"
|
3
|
+
|
4
|
+
class TestClient
|
5
|
+
include Http::Stub::Client
|
6
|
+
|
7
|
+
host "localhost"
|
8
|
+
port 8001
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:client) { TestClient.new }
|
12
|
+
|
13
|
+
describe "when a response for a request is stubbed" do
|
14
|
+
|
15
|
+
before(:each) do
|
16
|
+
client.stub_response!("/a_path", method: :get, status: 200, body: "Some body")
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "and that request is made" do
|
20
|
+
|
21
|
+
let(:response) { Net::HTTP.get_response("localhost", "/a_path", 8001) }
|
22
|
+
|
23
|
+
it "should replay the stubbed response" do
|
24
|
+
response.code.should eql("200")
|
25
|
+
response.body.should eql("Some body")
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
describe Http::Stub::RakeTask do
|
2
|
+
include_context "server integration"
|
3
|
+
|
4
|
+
describe("when the generated task is invoked") do
|
5
|
+
|
6
|
+
it "should start a stub server that responds to stub requests" do
|
7
|
+
request = Net::HTTP::Post.new("/stub")
|
8
|
+
request.body = "{}"
|
9
|
+
|
10
|
+
response = Net::HTTP.new("localhost", 8001).start { |http| http.request(request) }
|
11
|
+
|
12
|
+
response.code.should eql("200")
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'cover_me'
|
2
2
|
require 'rack/test'
|
3
3
|
|
4
|
-
require File.expand_path('../../lib/http/stub/
|
4
|
+
require File.expand_path('../../lib/http/stub/rake_task', __FILE__)
|
5
|
+
require File.expand_path('../../lib/http_stub', __FILE__)
|
5
6
|
|
7
|
+
Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |file| require file }
|
@@ -0,0 +1,28 @@
|
|
1
|
+
share_examples_for "server integration" do
|
2
|
+
|
3
|
+
FIVE_SECONDS = 5
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@pid = Process.spawn("rake start_sample_server --trace")
|
7
|
+
wait_until("http stub server started") { Net::HTTP.get_response("localhost", "/", 8001) }
|
8
|
+
end
|
9
|
+
|
10
|
+
after(:all) do
|
11
|
+
Process.kill(9, @pid)
|
12
|
+
end
|
13
|
+
|
14
|
+
def wait_until(description, &block)
|
15
|
+
start_time = Time.now
|
16
|
+
while true
|
17
|
+
begin
|
18
|
+
block.call
|
19
|
+
return
|
20
|
+
rescue => exc
|
21
|
+
if Time.now - start_time > FIVE_SECONDS
|
22
|
+
raise "Timed out waiting until #{description}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http_stub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,8 +10,24 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-02-
|
14
|
-
dependencies:
|
13
|
+
date: 2013-02-10 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: sinatra
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.3.4
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 1.3.4
|
15
31
|
description: Configure server responses via requests to /stub. Intended as an acceptance
|
16
32
|
/ integration testing tool.
|
17
33
|
email: matthew.ueckerman@myob.com
|
@@ -19,11 +35,17 @@ executables: []
|
|
19
35
|
extensions: []
|
20
36
|
extra_rdoc_files: []
|
21
37
|
files:
|
38
|
+
- ./lib/http/stub/client.rb
|
39
|
+
- ./lib/http/stub/rake_task.rb
|
22
40
|
- ./lib/http/stub/server.rb
|
23
41
|
- ./lib/http/stub/version.rb
|
42
|
+
- ./lib/http_stub.rb
|
24
43
|
- ./spec/curl_sample.txt
|
44
|
+
- ./spec/lib/http/client_integration_spec.rb
|
45
|
+
- ./spec/lib/http/rake_task_integration_spec.rb
|
25
46
|
- ./spec/lib/http/server_spec.rb
|
26
47
|
- ./spec/spec_helper.rb
|
48
|
+
- ./spec/support/server_integration.rb
|
27
49
|
homepage: http://github.com/MYOB-Technology/http_stub
|
28
50
|
licenses:
|
29
51
|
- MIT
|
@@ -43,6 +65,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
65
|
- - ! '>='
|
44
66
|
- !ruby/object:Gem::Version
|
45
67
|
version: '0'
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
hash: -1339898744489492428
|
46
71
|
requirements: []
|
47
72
|
rubyforge_project: http_stub
|
48
73
|
rubygems_version: 1.8.25
|
@@ -51,5 +76,8 @@ specification_version: 3
|
|
51
76
|
summary: A Http Server replaying configured stub responses
|
52
77
|
test_files:
|
53
78
|
- ./spec/curl_sample.txt
|
79
|
+
- ./spec/lib/http/client_integration_spec.rb
|
80
|
+
- ./spec/lib/http/rake_task_integration_spec.rb
|
54
81
|
- ./spec/lib/http/server_spec.rb
|
55
82
|
- ./spec/spec_helper.rb
|
83
|
+
- ./spec/support/server_integration.rb
|