infrataster 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/{example/.rspec → .rspec} +0 -0
- data/CHANGELOG.md +10 -0
- data/README.md +27 -1
- data/Rakefile +52 -0
- data/infrataster.gemspec +5 -1
- data/lib/infrataster/contexts/base_context.rb +3 -3
- data/lib/infrataster/contexts/capybara_context.rb +2 -2
- data/lib/infrataster/contexts/http_context.rb +18 -6
- data/lib/infrataster/contexts/mysql_query_context.rb +1 -1
- data/lib/infrataster/contexts.rb +7 -7
- data/lib/infrataster/helpers/resource_helper.rb +24 -0
- data/lib/infrataster/helpers.rb +1 -1
- data/lib/infrataster/{types/base_type.rb → resources/base_resource.rb} +3 -3
- data/lib/infrataster/{types/capybara_type.rb → resources/capybara_resource.rb} +3 -3
- data/lib/infrataster/resources/http_resource.rb +42 -0
- data/lib/infrataster/{types/mysql_query_type.rb → resources/mysql_query_resource.rb} +3 -3
- data/lib/infrataster/{types/server_type.rb → resources/server_resource.rb} +2 -2
- data/lib/infrataster/resources.rb +5 -0
- data/lib/infrataster/rspec.rb +1 -1
- data/lib/infrataster/server.rb +26 -15
- data/lib/infrataster/version.rb +1 -1
- data/lib/infrataster.rb +6 -2
- data/spec/integration/http_spec.rb +44 -0
- data/{example/spec → spec/integration}/spec_helper.rb +3 -10
- data/spec/integration/vm/.gitignore +3 -0
- data/spec/integration/vm/Berksfile +2 -0
- data/spec/integration/vm/Vagrantfile +38 -0
- data/{example/sinatra_app → spec/integration/vm/app}/Gemfile +0 -1
- data/spec/integration/vm/app/app.rb +39 -0
- data/{example/sinatra_app → spec/integration/vm/app}/config.ru +0 -0
- data/spec/integration/vm/cookbooks/app/files/default/rackup.conf +3 -0
- data/spec/integration/vm/cookbooks/app/recipes/default.rb +35 -0
- data/spec/integration/vm/cookbooks/apt-mirror/recipes/default.rb +4 -0
- data/spec/integration/vm/cookbooks/proxy/files/default/index.html +1 -0
- data/spec/integration/vm/cookbooks/proxy/recipes/default.rb +22 -0
- data/spec/integration/vm/cookbooks/proxy/templates/default/integration-test.erb +65 -0
- data/spec/unit/lib/infrataster/server_spec.rb +49 -0
- data/spec/unit/spec_helper.rb +23 -0
- metadata +72 -29
- data/example/.gitignore +0 -4
- data/example/Berksfile +0 -2
- data/example/Gemfile +0 -8
- data/example/README.md +0 -13
- data/example/Vagrantfile +0 -81
- data/example/cookbooks/app/recipes/default.rb +0 -36
- data/example/cookbooks/db/files/default/my.cnf +0 -127
- data/example/cookbooks/db/recipes/default.rb +0 -14
- data/example/cookbooks/proxy/metadata.rb +0 -1
- data/example/cookbooks/proxy/recipes/default.rb +0 -26
- data/example/cookbooks/proxy/templates/default/app.erb +0 -13
- data/example/cookbooks/proxy/templates/default/static.erb +0 -14
- data/example/sinatra_app/.gitignore +0 -1
- data/example/sinatra_app/app.rb +0 -6
- data/example/spec/web_spec.rb +0 -64
- data/lib/infrataster/helpers/type_helper.rb +0 -24
- data/lib/infrataster/types/http_type.rb +0 -24
- data/lib/infrataster/types.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0f55bdccf28c4b1f8550418fec4c53e68bf4462
|
4
|
+
data.tar.gz: c81fd723defa93cf29bcd6160b0cde91cf0491c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f1f9c8ae16e732ebdb6002bd0ab41afe1a5e65eea2c7b09eb05b7a0f30b6ec0d51f550bbff1996c2b04a9758fac80a2262617e42cda479296f316e2474b9ad8
|
7
|
+
data.tar.gz: e377410f6e398bf4098eeb25562b99c6405ceeb8c6427875fbf4919ff2e8357d72c5916fee8ced00b0b0da24e6a58d426997fa19ad4ebc7412ece03a85166283
|
data/{example/.rspec → .rspec}
RENAMED
File without changes
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -37,7 +37,7 @@ require 'infrataster/rspec'
|
|
37
37
|
Infrataster::Server.define(
|
38
38
|
:proxy, # name
|
39
39
|
'192.168.33.10', # ip address
|
40
|
-
vagrant: true
|
40
|
+
vagrant: true # for vagrant VM
|
41
41
|
)
|
42
42
|
Infrataster::Server.define(
|
43
43
|
:app, # name
|
@@ -124,6 +124,32 @@ end
|
|
124
124
|
|
125
125
|
[infrataster/example](example)
|
126
126
|
|
127
|
+
## How to Run Tests
|
128
|
+
|
129
|
+
### Unit Tests
|
130
|
+
|
131
|
+
```
|
132
|
+
$ bundle exec rake spec:unit
|
133
|
+
```
|
134
|
+
|
135
|
+
### Integration Tests
|
136
|
+
|
137
|
+
Start and provision VMs:
|
138
|
+
|
139
|
+
```
|
140
|
+
$ bundle exec rake spec:integration:prepare
|
141
|
+
```
|
142
|
+
|
143
|
+
Run tests:
|
144
|
+
|
145
|
+
```
|
146
|
+
$ bundle exec rake spec:integration
|
147
|
+
```
|
148
|
+
|
149
|
+
## Presentations
|
150
|
+
|
151
|
+
* https://speakerdeck.com/ryotarai/infrataster-infra-behavior-testing-framework-number-oedo04
|
152
|
+
|
127
153
|
## Contributing
|
128
154
|
|
129
155
|
1. Fork it ( http://github.com/ryotarai/infrataster/fork )
|
data/Rakefile
CHANGED
@@ -1 +1,53 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
|
4
|
+
def red(str)
|
5
|
+
"\e[31m#{str}\e[m"
|
6
|
+
end
|
7
|
+
|
8
|
+
ENV['VAGRANT_CWD'] = File.expand_path('spec/integration/vm')
|
9
|
+
|
10
|
+
namespace :spec do
|
11
|
+
RSpec::Core::RakeTask.new("unit") do |task|
|
12
|
+
task.pattern = "./spec/unit{,/*/**}/*_spec.rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
RSpec::Core::RakeTask.new("integration") do |task|
|
16
|
+
task.pattern = "./spec/integration{,/*/**}/*_spec.rb"
|
17
|
+
end
|
18
|
+
|
19
|
+
namespace :integration do
|
20
|
+
integration_dir = 'spec/integration'
|
21
|
+
task :prepare => ['download_browsermob', 'start_vm'] do
|
22
|
+
end
|
23
|
+
|
24
|
+
task :download_browsermob do
|
25
|
+
dir = File.join(integration_dir, 'vm/vendor/browsermob')
|
26
|
+
unless Dir.exist?(dir)
|
27
|
+
puts red("Downloading browsermob...")
|
28
|
+
Dir.mktmpdir do |tmp|
|
29
|
+
cmd = "cd #{tmp} && wget -O browsermob-proxy.zip https://s3-us-west-1.amazonaws.com/lightbody-bmp/browsermob-proxy-2.0-beta-9-bin.zip && unzip browsermob-proxy.zip"
|
30
|
+
system cmd
|
31
|
+
FileUtils.mv(File.join(tmp, 'browsermob-proxy-2.0-beta-9'), dir)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
task :berks_vendor do
|
37
|
+
dir = File.join(integration_dir, 'vm/vendor/cookbooks')
|
38
|
+
# Berkshelf
|
39
|
+
if Dir.exist?(dir)
|
40
|
+
puts red("'#{dir}' already exists. If you want update cookbooks, delete the directory and re-run rake command")
|
41
|
+
else
|
42
|
+
puts red('Installing cookbooks by berkshelf...')
|
43
|
+
system "cd #{integartion_dir} && berks vendor vendor/cookbooks"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
task :start_vm => ['berks_vendor'] do
|
48
|
+
puts red('Starting VM...')
|
49
|
+
system '/usr/bin/vagrant up'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
data/infrataster.gemspec
CHANGED
@@ -12,7 +12,9 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.homepage = "https://github.com/ryotarai/infrataster"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
15
|
-
spec.files = `git ls-files -z`.split("\x0")
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").delete_if do |path|
|
16
|
+
path.start_with?('example/')
|
17
|
+
end
|
16
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
20
|
spec.require_paths = ["lib"]
|
@@ -24,7 +26,9 @@ Gem::Specification.new do |spec|
|
|
24
26
|
spec.add_runtime_dependency "capybara"
|
25
27
|
spec.add_runtime_dependency "selenium-webdriver"
|
26
28
|
spec.add_runtime_dependency "browsermob-proxy"
|
29
|
+
spec.add_runtime_dependency "faraday"
|
27
30
|
|
28
31
|
spec.add_development_dependency "bundler", "~> 1.5"
|
29
32
|
spec.add_development_dependency "rake"
|
33
|
+
spec.add_development_dependency "berkshelf", '~> 3.1.1'
|
30
34
|
end
|
@@ -2,11 +2,11 @@ module Infrataster
|
|
2
2
|
module Contexts
|
3
3
|
class BaseContext
|
4
4
|
attr_reader :server
|
5
|
-
attr_reader :
|
5
|
+
attr_reader :resource
|
6
6
|
|
7
|
-
def initialize(server,
|
7
|
+
def initialize(server, resource)
|
8
8
|
@server = server
|
9
|
-
@
|
9
|
+
@resource = resource
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -14,7 +14,7 @@ module Infrataster
|
|
14
14
|
def session
|
15
15
|
return @session if @session
|
16
16
|
|
17
|
-
address, port, @gateway_finalize_proc = server.
|
17
|
+
address, port, @gateway_finalize_proc = server.from_gateway_open(resource.uri.port)
|
18
18
|
Capybara.app_host = "http://#{address}:#{port}"
|
19
19
|
@session = Capybara::Session.new(capybara_driver_name)
|
20
20
|
end
|
@@ -38,7 +38,7 @@ module Infrataster
|
|
38
38
|
private
|
39
39
|
def register_capybara_driver
|
40
40
|
proxy = BrowsermobProxy.server.create_proxy
|
41
|
-
proxy.header({"Host" =>
|
41
|
+
proxy.header({"Host" => resource.uri.host})
|
42
42
|
|
43
43
|
profile = Selenium::WebDriver::Firefox::Profile.new
|
44
44
|
profile.proxy = proxy.selenium_proxy
|
@@ -1,15 +1,27 @@
|
|
1
|
-
require '
|
2
|
-
require 'net/https'
|
1
|
+
require 'faraday'
|
3
2
|
|
4
3
|
module Infrataster
|
5
4
|
module Contexts
|
6
5
|
class HttpContext < BaseContext
|
7
6
|
def response
|
8
|
-
|
7
|
+
server.from_gateway(resource.uri.port) do |address, port|
|
8
|
+
url = "#{resource.uri.scheme}://#{address}:#{port}"
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
conn = Faraday.new(:url => url) do |faraday|
|
11
|
+
faraday.request :url_encoded
|
12
|
+
faraday.response :logger, Logger
|
13
|
+
faraday.adapter Faraday.default_adapter
|
14
|
+
end
|
15
|
+
|
16
|
+
conn.public_send(resource.method) do |req|
|
17
|
+
resource.params.each_pair do |k, v|
|
18
|
+
req.params[k] = v
|
19
|
+
end
|
20
|
+
req.headers['Host'] = resource.uri.host
|
21
|
+
resource.headers.each_pair do |k, v|
|
22
|
+
req.headers[k] = v
|
23
|
+
end
|
24
|
+
req.url resource.uri.path
|
13
25
|
end
|
14
26
|
end
|
15
27
|
end
|
data/lib/infrataster/contexts.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'infrataster/
|
1
|
+
require 'infrataster/resources'
|
2
2
|
require 'infrataster/contexts/base_context'
|
3
3
|
require 'infrataster/contexts/http_context'
|
4
4
|
require 'infrataster/contexts/mysql_query_context'
|
@@ -10,21 +10,21 @@ module Infrataster
|
|
10
10
|
def from_example(example)
|
11
11
|
example_group = example.metadata[:example_group]
|
12
12
|
|
13
|
-
server = find_described(
|
14
|
-
|
13
|
+
server = find_described(Resources::ServerResource, example_group).server
|
14
|
+
resource = find_described(Resources::BaseResource, example_group)
|
15
15
|
|
16
|
-
|
16
|
+
resource.context_class.new(server, resource)
|
17
17
|
end
|
18
18
|
|
19
19
|
private
|
20
|
-
def find_described(
|
20
|
+
def find_described(resource_class, example_group)
|
21
21
|
arg = example_group[:description_args].first
|
22
|
-
if arg.is_a?(
|
22
|
+
if arg.is_a?(resource_class)
|
23
23
|
arg
|
24
24
|
else
|
25
25
|
parent_example_group = example_group[:example_group]
|
26
26
|
if parent_example_group
|
27
|
-
find_described(
|
27
|
+
find_described(resource_class, parent_example_group)
|
28
28
|
else
|
29
29
|
raise Error
|
30
30
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'infrataster/resources'
|
2
|
+
|
3
|
+
module Infrataster
|
4
|
+
module Helpers
|
5
|
+
module ResourceHelper
|
6
|
+
def server(*args)
|
7
|
+
Resources::ServerResource.new(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def http(*args)
|
11
|
+
Resources::HttpResource.new(*args)
|
12
|
+
end
|
13
|
+
|
14
|
+
def mysql_query(*args)
|
15
|
+
Resources::MysqlQueryResource.new(*args)
|
16
|
+
end
|
17
|
+
|
18
|
+
def capybara(*args)
|
19
|
+
Resources::CapybaraResource.new(*args)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
data/lib/infrataster/helpers.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
require 'infrataster/
|
1
|
+
require 'infrataster/resources/base_resource'
|
2
2
|
require 'uri'
|
3
3
|
|
4
4
|
module Infrataster
|
5
|
-
module
|
6
|
-
class
|
5
|
+
module Resources
|
6
|
+
class CapybaraResource < BaseResource
|
7
7
|
Error = Class.new(StandardError)
|
8
8
|
|
9
9
|
attr_reader :uri
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'infrataster/resources/base_resource'
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
module Infrataster
|
5
|
+
module Resources
|
6
|
+
class HttpResource < BaseResource
|
7
|
+
Error = Class.new(StandardError)
|
8
|
+
|
9
|
+
attr_reader :uri, :options
|
10
|
+
|
11
|
+
def initialize(url_str, options = {})
|
12
|
+
@options = {params: {}, method: :get, headers: {}}.merge(options)
|
13
|
+
@uri = URI.parse(url_str)
|
14
|
+
unless %w!http https!.include?(@uri.scheme)
|
15
|
+
raise Error, "The provided url, '#{@uri}', is not http or https."
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
"http '#{@uri}' with #{@options}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def params
|
24
|
+
@options[:params]
|
25
|
+
end
|
26
|
+
|
27
|
+
def method
|
28
|
+
valid_methods = [:get, :head, :delete, :post, :put, :patch]
|
29
|
+
unless valid_methods.include?(@options[:method])
|
30
|
+
raise Error, "#{@options[:method]} is not supported HTTP method."
|
31
|
+
end
|
32
|
+
|
33
|
+
@options[:method]
|
34
|
+
end
|
35
|
+
|
36
|
+
def headers
|
37
|
+
@options[:headers]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require 'infrataster/
|
1
|
+
require 'infrataster/resources/base_resource'
|
2
2
|
|
3
3
|
module Infrataster
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Resources
|
5
|
+
class MysqlQueryResource < BaseResource
|
6
6
|
Error = Class.new(StandardError)
|
7
7
|
|
8
8
|
attr_reader :query
|
data/lib/infrataster/rspec.rb
CHANGED
data/lib/infrataster/server.rb
CHANGED
@@ -8,12 +8,19 @@ module Infrataster
|
|
8
8
|
Error = Class.new(StandardError)
|
9
9
|
|
10
10
|
class << self
|
11
|
-
@@servers = []
|
12
11
|
|
13
12
|
def define(*args)
|
14
13
|
@@servers << Server.new(*args)
|
15
14
|
end
|
16
15
|
|
16
|
+
def defined_servers
|
17
|
+
@@servers
|
18
|
+
end
|
19
|
+
|
20
|
+
def clear_defined_servers
|
21
|
+
@@servers = []
|
22
|
+
end
|
23
|
+
|
17
24
|
def find_by_name(name)
|
18
25
|
server = @@servers.find {|s| s.name == name }
|
19
26
|
unless server
|
@@ -22,6 +29,7 @@ module Infrataster
|
|
22
29
|
server
|
23
30
|
end
|
24
31
|
|
32
|
+
Server.clear_defined_servers
|
25
33
|
end
|
26
34
|
|
27
35
|
attr_reader :name, :address, :options
|
@@ -70,24 +78,24 @@ module Infrataster
|
|
70
78
|
end
|
71
79
|
end
|
72
80
|
|
81
|
+
def from_gateway_open(port)
|
82
|
+
if from
|
83
|
+
new_port, finalize_proc = from.gateway_open(@address, port)
|
84
|
+
Logger.debug("tunnel: localhost:#{new_port} -> #{from.address} -> #{@address}:#{port}")
|
85
|
+
['127.0.0.1', new_port, finalize_proc]
|
86
|
+
else
|
87
|
+
[@address, port, nil]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
73
91
|
def from_gateway(port)
|
74
92
|
if from
|
75
|
-
|
76
|
-
from.gateway_open(@address, port) do |new_port|
|
77
|
-
Logger.debug("tunnel: localhost:#{new_port} -> #{from.address} -> #{@address}:#{port}")
|
78
|
-
yield '127.0.0.1', new_port
|
79
|
-
end
|
80
|
-
else
|
81
|
-
new_port, finalize_proc = from.gateway_open(@address, port)
|
93
|
+
from.gateway_open(@address, port) do |new_port|
|
82
94
|
Logger.debug("tunnel: localhost:#{new_port} -> #{from.address} -> #{@address}:#{port}")
|
83
|
-
|
95
|
+
yield '127.0.0.1', new_port
|
84
96
|
end
|
85
97
|
else
|
86
|
-
|
87
|
-
yield @address, port
|
88
|
-
else
|
89
|
-
[@address, port, nil]
|
90
|
-
end
|
98
|
+
yield @address, port
|
91
99
|
end
|
92
100
|
end
|
93
101
|
|
@@ -111,7 +119,10 @@ module Infrataster
|
|
111
119
|
|
112
120
|
Dir.mktmpdir do |dir|
|
113
121
|
output = File.join(dir, 'ssh-config')
|
114
|
-
|
122
|
+
`/usr/bin/vagrant ssh-config #{vagrant_name} > #{output}`
|
123
|
+
if $?.exitstatus != 0
|
124
|
+
raise Error, "`vagrant ssh-config` failed. Please check if VMs are running or not."
|
125
|
+
end
|
115
126
|
config = Net::SSH::Config.for(@name.to_s, [output])
|
116
127
|
end
|
117
128
|
else
|
data/lib/infrataster/version.rb
CHANGED
data/lib/infrataster.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require "infrataster/version"
|
2
|
-
require "infrataster/
|
2
|
+
require "infrataster/resources"
|
3
3
|
require "infrataster/server"
|
4
4
|
require "infrataster/helpers"
|
5
5
|
require "infrataster/browsermob_proxy"
|
@@ -8,5 +8,9 @@ require 'logger'
|
|
8
8
|
|
9
9
|
module Infrataster
|
10
10
|
Logger = ::Logger.new($stdout)
|
11
|
-
|
11
|
+
if ENV['INFRATASTER_LOG']
|
12
|
+
Logger.level = ::Logger.const_get(ENV['INFRATASTER_LOG'].upcase)
|
13
|
+
else
|
14
|
+
Logger.level = ::Logger::ERROR
|
15
|
+
end
|
12
16
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'integration/spec_helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
describe server(:proxy) do
|
5
|
+
describe http('http://app.example.com') do
|
6
|
+
it "sends GET request with Host header" do
|
7
|
+
expect(response.body).to include('app')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe http('http://static.example.com') do
|
12
|
+
it "sends GET request with Host header" do
|
13
|
+
expect(response.body).to include('static')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe server(:app) do
|
19
|
+
let(:body_as_json) { JSON.parse(response.body) }
|
20
|
+
|
21
|
+
describe http('http://app.example.com') do
|
22
|
+
it "sends GET request" do
|
23
|
+
expect(response.body).to include('app')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe http('http://app.example.com', params: {'foo' => 'bar'}, headers: {'USER' => 'VALUE'}) do
|
28
|
+
it "sends GET request with params" do
|
29
|
+
expect(body_as_json['method']).to eq('GET')
|
30
|
+
expect(body_as_json['params']).to eq({"foo" => "bar"})
|
31
|
+
expect(body_as_json['headers']['USER']).to eq('VALUE')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe http('http://app.example.com', method: :post, params: {'foo' => 'bar'}, headers: {'USER' => 'VALUE'}) do
|
36
|
+
it "sends POST request with params" do
|
37
|
+
expect(body_as_json['method']).to eq('POST')
|
38
|
+
expect(body_as_json['params']).to eq({"foo" => "bar"})
|
39
|
+
expect(body_as_json['headers']['USER']).to eq('VALUE')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
@@ -2,24 +2,17 @@ require 'infrataster/rspec'
|
|
2
2
|
|
3
3
|
Infrataster::Server.define(
|
4
4
|
:proxy,
|
5
|
-
'192.168.
|
5
|
+
'192.168.44.10',
|
6
6
|
vagrant: true,
|
7
7
|
)
|
8
8
|
Infrataster::Server.define(
|
9
9
|
:app,
|
10
|
-
'172.16.
|
10
|
+
'172.16.44.11',
|
11
11
|
vagrant: true,
|
12
12
|
from: :proxy
|
13
13
|
)
|
14
|
-
Infrataster::Server.define(
|
15
|
-
:db,
|
16
|
-
'172.16.33.12',
|
17
|
-
vagrant: true,
|
18
|
-
from: :app,
|
19
|
-
mysql: {user: 'app', password: 'app'}
|
20
|
-
)
|
21
14
|
|
22
|
-
Infrataster::BrowsermobProxy.bin_path = File.expand_path('
|
15
|
+
Infrataster::BrowsermobProxy.bin_path = File.expand_path('../vm/vendor/browsermob/bin/browsermob-proxy', __FILE__)
|
23
16
|
|
24
17
|
RSpec.configure do |config|
|
25
18
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
5
|
+
VAGRANTFILE_API_VERSION = "2"
|
6
|
+
COOKBOOK_PATH = ['./cookbooks', './vendor/cookbooks']
|
7
|
+
|
8
|
+
INTERNAL_ADDRESSES = {
|
9
|
+
'proxy' => '172.16.44.10',
|
10
|
+
'app' => '172.16.44.11',
|
11
|
+
}
|
12
|
+
|
13
|
+
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
14
|
+
config.vm.box = "hashicorp/precise64"
|
15
|
+
|
16
|
+
config.vm.define :proxy do |c|
|
17
|
+
c.vm.network "private_network", ip: "192.168.44.10"
|
18
|
+
c.vm.network "private_network", ip: INTERNAL_ADDRESSES['proxy'], virtualbox__intnet: "infrataster-integration-test"
|
19
|
+
|
20
|
+
c.vm.provision "chef_solo" do |chef|
|
21
|
+
chef.cookbooks_path = COOKBOOK_PATH
|
22
|
+
chef.add_recipe "apt-mirror"
|
23
|
+
chef.add_recipe "proxy"
|
24
|
+
chef.json = {'addresses' => INTERNAL_ADDRESSES}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
config.vm.define :app do |c|
|
29
|
+
c.vm.network "private_network", ip: INTERNAL_ADDRESSES['app'], virtualbox__intnet: "infrataster-integration-test"
|
30
|
+
|
31
|
+
c.vm.provision "chef_solo" do |chef|
|
32
|
+
chef.cookbooks_path = COOKBOOK_PATH
|
33
|
+
chef.add_recipe "apt-mirror"
|
34
|
+
chef.add_recipe "app"
|
35
|
+
chef.json = {'addresses' => INTERNAL_ADDRESSES}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|