infrataster 0.1.11 → 0.1.12
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/README.md +1 -1
- data/bin/infrataster +6 -0
- data/infrataster.gemspec +1 -0
- data/lib/infrataster/cli.rb +48 -0
- data/lib/infrataster/contexts/http_context.rb +5 -1
- data/lib/infrataster/fixtures/Gemfile.erb +7 -0
- data/lib/infrataster/fixtures/Rakefile.erb +42 -0
- data/lib/infrataster/fixtures/Vagrantfile.erb +13 -0
- data/lib/infrataster/fixtures/app_spec.rb.erb +11 -0
- data/lib/infrataster/fixtures/spec_helper.rb.erb +18 -0
- data/lib/infrataster/resources/http_resource.rb +6 -2
- data/lib/infrataster/server.rb +7 -1
- data/lib/infrataster/version.rb +1 -1
- data/spec/integration/http_spec.rb +6 -0
- data/spec/integration/other_spec.rb +6 -0
- data/spec/integration/spec_helper.rb +1 -0
- data/spec/unit/lib/infrataster/contexts/http_context_spec.rb +30 -0
- data/spec/unit/lib/infrataster/resources/http_resource_spec.rb +14 -0
- metadata +29 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f005787139f6d46caa2c8bbc1f1972d020521e88
|
4
|
+
data.tar.gz: 01d64f70e9addd588db3e28ea05b4ed89c5b1e93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae1e92edb5053e0a85787d50d1d6c7839cc81026bc7f6d14392d9e91e1c80e9d2eda65526b9d3851bc2cbb18d7b81ed3e982864c294aa172b4974e757253e14c
|
7
|
+
data.tar.gz: 6857b48c2b0e3403b46eaea0631f8844fdb456567f550f057728291113b81bc0ffc5219a48680e64cff7ce81f4d278f6b1e8aaae39e7636b85b72d4e74e9d219
|
data/README.md
CHANGED
@@ -90,7 +90,7 @@ describe server(:app) do
|
|
90
90
|
expect(response.body).to include('Hello Sinatra')
|
91
91
|
end
|
92
92
|
it "responds as 'text/html'" do
|
93
|
-
expect(response.headers['content-type']).to
|
93
|
+
expect(response.headers['content-type']).to eq("text/html")
|
94
94
|
end
|
95
95
|
end
|
96
96
|
end
|
data/bin/infrataster
ADDED
data/infrataster.gemspec
CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_runtime_dependency "capybara"
|
27
27
|
spec.add_runtime_dependency "poltergeist"
|
28
28
|
spec.add_runtime_dependency "faraday"
|
29
|
+
spec.add_runtime_dependency "thor"
|
29
30
|
|
30
31
|
spec.add_development_dependency "bundler", "~> 1.5"
|
31
32
|
spec.add_development_dependency "rake"
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
module Infrataster
|
6
|
+
class CLI < Thor
|
7
|
+
desc "init", "Initialize Infrataster specs."
|
8
|
+
option :path, type: :string, default: '.'
|
9
|
+
def init
|
10
|
+
path = File.expand_path(options[:path])
|
11
|
+
FileUtils.mkdir_p(path)
|
12
|
+
create_file_from_template(File.expand_path("Gemfile", path))
|
13
|
+
create_file_from_template(File.expand_path("Rakefile", path))
|
14
|
+
FileUtils.mkdir(File.expand_path("spec", path))
|
15
|
+
if ask_yes_or_no("Use Vagrant?")
|
16
|
+
create_file_from_template(File.expand_path("spec/Vagrantfile", path))
|
17
|
+
end
|
18
|
+
create_file_from_template(File.expand_path("spec/spec_helper.rb", path))
|
19
|
+
create_file_from_template(File.expand_path("spec/app_spec.rb", path))
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def ask_yes_or_no(question)
|
24
|
+
print "#{question} (y/N): "
|
25
|
+
answer = $stdin.gets
|
26
|
+
if answer =~ /^y/i
|
27
|
+
true
|
28
|
+
else
|
29
|
+
false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_file_from_template(path)
|
34
|
+
basename = File.basename(path)
|
35
|
+
|
36
|
+
if File.exist?(path)
|
37
|
+
puts "#{basename} exists already. Skip."
|
38
|
+
return
|
39
|
+
end
|
40
|
+
|
41
|
+
open(path, 'w') do |f|
|
42
|
+
f.write(ERB.new(File.read(File.expand_path("../fixtures/#{basename}.erb", __FILE__))).result)
|
43
|
+
end
|
44
|
+
|
45
|
+
puts "Created: #{basename}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -17,7 +17,7 @@ module Infrataster
|
|
17
17
|
resource.params.each_pair do |k, v|
|
18
18
|
req.params[k] = v
|
19
19
|
end
|
20
|
-
req.headers['Host'] =
|
20
|
+
req.headers['Host'] = determine_host(address)
|
21
21
|
resource.headers.each_pair do |k, v|
|
22
22
|
req.headers[k] = v
|
23
23
|
end
|
@@ -25,6 +25,10 @@ module Infrataster
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
28
|
+
|
29
|
+
def determine_host(default)
|
30
|
+
resource.uri.host || (server.options[:http] && server.options[:http][:host]) || default
|
31
|
+
end
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Generated by `infrataster init`
|
2
|
+
|
3
|
+
require "rspec/core/rake_task"
|
4
|
+
|
5
|
+
def exec_and_abort_if_fail(cmd)
|
6
|
+
system cmd
|
7
|
+
unless $?.exitstatus == 0
|
8
|
+
$stderr.puts "'#{cmd}' failed."
|
9
|
+
abort
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'Run tests'
|
14
|
+
task :spec => ['spec:integration']
|
15
|
+
|
16
|
+
namespace :spec do
|
17
|
+
RSpec::Core::RakeTask.new("infrataster") do |task|
|
18
|
+
task.pattern = "./spec/{,/*/**}/*_spec.rb"
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'Prepare'
|
22
|
+
task :prepare do
|
23
|
+
exec_and_abort_if_fail '/usr/bin/vagrant up'
|
24
|
+
exec_and_abort_if_fail '/usr/bin/vagrant provision'
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'Provision'
|
28
|
+
task :provision do
|
29
|
+
exec_and_abort_if_fail '/usr/bin/vagrant provision'
|
30
|
+
end
|
31
|
+
|
32
|
+
desc 'Restart VMs'
|
33
|
+
task :restart do
|
34
|
+
exec_and_abort_if_fail '/usr/bin/vagrant reload --provision'
|
35
|
+
end
|
36
|
+
|
37
|
+
desc 'Clean'
|
38
|
+
task :clean do
|
39
|
+
exec_and_abort_if_fail '/usr/bin/vagrant destroy -f'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
#
|
4
|
+
# Generated by `infrataster init`
|
5
|
+
|
6
|
+
VAGRANTFILE_API_VERSION = "2"
|
7
|
+
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
8
|
+
config.vm.box = "hashicorp/precise64"
|
9
|
+
|
10
|
+
config.vm.define :app do |c|
|
11
|
+
c.vm.network "private_network", ip: "192.168.44.10"
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Generated by `infrataster init`
|
2
|
+
require 'infrataster/rspec'
|
3
|
+
|
4
|
+
ENV['VAGRANT_CWD'] = File.dirname(__FILE__)
|
5
|
+
|
6
|
+
Infrataster::Server.define(
|
7
|
+
:app,
|
8
|
+
'192.168.0.0/16',
|
9
|
+
vagrant: true,
|
10
|
+
)
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
14
|
+
config.run_all_when_everything_filtered = true
|
15
|
+
config.filter_run :focus
|
16
|
+
|
17
|
+
config.order = 'random'
|
18
|
+
end
|
@@ -11,8 +11,12 @@ module Infrataster
|
|
11
11
|
def initialize(url_str, options = {})
|
12
12
|
@options = {params: {}, method: :get, headers: {}}.merge(options)
|
13
13
|
@uri = URI.parse(url_str)
|
14
|
-
|
15
|
-
|
14
|
+
if @uri.scheme
|
15
|
+
unless %w!http https!.include?(@uri.scheme)
|
16
|
+
raise Error, "The provided url, '#{@uri}', is not http or https."
|
17
|
+
end
|
18
|
+
else
|
19
|
+
@uri = URI::HTTP.build([@uri.userinfo, @uri.host, @uri.port, @uri.path, @uri.query, @uri.fragment])
|
16
20
|
end
|
17
21
|
end
|
18
22
|
|
data/lib/infrataster/server.rb
CHANGED
@@ -77,9 +77,15 @@ module Infrataster
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
+
def ssh(&block)
|
81
|
+
Net::SSH.start(*ssh_start_args) do |ssh|
|
82
|
+
block.call(ssh)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
80
86
|
def ssh_exec(cmd, &block)
|
81
87
|
result = nil
|
82
|
-
|
88
|
+
ssh do |ssh|
|
83
89
|
result = ssh.exec!(cmd, &block)
|
84
90
|
end
|
85
91
|
result
|
data/lib/infrataster/version.rb
CHANGED
@@ -51,6 +51,12 @@ describe server(:app) do
|
|
51
51
|
expect(body_as_json['headers']['USER']).to eq('VALUE')
|
52
52
|
end
|
53
53
|
end
|
54
|
+
|
55
|
+
describe http('/path/to/resource') do
|
56
|
+
it "sends GET request with scheme and host" do
|
57
|
+
expect(body_as_json['headers']['HOST']).to eq('example.com')
|
58
|
+
end
|
59
|
+
end
|
54
60
|
end
|
55
61
|
|
56
62
|
|
@@ -15,5 +15,11 @@ describe server(:proxy) do
|
|
15
15
|
result = current_server.ssh_exec("cat /tmp/test-#{time.to_i}")
|
16
16
|
expect(result.chomp).to eq('Hello')
|
17
17
|
end
|
18
|
+
it "connects to the current server via SSH" do
|
19
|
+
current_server.ssh do |ssh|
|
20
|
+
expect(ssh.exec!('echo -n Hello')).to eq('Hello')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
18
24
|
end
|
19
25
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'unit/spec_helper'
|
2
|
+
|
3
|
+
module Infrataster
|
4
|
+
module Contexts
|
5
|
+
describe HttpContext do
|
6
|
+
context "with relative URI resource" do
|
7
|
+
let(:address) { '127.0.0.1' }
|
8
|
+
let(:port) { 80 }
|
9
|
+
let(:resource) { Resources::HttpResource.new('/path/to/resource') }
|
10
|
+
subject { described_class.new(server, resource) }
|
11
|
+
|
12
|
+
context "with http host definition" do
|
13
|
+
let(:server) { Server.new('example.com', address, http: {:host => 'example.com'}) }
|
14
|
+
|
15
|
+
it "complements host with server definition" do
|
16
|
+
expect(subject.determine_host(address)).to eq('example.com')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "with no http host definition" do
|
21
|
+
let(:server) { Server.new('example.com', address) }
|
22
|
+
|
23
|
+
it "complements host with ip address" do
|
24
|
+
expect(subject.determine_host(address)).to eq('127.0.0.1')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'unit/spec_helper'
|
2
|
+
|
3
|
+
module Infrataster
|
4
|
+
module Resources
|
5
|
+
describe HttpResource do
|
6
|
+
context "with no scheme URI" do
|
7
|
+
it "complements scheme" do
|
8
|
+
resource = HttpResource.new('/path/to/resource')
|
9
|
+
expect(resource.uri.scheme).to eq('http')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: infrataster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryota Arai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: thor
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: bundler
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,7 +153,8 @@ dependencies:
|
|
139
153
|
description:
|
140
154
|
email:
|
141
155
|
- ryota.arai@gmail.com
|
142
|
-
executables:
|
156
|
+
executables:
|
157
|
+
- infrataster
|
143
158
|
extensions: []
|
144
159
|
extra_rdoc_files: []
|
145
160
|
files:
|
@@ -150,13 +165,20 @@ files:
|
|
150
165
|
- LICENSE.txt
|
151
166
|
- README.md
|
152
167
|
- Rakefile
|
168
|
+
- bin/infrataster
|
153
169
|
- infrataster.gemspec
|
154
170
|
- lib/infrataster.rb
|
171
|
+
- lib/infrataster/cli.rb
|
155
172
|
- lib/infrataster/contexts.rb
|
156
173
|
- lib/infrataster/contexts/base_context.rb
|
157
174
|
- lib/infrataster/contexts/capybara_context.rb
|
158
175
|
- lib/infrataster/contexts/http_context.rb
|
159
176
|
- lib/infrataster/contexts/no_resource_context.rb
|
177
|
+
- lib/infrataster/fixtures/Gemfile.erb
|
178
|
+
- lib/infrataster/fixtures/Rakefile.erb
|
179
|
+
- lib/infrataster/fixtures/Vagrantfile.erb
|
180
|
+
- lib/infrataster/fixtures/app_spec.rb.erb
|
181
|
+
- lib/infrataster/fixtures/spec_helper.rb.erb
|
160
182
|
- lib/infrataster/helpers.rb
|
161
183
|
- lib/infrataster/helpers/resource_helper.rb
|
162
184
|
- lib/infrataster/helpers/rspec_helper.rb
|
@@ -185,6 +207,8 @@ files:
|
|
185
207
|
- spec/integration/vm/cookbooks/proxy/recipes/default.rb
|
186
208
|
- spec/integration/vm/cookbooks/proxy/templates/default/integration-test.erb
|
187
209
|
- spec/integration/vm/vendor/.gitignore
|
210
|
+
- spec/unit/lib/infrataster/contexts/http_context_spec.rb
|
211
|
+
- spec/unit/lib/infrataster/resources/http_resource_spec.rb
|
188
212
|
- spec/unit/lib/infrataster/server_spec.rb
|
189
213
|
- spec/unit/spec_helper.rb
|
190
214
|
homepage: https://github.com/ryotarai/infrataster
|
@@ -229,5 +253,7 @@ test_files:
|
|
229
253
|
- spec/integration/vm/cookbooks/proxy/recipes/default.rb
|
230
254
|
- spec/integration/vm/cookbooks/proxy/templates/default/integration-test.erb
|
231
255
|
- spec/integration/vm/vendor/.gitignore
|
256
|
+
- spec/unit/lib/infrataster/contexts/http_context_spec.rb
|
257
|
+
- spec/unit/lib/infrataster/resources/http_resource_spec.rb
|
232
258
|
- spec/unit/lib/infrataster/server_spec.rb
|
233
259
|
- spec/unit/spec_helper.rb
|