loom-core 0.0.5 → 0.0.6
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/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
|