loom-core 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/bin/loom +5 -1
- data/lib/loom/config.rb +10 -3
- data/lib/loom/facts/fact_set.rb +7 -1
- data/lib/loom/mods/module.rb +3 -4
- data/lib/loom/pattern/definition_context.rb +1 -1
- data/lib/loom/pattern/dsl.rb +113 -32
- data/lib/loom/pattern/reference_set.rb +7 -7
- data/lib/loom/runner.rb +8 -0
- data/lib/loom/shell/api.rb +2 -0
- data/lib/loom/version.rb +1 -1
- data/lib/loomext/corefacts/system_info_provider.rb +2 -1
- data/lib/loomext/coremods/all.rb +2 -1
- data/lib/loomext/coremods/exec.rb +10 -0
- data/lib/loomext/coremods/git.rb +19 -0
- data/lib/loomext/coremods/package/adapter.rb +1 -1
- data/lib/loomext/coremods/systemd.rb +1 -0
- data/lib/loomext/coremods/systemd/all.rb +2 -0
- data/lib/loomext/coremods/{system.rb → systemd/systemd.rb} +19 -5
- data/lib/loomext/coremods/systemd/systemd_units.rb +69 -0
- data/scripts/harness.sh +1 -0
- data/spec/.loom/error_handling.loom +15 -0
- data/spec/.loom/fail.loom +20 -0
- data/spec/.loom/files.loom +39 -0
- data/spec/.loom/net.loom +21 -0
- data/spec/.loom/pattern_context.loom +78 -0
- data/spec/.loom/pkg.loom +33 -0
- data/spec/.loom/shell.loom +46 -0
- data/spec/.loom/test.loom +73 -0
- data/spec/.loom/user.loom +29 -0
- data/spec/.loom/vms.loom +22 -0
- data/spec/loom/facts/fact_set_spec.rb +57 -0
- data/spec/loom/pattern/dsl_spec.rb +58 -9
- data/spec/loom/shell/harness_blob_spec.rb +1 -1
- data/spec/loom/shell/harness_command_builder_spec.rb +1 -1
- data/spec/loomext/coremods/systemd_spec.rb +31 -0
- data/spec/runloom.sh +12 -19
- data/spec/scripts/harness_spec.rb +1 -1
- data/spec/shared/loom_internals_helper.rb +41 -0
- data/spec/spec_helper.rb +5 -1
- data/spec/systemd.loom +22 -0
- data/spec/test_loom_spec.rb +95 -17
- data/test +2 -0
- metadata +26 -5
- data/spec/test.loom +0 -370
@@ -0,0 +1,29 @@
|
|
1
|
+
# Tests for LoomExt::CoreMods::User
|
2
|
+
module User
|
3
|
+
include Loom::Pattern
|
4
|
+
|
5
|
+
desc "Adds a bunch of users and then removes them right away"
|
6
|
+
pattern :add_users do |loom, facts|
|
7
|
+
loom.sudo do
|
8
|
+
loom.user.add :nara, uid: 1001, home_dir: "/home/nara"
|
9
|
+
loom.user.add :marrian, home_dir: "/home/marrian"
|
10
|
+
|
11
|
+
loom.user.add_system_user :app, uid: 900
|
12
|
+
loom.user.add_system_user :batch
|
13
|
+
|
14
|
+
loom.user.remove :nara
|
15
|
+
loom.user.remove :marrian
|
16
|
+
loom.user.remove :app
|
17
|
+
loom.user.remove :batch
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "Makes the postgres user a sudoer"
|
22
|
+
pattern :sudoers do |loom, facts|
|
23
|
+
loom.sudo do
|
24
|
+
loom.user.add_system_user :postgres, uid: 999
|
25
|
+
loom.user.make_sudoer :postgres
|
26
|
+
loom.user.remove :postgres
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/.loom/vms.loom
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Tests for LoomExt::CoreMods::Vbox.
|
2
|
+
# Currently disabled
|
3
|
+
module VMs
|
4
|
+
include Loom::Pattern
|
5
|
+
|
6
|
+
desc "Check if some virtualbox vms exist"
|
7
|
+
pattern :vm_exists? do |loom, facts|
|
8
|
+
vm0_exists = loom.local.vbox.check_exists "vm0.local"
|
9
|
+
puts "Virtualbox VM 'vm0.local' exists: #{vm0_exists}"
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Check if some virtualbox vms exist"
|
13
|
+
pattern :list do |loom, facts|
|
14
|
+
loom.local.vbox.list
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Takes a snapshot of a VM"
|
18
|
+
pattern :snap do |loom, facts|
|
19
|
+
loom.local.vbox.snapshot "vm0.local", snapshot_name: "test:snap"
|
20
|
+
loom.local.vbox.snapshot "vm0.local", action: :delete, snapshot_name: "test:snap"
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'loom/facts'
|
2
|
+
|
3
|
+
describe Loom::Facts::FactSet do
|
4
|
+
|
5
|
+
let(:fact_set) { Loom::Facts::FactSet.new hostspec, facts }
|
6
|
+
let(:hostspec) { Loom::HostSpec.new "dummy.host" }
|
7
|
+
let(:facts) {{
|
8
|
+
:fact_a => :a,
|
9
|
+
:fact_b => [:other, :facts]
|
10
|
+
}}
|
11
|
+
|
12
|
+
subject { fact_set }
|
13
|
+
|
14
|
+
let(:other_fact_set) { Loom::Facts::FactSet.new hostspec, other_facts }
|
15
|
+
let(:other_facts) {{
|
16
|
+
:fact_y => :y,
|
17
|
+
:fact_z => :z,
|
18
|
+
}}
|
19
|
+
|
20
|
+
context Loom::Facts::EMPTY do
|
21
|
+
|
22
|
+
subject { Loom::Facts::EMPTY }
|
23
|
+
|
24
|
+
it "should equal Facts.is_empty?" do
|
25
|
+
expect(Loom::Facts.is_empty? subject).to be true
|
26
|
+
|
27
|
+
# sanity
|
28
|
+
expect(Loom::Facts.is_empty?({})).to be false
|
29
|
+
expect(Loom::Facts.is_empty?(fact_set)).to be false
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context :merge do
|
34
|
+
it "merges with other fact sets" do
|
35
|
+
new_facts = subject.merge other_fact_set
|
36
|
+
expect(new_facts[:fact_a]).to be :a
|
37
|
+
expect(new_facts[:fact_y]).to be :y
|
38
|
+
end
|
39
|
+
|
40
|
+
it "merges with other hashes" do
|
41
|
+
new_facts = subject.merge :other_stuff => :in_a_hash
|
42
|
+
expect(new_facts[:fact_a]).to be :a
|
43
|
+
expect(new_facts[:other_stuff]).to be :in_a_hash
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context :[] do
|
48
|
+
|
49
|
+
it "returns EMPTY for no result" do
|
50
|
+
expect(fact_set[:invalid_key]).to be Loom::Facts::EMPTY
|
51
|
+
end
|
52
|
+
|
53
|
+
it "gets facts by name" do
|
54
|
+
expect(fact_set[:fact_a]).to be :a
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -12,7 +12,7 @@ describe Loom::Pattern::DSL do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
before do
|
15
|
-
#
|
15
|
+
# intercept logs
|
16
16
|
@logger_io = StringIO.new
|
17
17
|
Loom.configure do |config|
|
18
18
|
config.log_device = @logger_io
|
@@ -28,7 +28,7 @@ describe Loom::Pattern::DSL do
|
|
28
28
|
context "pattern basics" do
|
29
29
|
|
30
30
|
let(:loom_file) do
|
31
|
-
<<
|
31
|
+
<<RB_LOOM
|
32
32
|
desc "a description of pattern_under_test"
|
33
33
|
pattern :pattern_under_test do |loom, facts|
|
34
34
|
loom.do_outer_thing
|
@@ -42,7 +42,7 @@ describe Loom::Pattern::DSL do
|
|
42
42
|
loom.do_inner_thing
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
45
|
+
RB_LOOM
|
46
46
|
end
|
47
47
|
|
48
48
|
it "defines a Pattern::Reference" do
|
@@ -67,7 +67,7 @@ EOS
|
|
67
67
|
context "#let" do
|
68
68
|
|
69
69
|
let(:loom_file) do
|
70
|
-
<<
|
70
|
+
<<RB_LOOM
|
71
71
|
let(:let_var_1) { "let var 1"}
|
72
72
|
let(:let_var_2) { "let var 2"}
|
73
73
|
|
@@ -92,7 +92,7 @@ EOS
|
|
92
92
|
loom.do_inner_thing(let_var_1, let_var_2, let_var_3)
|
93
93
|
end
|
94
94
|
end
|
95
|
-
|
95
|
+
RB_LOOM
|
96
96
|
end
|
97
97
|
|
98
98
|
it "defines :let declartions at the top level" do
|
@@ -117,7 +117,7 @@ EOS
|
|
117
117
|
context "#with_facts" do
|
118
118
|
|
119
119
|
let(:loom_file) do
|
120
|
-
<<
|
120
|
+
<<RB_LOOM
|
121
121
|
with_facts :outer_fact => :outer
|
122
122
|
|
123
123
|
desc "a description of pattern_under_test"
|
@@ -135,7 +135,7 @@ EOS
|
|
135
135
|
loom.do_inner_thing(facts[:outer_fact], facts[:inner_fact])
|
136
136
|
end
|
137
137
|
end
|
138
|
-
|
138
|
+
RB_LOOM
|
139
139
|
end
|
140
140
|
|
141
141
|
it "defines fact sets at the top level" do
|
@@ -151,10 +151,59 @@ EOS
|
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
154
|
+
context "#report" do
|
155
|
+
|
156
|
+
let(:report_fact_set) { a_fact_set.merge :the_report_facts => [1,2,3] }
|
157
|
+
let(:loom_file) do
|
158
|
+
<<RB_LOOM
|
159
|
+
let(:the_let_facts) { [:a, :b] }
|
160
|
+
|
161
|
+
report :the_report_facts
|
162
|
+
report :the_let_facts
|
163
|
+
|
164
|
+
report :the_other_facts do
|
165
|
+
{ :some => :other, :stuff => :ok }
|
166
|
+
end
|
167
|
+
|
168
|
+
report :by_another_form, format: :json do
|
169
|
+
{ :other => :data }
|
170
|
+
end
|
171
|
+
RB_LOOM
|
172
|
+
end
|
173
|
+
|
174
|
+
let(:new_stdio) { StringIO.new }
|
175
|
+
before { $stdout = new_stdio }
|
176
|
+
after { $stdout = STDOUT }
|
177
|
+
|
178
|
+
it 'prints the called report by fact value' do
|
179
|
+
@reference_set['the_report_facts'].call fake_shell, report_fact_set
|
180
|
+
report_output = new_stdio.string
|
181
|
+
expect(report_output).to eql [1,2,3].to_yaml
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'prints the called report by let value' do
|
185
|
+
@reference_set['the_let_facts'].call fake_shell, report_fact_set
|
186
|
+
report_output = new_stdio.string
|
187
|
+
expect(report_output).to eql [:a, :b].to_yaml
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'prints the given report block' do
|
191
|
+
@reference_set['the_other_facts'].call fake_shell, report_fact_set
|
192
|
+
report_output = new_stdio.string
|
193
|
+
expect(report_output).to eql({:some => :other, :stuff => :ok}.to_yaml)
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'prints data in different formats' do
|
197
|
+
@reference_set['by_another_form'].call fake_shell, report_fact_set
|
198
|
+
report_output = new_stdio.string
|
199
|
+
expect(report_output.strip).to eql('{"other":"data"}')
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
154
203
|
context "hooks" do
|
155
204
|
|
156
205
|
let(:loom_file) do
|
157
|
-
<<
|
206
|
+
<<RB_LOOM
|
158
207
|
|
159
208
|
let(:hook_order) { [] }
|
160
209
|
|
@@ -179,7 +228,7 @@ EOS
|
|
179
228
|
loom.do_inner_thing(hook_order)
|
180
229
|
end
|
181
230
|
end
|
182
|
-
|
231
|
+
RB_LOOM
|
183
232
|
end
|
184
233
|
|
185
234
|
it "executes outer before hooks first and after hooks last" do
|
@@ -0,0 +1,31 @@
|
|
1
|
+
describe LoomExt::CoreMods::Systemd do
|
2
|
+
include LoomSpec::LoomInternalsHelper
|
3
|
+
|
4
|
+
let(:fake_loom) { create_fake_shell_api }
|
5
|
+
let(:a_fact_set) { create_fact_set }
|
6
|
+
let(:pattern_list_units) { @reference_set['list_units'] }
|
7
|
+
|
8
|
+
before do
|
9
|
+
# intercept logs
|
10
|
+
@logger_io = capture_logs_to_io
|
11
|
+
@reference_set = create_reference_set loom_file
|
12
|
+
end
|
13
|
+
|
14
|
+
context "actions" do
|
15
|
+
|
16
|
+
let(:loom_file) do
|
17
|
+
<<RB
|
18
|
+
require "loomext/all"
|
19
|
+
desc "lists systemd-units"
|
20
|
+
pattern :list_units do |l,_|
|
21
|
+
l.systemd.is_loaded?(:my_service)
|
22
|
+
end
|
23
|
+
RB
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should execute this" do
|
27
|
+
pattern_list_units.call fake_loom, a_fact_set
|
28
|
+
expect(fake_loom.cmd_execution_args.join(' '.strip)).to eql 'my_service'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/spec/runloom.sh
CHANGED
@@ -1,35 +1,28 @@
|
|
1
1
|
#!/bin/sh
|
2
|
+
pattern_file="${1}"
|
3
|
+
if [ "${pattern_file}" = "" ]; then
|
4
|
+
echo "Usage: $0 <spec/path/to/.loom/file>"
|
5
|
+
exit 1
|
6
|
+
fi
|
2
7
|
|
3
|
-
spec_file="spec
|
8
|
+
spec_file="spec/${pattern_file}"
|
4
9
|
all_patterns=$(bin/loom patterns --print \
|
5
10
|
-t \
|
6
11
|
-l ${spec_file})
|
7
12
|
|
13
|
+
shift
|
8
14
|
addl_args="${@}"
|
9
15
|
|
16
|
+
# TODO: Fix this to bring up a local container via
|
17
|
+
# systemd-nspawn. Either an alpine host, or something else really
|
18
|
+
# cheap and fast. NO DOCKER. Will rkt ever be a reasonable option?
|
10
19
|
bin/loom weave ${all_patterns} \
|
11
20
|
-t \
|
12
21
|
-l ${spec_file} \
|
13
22
|
-X log_level=info \
|
14
|
-
-H
|
23
|
+
-H rp0 \
|
24
|
+
-V \
|
15
25
|
-X sshkit_log_level=warn \
|
16
26
|
-X log_device=stderr \
|
17
27
|
-X run_failure_strategy=cowboy \
|
18
28
|
${addl_args}
|
19
|
-
rc=$?
|
20
|
-
|
21
|
-
# expect exit code 104 (100 for patterns execution error + # expected failures):
|
22
|
-
# exec:fail_soft
|
23
|
-
# exec:fail_hard
|
24
|
-
# exec:timeout_fail
|
25
|
-
# net:check_net_fail
|
26
|
-
|
27
|
-
if [ "${rc}" = "104" ]; then
|
28
|
-
# runall.sh exits succesfully on this failure because we expect
|
29
|
-
# the "fail" patterns to fail
|
30
|
-
echo "success with exit code ${rc}"
|
31
|
-
exit 0
|
32
|
-
else
|
33
|
-
echo "failed with exit code ${rc}"
|
34
|
-
exit $rc
|
35
|
-
fi
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require './lib/loom'
|
2
|
+
require './lib/loomext/all'
|
3
|
+
|
4
|
+
module LoomSpec
|
5
|
+
module LoomInternalsHelper
|
6
|
+
FAKE_FACTS = { :fact_one => 1, :fact_two => :two }
|
7
|
+
|
8
|
+
def create_fact_set(fake_host: 'fake.host', fake_facts: FAKE_FACTS)
|
9
|
+
Loom::Facts::FactSet.new fake_host, fake_facts
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_fake_shell_api
|
13
|
+
Loom::Shell::FakeApi.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_reference_set(loom_file_src=nil, path: 'loom/file/path')
|
17
|
+
loom_file_src ||= File.read(path)
|
18
|
+
Loom::Pattern::ReferenceSet::Builder.create(loom_file_src, path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def capture_logs_to_io
|
22
|
+
logger_io = StringIO.new
|
23
|
+
Loom.configure do |config|
|
24
|
+
config.log_device = logger_io
|
25
|
+
end
|
26
|
+
logger_io
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_dry_run_shell
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_config(**config_map)
|
33
|
+
Loom::Config.new config_map
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_mod_loader(config: nil)
|
37
|
+
config ||= create_config
|
38
|
+
Loom::Mod::ModLoader.new config
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
Dir.glob('./spec/shared/**/*.rb').each { |f| require f }
|
2
1
|
require './lib/loom'
|
3
2
|
|
3
|
+
Dir.glob('./spec/shared/**/*.rb').each do |f|
|
4
|
+
$stderr.puts "requiring spec helper: #{f}"
|
5
|
+
require f
|
6
|
+
end
|
7
|
+
|
4
8
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
5
9
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
6
10
|
# The generated `.rspec` file contains `--require spec_helper` which will cause
|
data/spec/systemd.loom
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Systemd
|
2
|
+
include Loom::Pattern
|
3
|
+
|
4
|
+
report :sshd_status, format: :json do |l, _|
|
5
|
+
l.systemd_units("sshd.service").status
|
6
|
+
end
|
7
|
+
|
8
|
+
report :units, format: :raw do |l, _|
|
9
|
+
l.systemd_units.list
|
10
|
+
end
|
11
|
+
|
12
|
+
report :sockets, format: :raw do |l, _|
|
13
|
+
l.systemd_sockets.list
|
14
|
+
end
|
15
|
+
|
16
|
+
report :timers, format: :raw do |l, _|
|
17
|
+
l.systemd_timers.list
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
|
data/spec/test_loom_spec.rb
CHANGED
@@ -1,5 +1,85 @@
|
|
1
1
|
require 'open3'
|
2
2
|
|
3
|
+
describe "spec .loom files" do
|
4
|
+
include LoomSpec::LoomInternalsHelper
|
5
|
+
|
6
|
+
LOOM_FILES = Dir.glob "spec/.loom/**/*.loom"
|
7
|
+
|
8
|
+
# Tests disabled until this runs on an overlayfs container
|
9
|
+
XFILE_SET = {
|
10
|
+
"error_handling.loom" => true,
|
11
|
+
"files.loom" => true,
|
12
|
+
"pkg.loom" => true,
|
13
|
+
"user.loom" => true,
|
14
|
+
"vms.loom" => true,
|
15
|
+
}
|
16
|
+
|
17
|
+
EXPECTED_EXIT_CODE = {
|
18
|
+
"fail.loom" => 103
|
19
|
+
}
|
20
|
+
|
21
|
+
SPEC_TAGS = {
|
22
|
+
:integration => true,
|
23
|
+
:long => true
|
24
|
+
}
|
25
|
+
|
26
|
+
let(:host) { "rp0" }
|
27
|
+
let(:patterns) { ref_set.slugs }
|
28
|
+
let(:command) {[
|
29
|
+
"bin/loom weave #{patterns.join " "}",
|
30
|
+
"-t",
|
31
|
+
"-l #{loom_file}",
|
32
|
+
"-X log_level=info",
|
33
|
+
"-H #{host}",
|
34
|
+
"-V",
|
35
|
+
"-X sshkit_log_level=warn",
|
36
|
+
"-X log_device=stderr",
|
37
|
+
"-X run_failure_strategy=cowboy",
|
38
|
+
]}
|
39
|
+
|
40
|
+
# bundle exec rspec --tag smoke
|
41
|
+
context "test.loom" do
|
42
|
+
let(:loom_file) { LOOM_FILES.select { |p| p.match?(/test.loom/) }.first }
|
43
|
+
let(:ref_set) { create_reference_set(path: loom_file) }
|
44
|
+
let(:patterns) { ref_set.slugs.select { |s| s.match?(/^smoke:/) } }
|
45
|
+
let(:host) { "localhost" }
|
46
|
+
|
47
|
+
it "should pass a few tests quickly", :smoke => true do
|
48
|
+
exec = command.join(' ')
|
49
|
+
output = `#{exec}`
|
50
|
+
expect($?.exitstatus).to eq 0
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# bundle exec rspec --tag integration
|
55
|
+
LOOM_FILES.each do |loom_file|
|
56
|
+
context File.basename loom_file do
|
57
|
+
let(:loom_file) { loom_file }
|
58
|
+
let(:ref_set) { create_reference_set(path: loom_file) }
|
59
|
+
|
60
|
+
if XFILE_SET[File.basename(loom_file)]
|
61
|
+
xit "should pass all the tests",
|
62
|
+
SPEC_TAGS.merge(:file => File.basename(loom_file)) {}
|
63
|
+
else
|
64
|
+
it "should pass all tests",
|
65
|
+
SPEC_TAGS.merge(:file => File.basename(loom_file)) do
|
66
|
+
exec = command.join(' ')
|
67
|
+
puts exec
|
68
|
+
# TODO pattern match the commands on STDOUT (see comment in
|
69
|
+
# .loom/test.loom)
|
70
|
+
output = `#{exec}`
|
71
|
+
|
72
|
+
basename = File.basename(loom_file)
|
73
|
+
expected_exit_code = EXPECTED_EXIT_CODE[basename] || 0
|
74
|
+
expect($?.exitstatus).to eq expected_exit_code
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Archived 10/26/2018
|
82
|
+
|
3
83
|
# TODO: fix this test to run the runloom.sh script. Currently running
|
4
84
|
# the loom script in a child process from ruby runs without a
|
5
85
|
# TTY. This causes the sshkit/net:ssh connection to connect abnormally
|
@@ -33,25 +113,23 @@ require 'open3'
|
|
33
113
|
# /home/erick/.gem/ruby/gems/sshkit-1.11.3/lib/sshkit/backends/abstract.rb:141:in `tap'
|
34
114
|
# /home/erick/.gem/ruby/gems/sshkit-1.11.3/lib/sshkit/backends/abstract.rb:141:in `create_command_and_execute'
|
35
115
|
# /home/erick/workspace/src/loom/lib/loom/shell.rb:91:in `execute'
|
116
|
+
# xit "executes successfully" do
|
36
117
|
|
37
|
-
|
118
|
+
# exit_status = nil
|
38
119
|
|
39
|
-
|
120
|
+
# # https://stackoverflow.com/questions/6338908/ruby-difference-between-exec-system-and-x-or-backticks
|
121
|
+
# output = `#{runloom} -F fact_1=1,fact_2=2,fact_3=3`
|
40
122
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
# exit_status = wait_thred.value
|
51
|
-
# end
|
123
|
+
# # Open3.popen3(runloom) do |stdin,stdout,stderr,wait_thred|
|
124
|
+
# # puts "running #{runloom}"
|
125
|
+
# # while line=stderr.gets do
|
126
|
+
# # puts line
|
127
|
+
# # end
|
128
|
+
# #
|
129
|
+
# # exit_status = wait_thred.value
|
130
|
+
# # end
|
52
131
|
|
53
|
-
|
132
|
+
# puts "exit status: #{$?.exitstatus}"
|
54
133
|
|
55
|
-
|
56
|
-
|
57
|
-
end
|
134
|
+
# expect($?.exitstatus).to eq 0
|
135
|
+
# end
|