rspec-system 0.3.1 → 0.3.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/Rakefile +4 -0
- data/lib/rspec-system/helpers.rb +12 -18
- data/lib/rspec-system/node_set/vagrant.rb +40 -22
- data/rspec-system.gemspec +1 -1
- data/spec/spec_helper.rb +8 -2
- data/spec/unit/kwalify-schemas/nodeset_schema_spec.rb +11 -0
- metadata +2 -2
data/Rakefile
CHANGED
data/lib/rspec-system/helpers.rb
CHANGED
|
@@ -70,12 +70,13 @@ module RSpecSystem::Helpers
|
|
|
70
70
|
|
|
71
71
|
# Runs a shell command on a test host.
|
|
72
72
|
#
|
|
73
|
-
# When invoked as a block
|
|
74
|
-
#
|
|
75
|
-
# caller.
|
|
73
|
+
# When invoked as a block a result hash is yielded to the block as a
|
|
74
|
+
# parameter. Alternatively the result hash it is returned to the caller.
|
|
76
75
|
#
|
|
77
76
|
# If you have only provided 1 node in your nodeset, or you have specified a
|
|
78
|
-
# a default you can avoid entering the name of the node if you wish.
|
|
77
|
+
# a default you can avoid entering the name of the node if you wish. The
|
|
78
|
+
# method for simplicity can accept a string instead of an options hash
|
|
79
|
+
# and it knows to default everything else.
|
|
79
80
|
#
|
|
80
81
|
# The underlying implementation is actually performed by the particular
|
|
81
82
|
# node provider, however this abstraction should mean you shouldn't need
|
|
@@ -119,7 +120,9 @@ module RSpecSystem::Helpers
|
|
|
119
120
|
result = ns.run(options)
|
|
120
121
|
log.info("system_run results:\n" +
|
|
121
122
|
"-----------------------\n" +
|
|
122
|
-
result
|
|
123
|
+
"exit_code: #{result[:exit_code]}\n" +
|
|
124
|
+
"stdout:\n #{result[:stdout]}\n" +
|
|
125
|
+
"stderr:\n #{result[:stderr]}\n" +
|
|
123
126
|
"-----------------------\n")
|
|
124
127
|
|
|
125
128
|
if block_given?
|
|
@@ -152,13 +155,14 @@ module RSpecSystem::Helpers
|
|
|
152
155
|
# @option options [RSpecSystem::Node] :s alias for source_node
|
|
153
156
|
# @return [Bool] returns true if successful
|
|
154
157
|
def system_rcp(options)
|
|
158
|
+
ns = rspec_system_node_set
|
|
155
159
|
options = {
|
|
156
160
|
:source_path => options[:sp],
|
|
157
161
|
:destination_path => options[:dp],
|
|
158
162
|
:dp => options[:destination_path],
|
|
159
163
|
:sp => options[:source_path],
|
|
160
|
-
:destination_node =>
|
|
161
|
-
:d =>
|
|
164
|
+
:destination_node => ns.default_node,
|
|
165
|
+
:d => ns.default_node,
|
|
162
166
|
:source_node => nil,
|
|
163
167
|
:s => nil,
|
|
164
168
|
}.merge(options)
|
|
@@ -168,17 +172,7 @@ module RSpecSystem::Helpers
|
|
|
168
172
|
dp = options[:dp]
|
|
169
173
|
|
|
170
174
|
log.info("system_rcp from #{sp} to #{d.name}:#{dp} executed")
|
|
171
|
-
|
|
172
|
-
log.info("rcp results:\n" +
|
|
173
|
-
"-----------------------\n" +
|
|
174
|
-
results.pretty_inspect +
|
|
175
|
-
"-----------------------\n")
|
|
176
|
-
|
|
177
|
-
if results[:exit_code] == 1
|
|
178
|
-
return true
|
|
179
|
-
else
|
|
180
|
-
return false
|
|
181
|
-
end
|
|
175
|
+
ns.rcp(options)
|
|
182
176
|
end
|
|
183
177
|
|
|
184
178
|
# @!group Queries
|
|
@@ -8,32 +8,43 @@ module RSpecSystem
|
|
|
8
8
|
|
|
9
9
|
ENV_TYPE = 'vagrant'
|
|
10
10
|
|
|
11
|
+
# Creates a new instance of RSpecSystem::NodeSet::Vagrant
|
|
12
|
+
#
|
|
13
|
+
# @param setname [String] name of the set to instantiate
|
|
14
|
+
# @param config [Hash] nodeset configuration hash
|
|
11
15
|
def initialize(setname, config)
|
|
12
16
|
super
|
|
13
17
|
@vagrant_path = File.expand_path(File.join(RSpec.configuration.system_tmp, 'vagrant_projects', setname))
|
|
14
18
|
end
|
|
15
19
|
|
|
16
20
|
# Setup the NodeSet by starting all nodes.
|
|
21
|
+
#
|
|
22
|
+
# @return [void]
|
|
17
23
|
def setup
|
|
18
24
|
log.info "[Vagrant#setup] Begin setting up vagrant"
|
|
19
|
-
create_vagrantfile
|
|
20
25
|
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
create_vagrantfile()
|
|
27
|
+
|
|
28
|
+
teardown()
|
|
23
29
|
|
|
24
30
|
log.info "[Vagrant#setup] Running 'vagrant up'"
|
|
25
31
|
vagrant("up")
|
|
32
|
+
nil
|
|
26
33
|
end
|
|
27
34
|
|
|
28
35
|
# Shutdown the NodeSet by shutting down or pausing all nodes.
|
|
36
|
+
#
|
|
37
|
+
# @return [void]
|
|
29
38
|
def teardown
|
|
30
39
|
log.info "[Vagrant#teardown] Running 'vagrant destroy'"
|
|
31
40
|
vagrant("destroy --force")
|
|
41
|
+
nil
|
|
32
42
|
end
|
|
33
43
|
|
|
34
44
|
# Run a command on a host in the NodeSet.
|
|
35
45
|
#
|
|
36
46
|
# @param opts [Hash] options
|
|
47
|
+
# @return [Hash] a hash containing :exit_code, :stdout and :stderr
|
|
37
48
|
def run(opts)
|
|
38
49
|
#log.debug("[Vagrant#run] called with #{opts.inspect}")
|
|
39
50
|
|
|
@@ -58,11 +69,10 @@ module RSpecSystem
|
|
|
58
69
|
# Transfer files to a host in the NodeSet.
|
|
59
70
|
#
|
|
60
71
|
# @param opts [Hash] options
|
|
72
|
+
# @return [Boolean] returns true if command succeeded, false otherwise
|
|
61
73
|
# @todo This is damn ugly, because we ssh in as vagrant, we copy to a temp
|
|
62
74
|
# path then move it later. Its slow and brittle and we need a better
|
|
63
75
|
# solution. Its also very Linux-centrix in its use of temp dirs.
|
|
64
|
-
# @todo Need to return more interesting information, not just the systemu
|
|
65
|
-
# results. This will require a formalisation of this API.
|
|
66
76
|
def rcp(opts)
|
|
67
77
|
#log.debug("[Vagrant@rcp] called with #{opts.inspect}")
|
|
68
78
|
|
|
@@ -86,13 +96,26 @@ module RSpecSystem
|
|
|
86
96
|
:stderr => r[2]
|
|
87
97
|
}
|
|
88
98
|
|
|
89
|
-
log.info("
|
|
99
|
+
log.info("scp results:\n" +
|
|
90
100
|
"-----------------------\n" +
|
|
91
|
-
result
|
|
101
|
+
"exit_code: #{result[:exit_code]}\n" +
|
|
102
|
+
"stdout:\n #{result[:stdout]}\n" +
|
|
103
|
+
"stderr:\n #{result[:stderr]}\n" +
|
|
92
104
|
"-----------------------\n")
|
|
93
105
|
|
|
94
106
|
# Now we move the file into their final destination
|
|
95
|
-
run(:n => opts[:d], :c => "mv #{tmpdest} #{dest_path}")
|
|
107
|
+
result = run(:n => opts[:d], :c => "mv #{tmpdest} #{dest_path}")
|
|
108
|
+
log.info("move results:\n" +
|
|
109
|
+
"-----------------------\n" +
|
|
110
|
+
"exit_code: #{result[:exit_code]}\n" +
|
|
111
|
+
"stdout:\n #{result[:stdout]}\n" +
|
|
112
|
+
"stderr:\n #{result[:stderr]}\n" +
|
|
113
|
+
"-----------------------\n")
|
|
114
|
+
if result[:exit_code] == 0
|
|
115
|
+
return true
|
|
116
|
+
else
|
|
117
|
+
return false
|
|
118
|
+
end
|
|
96
119
|
end
|
|
97
120
|
|
|
98
121
|
# Create the Vagrantfile for the NodeSet.
|
|
@@ -105,16 +128,21 @@ module RSpecSystem
|
|
|
105
128
|
f.write('Vagrant::Config.run do |c|')
|
|
106
129
|
nodes.each do |k,v|
|
|
107
130
|
log.debug "Filling in content for #{k}"
|
|
131
|
+
|
|
132
|
+
ps = v.provider_specifics['vagrant']
|
|
133
|
+
|
|
108
134
|
f.write(<<-EOS)
|
|
109
|
-
c.vm.define '#{k}' do |
|
|
110
|
-
|
|
111
|
-
#{
|
|
135
|
+
c.vm.define '#{k}' do |v|
|
|
136
|
+
v.vm.host_name = '#{k}'
|
|
137
|
+
v.vm.box = '#{ps['box']}'
|
|
138
|
+
v.vm.box_url = '#{ps['box_url']}'
|
|
112
139
|
end
|
|
113
140
|
EOS
|
|
114
141
|
end
|
|
115
142
|
f.write('end')
|
|
116
143
|
end
|
|
117
144
|
log.debug "[Vagrant#create_vagrantfile] Finished creating vagrant file"
|
|
145
|
+
nil
|
|
118
146
|
end
|
|
119
147
|
|
|
120
148
|
# Here we get vagrant to drop the ssh_config its using so we can monopolize
|
|
@@ -122,6 +150,7 @@ module RSpecSystem
|
|
|
122
150
|
# since its indexed based on our own node names its quite ideal.
|
|
123
151
|
#
|
|
124
152
|
# @api private
|
|
153
|
+
# @return [String] path to ssh_config file
|
|
125
154
|
def ssh_config
|
|
126
155
|
ssh_config_path = File.expand_path(File.join(@vagrant_path, "ssh_config"))
|
|
127
156
|
begin
|
|
@@ -137,17 +166,6 @@ module RSpecSystem
|
|
|
137
166
|
ssh_config_path
|
|
138
167
|
end
|
|
139
168
|
|
|
140
|
-
# Provide Vagrantfile templates from node definition.
|
|
141
|
-
#
|
|
142
|
-
# @api private
|
|
143
|
-
# @param settings [Hash] provider specific settings for vagrant
|
|
144
|
-
def template_node(settings)
|
|
145
|
-
template = <<-EOS
|
|
146
|
-
vmconf.vm.box = '#{settings['box']}'
|
|
147
|
-
vmconf.vm.box_url = '#{settings['box_url']}'
|
|
148
|
-
EOS
|
|
149
|
-
end
|
|
150
|
-
|
|
151
169
|
# Execute vagrant command in vagrant_path
|
|
152
170
|
#
|
|
153
171
|
# @api private
|
data/rspec-system.gemspec
CHANGED
data/spec/spec_helper.rb
CHANGED
|
@@ -13,12 +13,18 @@ Pathname.glob("#{dir}/shared_behaviours/**/*.rb") do |behaviour|
|
|
|
13
13
|
require behaviour.relative_path_from(Pathname.new(dir))
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
def root_path
|
|
17
|
+
Pathname.new(File.expand_path(File.join(__FILE__, '..', '..')))
|
|
18
|
+
end
|
|
19
|
+
|
|
16
20
|
def fixture_path
|
|
17
|
-
|
|
21
|
+
root_path + 'spec' + 'fixtures'
|
|
18
22
|
end
|
|
23
|
+
|
|
19
24
|
def resources_path
|
|
20
|
-
|
|
25
|
+
root_path + 'resources'
|
|
21
26
|
end
|
|
27
|
+
|
|
22
28
|
def schema_path
|
|
23
29
|
resources_path + 'kwalify-schemas'
|
|
24
30
|
end
|
|
@@ -25,4 +25,15 @@ describe 'nodeset_schema' do
|
|
|
25
25
|
errors.should == []
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
|
+
|
|
29
|
+
it "my own .nodeset.yml should validate" do
|
|
30
|
+
ydoc = parser.parse_file(root_path + '.nodeset.yml')
|
|
31
|
+
errors = parser.errors
|
|
32
|
+
if errors && !errors.empty?
|
|
33
|
+
errors.each do |e|
|
|
34
|
+
puts "line=#{e.linenum}, path=#{e.path}, mesg=#{e.message}"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
errors.should == []
|
|
38
|
+
end
|
|
28
39
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rspec-system
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.2
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-04-
|
|
12
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rspec
|