producer-core 0.1.4 → 0.1.5
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/features/tests/negated_test.feature +44 -0
- data/lib/producer/core/condition.rb +1 -1
- data/lib/producer/core/condition/dsl.rb +3 -0
- data/lib/producer/core/test.rb +10 -1
- data/lib/producer/core/tests/has_env.rb +1 -1
- data/lib/producer/core/tests/has_file.rb +1 -1
- data/lib/producer/core/version.rb +1 -1
- data/spec/producer/core/actions/echo_spec.rb +1 -5
- data/spec/producer/core/actions/shell_command_spec.rb +1 -3
- data/spec/producer/core/cli_spec.rb +7 -7
- data/spec/producer/core/condition/dsl_spec.rb +22 -12
- data/spec/producer/core/condition_spec.rb +6 -4
- data/spec/producer/core/env_spec.rb +4 -4
- data/spec/producer/core/interpreter_spec.rb +6 -8
- data/spec/producer/core/recipe/dsl_spec.rb +11 -11
- data/spec/producer/core/recipe_spec.rb +2 -2
- data/spec/producer/core/remote/environment_spec.rb +4 -2
- data/spec/producer/core/remote/fs_spec.rb +9 -13
- data/spec/producer/core/remote_spec.rb +6 -6
- data/spec/producer/core/task/dsl_spec.rb +19 -15
- data/spec/producer/core/task_spec.rb +9 -9
- data/spec/producer/core/test_spec.rb +58 -5
- data/spec/producer/core/tests/has_env_spec.rb +6 -6
- data/spec/producer/core/tests/has_file_spec.rb +4 -4
- data/spec/support/net_ssh_story_helpers.rb +1 -1
- data/spec/support/tests_helpers.rb +2 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2806c20d86e7d0aa08f72a3005b5ee5456cad346
|
4
|
+
data.tar.gz: 4c75c67cd9815e30849302aeb9021dcbaf4721a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cddfc09e41207a5d9f01a9e04bac5c7ec7f841e89ce1e225d073923e5555460461b92f93b2978508c1003d8bdd24c92f9f106e947226190ca165ef78ae10b75
|
7
|
+
data.tar.gz: 3bace5c3bbba48e3727e380f96d5f4a31f11fd29e9a319a7c09b2e284c400c2b105352bca4b3ae4ebfcabb5159faba99b9d88fa4e47153dfd4ff747b92b70d92
|
@@ -0,0 +1,44 @@
|
|
1
|
+
@sshd
|
2
|
+
Feature: negated test prefix (no_)
|
3
|
+
|
4
|
+
Scenario: prefixed test fails when non-prefixed test is successful
|
5
|
+
Given a recipe with:
|
6
|
+
"""
|
7
|
+
target 'some_host.test'
|
8
|
+
|
9
|
+
task :successful_test do
|
10
|
+
condition { has_env :shell }
|
11
|
+
|
12
|
+
echo 'successful_test'
|
13
|
+
end
|
14
|
+
|
15
|
+
task :negated_test do
|
16
|
+
condition { no_has_env :shell }
|
17
|
+
|
18
|
+
echo 'negated_test'
|
19
|
+
end
|
20
|
+
"""
|
21
|
+
When I successfully execute the recipe
|
22
|
+
Then the output must contain "successful_test"
|
23
|
+
And the output must not contain "negated_test"
|
24
|
+
|
25
|
+
Scenario: prefixed test fails when non-prefixed test is failing
|
26
|
+
Given a recipe with:
|
27
|
+
"""
|
28
|
+
target 'some_host.test'
|
29
|
+
|
30
|
+
task :failing_test do
|
31
|
+
condition { has_env :inexistent_var }
|
32
|
+
|
33
|
+
echo 'failing_test'
|
34
|
+
end
|
35
|
+
|
36
|
+
task :negated_test do
|
37
|
+
condition { no_has_env :inexistent_var }
|
38
|
+
|
39
|
+
echo 'negated_test'
|
40
|
+
end
|
41
|
+
"""
|
42
|
+
When I successfully execute the recipe
|
43
|
+
Then the output must not contain "failing_test"
|
44
|
+
And the output must contain "negated_test"
|
data/lib/producer/core/test.rb
CHANGED
@@ -3,9 +3,18 @@ module Producer
|
|
3
3
|
class Test
|
4
4
|
attr_reader :env, :arguments
|
5
5
|
|
6
|
-
def initialize(env, *arguments)
|
6
|
+
def initialize(env, *arguments, negated: false)
|
7
7
|
@env = env
|
8
8
|
@arguments = arguments
|
9
|
+
@negated = negated
|
10
|
+
end
|
11
|
+
|
12
|
+
def negated?
|
13
|
+
@negated
|
14
|
+
end
|
15
|
+
|
16
|
+
def pass?
|
17
|
+
verify ^ negated?
|
9
18
|
end
|
10
19
|
end
|
11
20
|
end
|
@@ -2,15 +2,11 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Producer::Core
|
4
4
|
describe Actions::Echo do
|
5
|
-
let(:env) {
|
5
|
+
let(:env) { double 'env' }
|
6
6
|
let(:text) { 'hello' }
|
7
7
|
subject(:echo) { Actions::Echo.new(env, text) }
|
8
8
|
|
9
9
|
describe '#apply' do
|
10
|
-
before do
|
11
|
-
env.output = StringIO.new
|
12
|
-
end
|
13
|
-
|
14
10
|
it 'outputs the string given as argument through env.output' do
|
15
11
|
expect(env).to receive(:output).with(text)
|
16
12
|
echo.apply
|
@@ -8,9 +8,7 @@ module Producer::Core
|
|
8
8
|
subject(:sh) { Actions::ShellCommand.new(env, command) }
|
9
9
|
|
10
10
|
describe '#apply' do
|
11
|
-
before
|
12
|
-
env.output = StringIO.new
|
13
|
-
end
|
11
|
+
before { env.output = StringIO.new }
|
14
12
|
|
15
13
|
it 'delegates the call to env.remote.execute method' do
|
16
14
|
expect(env.remote).to receive(:execute).with(command)
|
@@ -5,7 +5,7 @@ module Producer::Core
|
|
5
5
|
include ExitHelpers
|
6
6
|
include FixturesHelpers
|
7
7
|
|
8
|
-
let(:recipe_file) { fixture_path_for
|
8
|
+
let(:recipe_file) { fixture_path_for 'recipes/empty.rb' }
|
9
9
|
let(:arguments) { [recipe_file] }
|
10
10
|
subject(:cli) { CLI.new(arguments) }
|
11
11
|
|
@@ -23,13 +23,13 @@ module Producer::Core
|
|
23
23
|
|
24
24
|
describe '#run!' do
|
25
25
|
it 'checks the arguments' do
|
26
|
-
expect(cli).to receive
|
26
|
+
expect(cli).to receive :check_arguments!
|
27
27
|
cli.run!
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'processes the tasks with the interpreter' do
|
31
31
|
allow(cli.recipe).to receive(:tasks) { [:some_task] }
|
32
|
-
expect(cli.interpreter).to receive(:process).with
|
32
|
+
expect(cli.interpreter).to receive(:process).with [:some_task]
|
33
33
|
cli.run!
|
34
34
|
end
|
35
35
|
end
|
@@ -61,12 +61,12 @@ module Producer::Core
|
|
61
61
|
|
62
62
|
describe '#env' do
|
63
63
|
it 'builds an environment with the current recipe' do
|
64
|
-
expect(Env).to receive
|
64
|
+
expect(Env).to receive :new
|
65
65
|
cli.env
|
66
66
|
end
|
67
67
|
|
68
68
|
it 'returns the env' do
|
69
|
-
env = double
|
69
|
+
env = double 'env'
|
70
70
|
allow(Env).to receive(:new) { env }
|
71
71
|
expect(cli.env).to be env
|
72
72
|
end
|
@@ -88,12 +88,12 @@ module Producer::Core
|
|
88
88
|
|
89
89
|
describe '#interpreter' do
|
90
90
|
it 'builds a interpreter' do
|
91
|
-
expect(Interpreter).to receive
|
91
|
+
expect(Interpreter).to receive :new
|
92
92
|
cli.interpreter
|
93
93
|
end
|
94
94
|
|
95
95
|
it 'returns the interpreter' do
|
96
|
-
interpreter = double
|
96
|
+
interpreter = double 'interpreter'
|
97
97
|
allow(Interpreter).to receive(:new) { interpreter }
|
98
98
|
expect(cli.interpreter).to be interpreter
|
99
99
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module Producer::Core
|
4
4
|
describe Condition::DSL do
|
5
5
|
let(:block) { proc { :some_condition_code } }
|
6
|
-
let(:env) { double
|
6
|
+
let(:env) { double 'env' }
|
7
7
|
subject(:dsl) { Condition::DSL.new(env, &block) }
|
8
8
|
|
9
9
|
%w[has_env has_file].each do |test|
|
@@ -22,7 +22,7 @@ module Producer::Core
|
|
22
22
|
it 'evaluates the DSL sandbox code' do
|
23
23
|
dsl = double('dsl').as_null_object
|
24
24
|
allow(Condition::DSL).to receive(:new) { dsl }
|
25
|
-
expect(dsl).to receive
|
25
|
+
expect(dsl).to receive :evaluate
|
26
26
|
Condition::DSL.evaluate(env, &block)
|
27
27
|
end
|
28
28
|
|
@@ -33,22 +33,24 @@ module Producer::Core
|
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'returns the condition' do
|
36
|
-
condition = double
|
36
|
+
condition = double 'task'
|
37
37
|
allow(Condition).to receive(:new) { condition }
|
38
38
|
expect(Condition::DSL.evaluate(env, &block)).to be condition
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
42
|
describe '.define_test' do
|
43
|
-
let(:some_test_class) { double
|
43
|
+
let(:some_test_class) { double 'SomeTest class' }
|
44
44
|
|
45
|
-
before
|
46
|
-
Condition::DSL.define_test(:some_test, some_test_class)
|
47
|
-
end
|
45
|
+
before { Condition::DSL.define_test(:some_test, some_test_class) }
|
48
46
|
|
49
47
|
it 'defines a new test keyword' do
|
50
48
|
expect(dsl).to respond_to :some_test
|
51
49
|
end
|
50
|
+
|
51
|
+
it 'defines the negated test' do
|
52
|
+
expect(dsl).to respond_to :no_some_test
|
53
|
+
end
|
52
54
|
end
|
53
55
|
|
54
56
|
describe '#initialize' do
|
@@ -78,12 +80,10 @@ module Producer::Core
|
|
78
80
|
end
|
79
81
|
|
80
82
|
context 'when a defined test keyword is called' do
|
81
|
-
let(:some_test_class) { double
|
83
|
+
let(:some_test_class) { double 'SomeTest class' }
|
82
84
|
let(:block) { proc { some_test :some, :args } }
|
83
85
|
|
84
|
-
before
|
85
|
-
Condition::DSL.define_test(:some_test, some_test_class)
|
86
|
-
end
|
86
|
+
before { Condition::DSL.define_test(:some_test, some_test_class) }
|
87
87
|
|
88
88
|
it 'builds a new test with the env and given arguments' do
|
89
89
|
expect(some_test_class).to receive(:new).with(env, :some, :args)
|
@@ -91,11 +91,21 @@ module Producer::Core
|
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'registers the new test' do
|
94
|
-
some_test = double
|
94
|
+
some_test = double 'SomeTest instance'
|
95
95
|
allow(some_test_class).to receive(:new) { some_test }
|
96
96
|
dsl.evaluate
|
97
97
|
expect(dsl.tests).to include(some_test)
|
98
98
|
end
|
99
|
+
|
100
|
+
context 'when keyword is prefixed with "no_"' do
|
101
|
+
let(:block) { proc { no_some_test :some, :args } }
|
102
|
+
|
103
|
+
it 'builds a negated test' do
|
104
|
+
expect(some_test_class)
|
105
|
+
.to receive(:new).with(env, :some, :args, negated: true)
|
106
|
+
dsl.evaluate
|
107
|
+
end
|
108
|
+
end
|
99
109
|
end
|
100
110
|
end
|
101
111
|
end
|
@@ -8,19 +8,19 @@ module Producer::Core
|
|
8
8
|
subject(:condition) { Condition.new(tests) }
|
9
9
|
|
10
10
|
describe '.evaluate' do
|
11
|
-
let(:env) { double
|
11
|
+
let(:env) { double 'env' }
|
12
12
|
let(:block) { proc { :some_condition_code } }
|
13
13
|
|
14
14
|
it 'delegates to DSL.evaluate' do
|
15
15
|
expect(Condition::DSL)
|
16
16
|
.to receive(:evaluate).with(env) do |&b|
|
17
|
-
expect(b
|
17
|
+
expect(b).to be block
|
18
18
|
end
|
19
19
|
Condition.evaluate(env, &block)
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'returns the evaluated condition' do
|
23
|
-
condition = double
|
23
|
+
condition = double 'condition'
|
24
24
|
allow(Condition::DSL).to receive(:evaluate) { condition }
|
25
25
|
expect(Condition.evaluate(env, &block)).to be condition
|
26
26
|
end
|
@@ -84,8 +84,10 @@ module Producer::Core
|
|
84
84
|
end
|
85
85
|
|
86
86
|
describe '#!' do
|
87
|
-
|
87
|
+
[true, false].each do |b|
|
88
88
|
context "when #met? return #{b}" do
|
89
|
+
before { allow(condition).to receive(:met?) { b } }
|
90
|
+
|
89
91
|
it 'returns the negated #met?' do
|
90
92
|
expect(condition.!).to be !condition.met?
|
91
93
|
end
|
@@ -9,7 +9,7 @@ module Producer::Core
|
|
9
9
|
expect(env.instance_eval { @output }).to eq $stdout
|
10
10
|
end
|
11
11
|
|
12
|
-
it 'assigns
|
12
|
+
it 'assigns no default target' do
|
13
13
|
expect(env.target).not_to be
|
14
14
|
end
|
15
15
|
end
|
@@ -25,11 +25,11 @@ module Producer::Core
|
|
25
25
|
end
|
26
26
|
|
27
27
|
describe '#target' do
|
28
|
-
let(:target) {
|
28
|
+
let(:target) { double 'target' }
|
29
29
|
|
30
30
|
it 'returns the defined target' do
|
31
31
|
env.target = target
|
32
|
-
expect(env.target).to
|
32
|
+
expect(env.target).to be target
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -41,7 +41,7 @@ module Producer::Core
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'returns the remote' do
|
44
|
-
remote = double
|
44
|
+
remote = double 'remote'
|
45
45
|
allow(Remote).to receive(:new) { remote }
|
46
46
|
expect(env.remote).to eq remote
|
47
47
|
end
|
@@ -12,24 +12,22 @@ module Producer::Core
|
|
12
12
|
end
|
13
13
|
|
14
14
|
describe '#process_task' do
|
15
|
-
let(:action) { double
|
15
|
+
let(:action) { double 'action' }
|
16
16
|
let(:task) { double('task', actions: [action]).as_null_object }
|
17
17
|
|
18
18
|
context 'when task condition is met' do
|
19
19
|
it 'applies the actions' do
|
20
|
-
expect(action).to receive
|
21
|
-
interpreter.process_task
|
20
|
+
expect(action).to receive :apply
|
21
|
+
interpreter.process_task task
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
context 'when task condition is not met' do
|
26
|
-
before
|
27
|
-
allow(task).to receive(:condition_met?) { false }
|
28
|
-
end
|
26
|
+
before { allow(task).to receive(:condition_met?) { false } }
|
29
27
|
|
30
28
|
it 'does not apply the actions' do
|
31
|
-
expect(action).not_to receive
|
32
|
-
interpreter.process_task
|
29
|
+
expect(action).not_to receive :apply
|
30
|
+
interpreter.process_task task
|
33
31
|
end
|
34
32
|
end
|
35
33
|
end
|
@@ -4,14 +4,14 @@ module Producer::Core
|
|
4
4
|
describe Recipe::DSL do
|
5
5
|
include FixturesHelpers
|
6
6
|
|
7
|
-
let(:code) { proc { } }
|
7
|
+
let(:code) { proc { :some_recipe_code } }
|
8
8
|
let(:env) { double('env').as_null_object }
|
9
9
|
subject(:dsl) { Recipe::DSL.new(&code) }
|
10
10
|
|
11
11
|
describe '.evaluate' do
|
12
12
|
let(:code) { 'nil' }
|
13
13
|
|
14
|
-
it 'builds a new DSL sandbox with given code' do
|
14
|
+
it 'builds a new DSL sandbox with given code as string' do
|
15
15
|
expect(Recipe::DSL).to receive(:new).with(code).and_call_original
|
16
16
|
Recipe::DSL.evaluate(code, env)
|
17
17
|
end
|
@@ -24,7 +24,7 @@ module Producer::Core
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'builds a recipe with evaluated tasks' do
|
27
|
-
dsl = Recipe::DSL.new
|
27
|
+
dsl = Recipe::DSL.new { task(:some_task) { } }
|
28
28
|
allow(Recipe::DSL).to receive(:new) { dsl }
|
29
29
|
expect(Recipe).to receive(:new).with(dsl.tasks)
|
30
30
|
Recipe::DSL.evaluate(code, env)
|
@@ -62,7 +62,7 @@ module Producer::Core
|
|
62
62
|
let(:code) { proc { task(:some_task) { } } }
|
63
63
|
|
64
64
|
it 'returns registered tasks' do
|
65
|
-
dsl.evaluate
|
65
|
+
dsl.evaluate env
|
66
66
|
expect(dsl.tasks[0].name).to eq :some_task
|
67
67
|
end
|
68
68
|
end
|
@@ -70,11 +70,11 @@ module Producer::Core
|
|
70
70
|
describe '#evaluate' do
|
71
71
|
it 'evaluates its code' do
|
72
72
|
dsl = Recipe::DSL.new { throw :recipe_code }
|
73
|
-
expect { dsl.evaluate
|
73
|
+
expect { dsl.evaluate env }.to throw_symbol :recipe_code
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'returns itself' do
|
77
|
-
expect(dsl.evaluate
|
77
|
+
expect(dsl.evaluate env).to eq dsl
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -85,8 +85,8 @@ module Producer::Core
|
|
85
85
|
let(:code) { proc { env.some_message } }
|
86
86
|
|
87
87
|
it 'returns the current environment' do
|
88
|
-
expect(env).to receive
|
89
|
-
dsl.evaluate
|
88
|
+
expect(env).to receive :some_message
|
89
|
+
dsl.evaluate env
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
@@ -96,7 +96,7 @@ module Producer::Core
|
|
96
96
|
subject(:dsl) { Recipe::DSL.new(code) }
|
97
97
|
|
98
98
|
it 'sources the recipe given as argument' do
|
99
|
-
expect { dsl.evaluate
|
99
|
+
expect { dsl.evaluate env }.to throw_symbol :recipe_code
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
@@ -114,8 +114,8 @@ module Producer::Core
|
|
114
114
|
|
115
115
|
it 'builds a new evaluated task' do
|
116
116
|
expect(Task)
|
117
|
-
.to receive(:evaluate).with(:some_task, env) do |&
|
118
|
-
expect(
|
117
|
+
.to receive(:evaluate).with(:some_task, env) do |&b|
|
118
|
+
expect(b.call).to eq :some_value
|
119
119
|
end
|
120
120
|
dsl
|
121
121
|
end
|
@@ -7,7 +7,7 @@ module Producer::Core
|
|
7
7
|
subject(:recipe) { Recipe.new }
|
8
8
|
|
9
9
|
describe '.evaluate_from_file' do
|
10
|
-
let(:env) { double
|
10
|
+
let(:env) { double 'env' }
|
11
11
|
let(:filepath) { fixture_path_for 'recipes/empty.rb' }
|
12
12
|
|
13
13
|
it 'delegates to DSL.evaluate with the recipe file content' do
|
@@ -17,7 +17,7 @@ module Producer::Core
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'returns the evaluated recipe' do
|
20
|
-
recipe = double
|
20
|
+
recipe = double 'recipe'
|
21
21
|
allow(Recipe::DSL).to receive(:evaluate) { recipe }
|
22
22
|
expect(Recipe.evaluate_from_file(filepath, env)).to be recipe
|
23
23
|
end
|
@@ -3,7 +3,9 @@ require 'spec_helper'
|
|
3
3
|
module Producer::Core
|
4
4
|
describe Remote::Environment do
|
5
5
|
let(:variables) { { 'FOO' => 'bar', 'BAZ' => 'qux' } }
|
6
|
-
|
6
|
+
let(:string) { "FOO=bar\nBAZ=qux" }
|
7
|
+
let(:argument) { variables }
|
8
|
+
subject(:environment) { Remote::Environment.new(argument) }
|
7
9
|
|
8
10
|
describe '#initialize' do
|
9
11
|
context 'when a hash is given' do
|
@@ -13,7 +15,7 @@ module Producer::Core
|
|
13
15
|
end
|
14
16
|
|
15
17
|
context 'when a string is given' do
|
16
|
-
|
18
|
+
let(:argument) { string }
|
17
19
|
|
18
20
|
it 'assigns the key/value pairs' do
|
19
21
|
expect(environment.instance_eval { @variables }).to eq variables
|
@@ -15,12 +15,12 @@ module Producer::Core
|
|
15
15
|
before { sftp_story }
|
16
16
|
|
17
17
|
it 'builds a new SFTP session' do
|
18
|
-
expect(remote.session.sftp).to receive
|
18
|
+
expect(remote.session.sftp).to receive :connect
|
19
19
|
fs.sftp
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'returns the new SFTP session' do
|
23
|
-
session = double
|
23
|
+
session = double 'session'
|
24
24
|
allow(remote.session.sftp).to receive(:connect) { session }
|
25
25
|
expect(fs.sftp).to be session
|
26
26
|
end
|
@@ -35,7 +35,7 @@ module Producer::Core
|
|
35
35
|
# part of net-ssh story helpers, which are more close to integration tests.
|
36
36
|
describe '#has_file?', :ssh do
|
37
37
|
let(:file_path) { "some_file_path" }
|
38
|
-
let(:stat) { double
|
38
|
+
let(:stat) { double 'stat' }
|
39
39
|
|
40
40
|
before do
|
41
41
|
sftp_story
|
@@ -44,35 +44,31 @@ module Producer::Core
|
|
44
44
|
|
45
45
|
context 'when path given as argument exists' do
|
46
46
|
context 'when path is a file' do
|
47
|
-
before
|
48
|
-
allow(stat).to receive(:file?) { true }
|
49
|
-
end
|
47
|
+
before { allow(stat).to receive(:file?) { true } }
|
50
48
|
|
51
49
|
it 'returns true' do
|
52
|
-
expect(fs.has_file?
|
50
|
+
expect(fs.has_file? file_path).to be true
|
53
51
|
end
|
54
52
|
end
|
55
53
|
|
56
54
|
context 'when path is not a file' do
|
57
|
-
before
|
58
|
-
allow(stat).to receive(:file?) { false }
|
59
|
-
end
|
55
|
+
before { allow(stat).to receive(:file?) { false } }
|
60
56
|
|
61
57
|
it 'returns false' do
|
62
|
-
expect(fs.has_file?
|
58
|
+
expect(fs.has_file? file_path).to be false
|
63
59
|
end
|
64
60
|
end
|
65
61
|
end
|
66
62
|
|
67
63
|
context 'when querying the path raises a Net::SFTP::StatusException' do
|
68
64
|
before do
|
69
|
-
response = double
|
65
|
+
response = double 'response', code: '42', message: 'some message'
|
70
66
|
ex = Net::SFTP::StatusException.new(response)
|
71
67
|
allow(stat).to receive(:file?).and_raise(ex)
|
72
68
|
end
|
73
69
|
|
74
70
|
it 'returns false' do
|
75
|
-
expect(fs.has_file?
|
71
|
+
expect(fs.has_file? file_path).to be false
|
76
72
|
end
|
77
73
|
end
|
78
74
|
end
|
@@ -7,7 +7,7 @@ module Producer::Core
|
|
7
7
|
|
8
8
|
describe '#hostname' do
|
9
9
|
it 'returns the assignated hostname' do
|
10
|
-
expect(remote.hostname).to
|
10
|
+
expect(remote.hostname).to eq hostname
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -69,12 +69,12 @@ module Producer::Core
|
|
69
69
|
|
70
70
|
describe '#fs' do
|
71
71
|
it 'builds a new FS' do
|
72
|
-
expect(Remote::FS).to receive
|
72
|
+
expect(Remote::FS).to receive :new
|
73
73
|
remote.fs
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'returns the new FS instance' do
|
77
|
-
fs = double
|
77
|
+
fs = double 'fs'
|
78
78
|
allow(Remote::FS).to receive(:new) { fs }
|
79
79
|
expect(remote.fs).to be fs
|
80
80
|
end
|
@@ -103,7 +103,7 @@ module Producer::Core
|
|
103
103
|
ch.sends_exec command
|
104
104
|
ch.gets_data arguments
|
105
105
|
end
|
106
|
-
expect(remote.execute
|
106
|
+
expect(remote.execute command).to eq arguments
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'raises an exception when the exit status code is not 0' do
|
@@ -112,7 +112,7 @@ module Producer::Core
|
|
112
112
|
ch.gets_data arguments
|
113
113
|
ch.gets_exit_status 1
|
114
114
|
end
|
115
|
-
expect { remote.execute
|
115
|
+
expect { remote.execute command }
|
116
116
|
.to raise_error(RemoteCommandExecutionError)
|
117
117
|
end
|
118
118
|
end
|
@@ -134,7 +134,7 @@ module Producer::Core
|
|
134
134
|
end
|
135
135
|
|
136
136
|
it 'returns the environment' do
|
137
|
-
environment = double
|
137
|
+
environment = double 'environment'
|
138
138
|
allow(Remote::Environment).to receive(:new) { environment }
|
139
139
|
expect(remote.environment).to be environment
|
140
140
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module Producer::Core
|
4
4
|
describe Task::DSL do
|
5
5
|
let(:block) { proc { } }
|
6
|
-
let(:env) { double
|
6
|
+
let(:env) { double 'env' }
|
7
7
|
subject(:dsl) { Task::DSL.new(&block) }
|
8
8
|
|
9
9
|
%w[echo sh].each do |action|
|
@@ -16,7 +16,11 @@ module Producer::Core
|
|
16
16
|
let(:name) { :some_task }
|
17
17
|
|
18
18
|
it 'builds a new DSL sandbox with given code' do
|
19
|
-
|
19
|
+
dsl = double('dsl').as_null_object
|
20
|
+
expect(Task::DSL).to receive(:new).with(no_args) do |&b|
|
21
|
+
expect(b).to be block
|
22
|
+
dsl
|
23
|
+
end
|
20
24
|
Task::DSL.evaluate(name, env, &block)
|
21
25
|
end
|
22
26
|
|
@@ -38,7 +42,7 @@ module Producer::Core
|
|
38
42
|
end
|
39
43
|
|
40
44
|
it 'returns the task' do
|
41
|
-
task = double
|
45
|
+
task = double 'task'
|
42
46
|
allow(Task).to receive(:new) { task }
|
43
47
|
expect(Task::DSL.evaluate(name, env, &block)).to be task
|
44
48
|
end
|
@@ -57,7 +61,7 @@ module Producer::Core
|
|
57
61
|
end
|
58
62
|
|
59
63
|
it 'assigns true as the condition' do
|
60
|
-
expect(dsl.instance_eval { @condition }).to
|
64
|
+
expect(dsl.instance_eval { @condition }).to be true
|
61
65
|
end
|
62
66
|
end
|
63
67
|
|
@@ -68,11 +72,20 @@ module Producer::Core
|
|
68
72
|
end
|
69
73
|
end
|
70
74
|
|
75
|
+
describe '#condition' do
|
76
|
+
context 'without block' do
|
77
|
+
it 'returns the assigned condition' do
|
78
|
+
dsl.instance_eval { @condition = :some_condition }
|
79
|
+
expect(dsl.condition).to be :some_condition
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
71
84
|
describe '#evaluate' do
|
72
85
|
let(:block) { proc { throw :task_code } }
|
73
86
|
|
74
87
|
it 'evaluates its code' do
|
75
|
-
expect { dsl.evaluate
|
88
|
+
expect { dsl.evaluate env }
|
76
89
|
.to throw_symbol :task_code
|
77
90
|
end
|
78
91
|
|
@@ -82,7 +95,7 @@ module Producer::Core
|
|
82
95
|
|
83
96
|
before do
|
84
97
|
Task::DSL.define_action(:some_action, some_action_class)
|
85
|
-
dsl.evaluate
|
98
|
+
dsl.evaluate env
|
86
99
|
end
|
87
100
|
|
88
101
|
it 'registers the action' do
|
@@ -118,14 +131,5 @@ module Producer::Core
|
|
118
131
|
end
|
119
132
|
end
|
120
133
|
end
|
121
|
-
|
122
|
-
describe '#condition' do
|
123
|
-
context 'without block' do
|
124
|
-
it 'returns the assigned condition' do
|
125
|
-
dsl.instance_eval { @condition = :some_condition }
|
126
|
-
expect(dsl.condition).to be :some_condition
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
134
|
end
|
131
135
|
end
|
@@ -3,24 +3,24 @@ require 'spec_helper'
|
|
3
3
|
module Producer::Core
|
4
4
|
describe Task do
|
5
5
|
let(:name) { :some_task }
|
6
|
-
let(:action) { double
|
7
|
-
let(:condition) { double
|
6
|
+
let(:action) { double 'action' }
|
7
|
+
let(:condition) { double 'condition' }
|
8
8
|
subject(:task) { Task.new(name, [action], condition) }
|
9
9
|
|
10
10
|
describe '.evaluate' do
|
11
|
-
let(:env) { double
|
12
|
-
let(:block) { proc { :
|
11
|
+
let(:env) { double 'env' }
|
12
|
+
let(:block) { proc { :some_task_code } }
|
13
13
|
|
14
14
|
it 'delegates to DSL.evaluate' do
|
15
15
|
expect(Task::DSL)
|
16
16
|
.to receive(:evaluate).with(name, env) do |&b|
|
17
|
-
expect(b
|
17
|
+
expect(b).to be block
|
18
18
|
end
|
19
19
|
Task.evaluate(name, env, &block)
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'returns the evaluated task' do
|
23
|
-
task = double
|
23
|
+
task = double 'task'
|
24
24
|
allow(Task::DSL).to receive(:evaluate) { task }
|
25
25
|
expect(Task.evaluate(name, env, &block)).to be task
|
26
26
|
end
|
@@ -40,14 +40,14 @@ module Producer::Core
|
|
40
40
|
end
|
41
41
|
|
42
42
|
context 'when only the name is given as argument' do
|
43
|
-
subject(:task)
|
43
|
+
subject(:task) { Task.new(name) }
|
44
44
|
|
45
45
|
it 'assigns no action' do
|
46
46
|
expect(task.actions).to be_empty
|
47
47
|
end
|
48
48
|
|
49
|
-
it 'assigns a
|
50
|
-
expect(task.condition).to
|
49
|
+
it 'assigns a true condition' do
|
50
|
+
expect(task.condition).to be true
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -4,26 +4,79 @@ module Producer::Core
|
|
4
4
|
describe Test do
|
5
5
|
let(:env) { double 'env' }
|
6
6
|
let(:arguments) { [:some, :arguments] }
|
7
|
-
subject(:
|
7
|
+
subject(:test) { Test.new(env, *arguments) }
|
8
8
|
|
9
9
|
describe '#initialize' do
|
10
10
|
it 'assigns the env' do
|
11
|
-
expect(
|
11
|
+
expect(test.instance_eval { @env }).to be env
|
12
12
|
end
|
13
|
+
|
13
14
|
it 'assigns the arguments' do
|
14
|
-
expect(
|
15
|
+
expect(test.instance_eval { @arguments }).to eq arguments
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'assigns negated as false by default' do
|
19
|
+
expect(test.instance_eval { @negated }).to be false
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'when negated option is true' do
|
23
|
+
subject(:test) { Test.new(env, *arguments, negated: true) }
|
24
|
+
|
25
|
+
it 'assigns negated as true' do
|
26
|
+
expect(test.instance_eval { @negated }).to be true
|
27
|
+
end
|
15
28
|
end
|
16
29
|
end
|
17
30
|
|
18
31
|
describe '#env' do
|
19
32
|
it 'returns the assigned env' do
|
20
|
-
expect(
|
33
|
+
expect(test.env).to be env
|
21
34
|
end
|
22
35
|
end
|
23
36
|
|
24
37
|
describe '#arguments' do
|
25
38
|
it 'returns the assigned arguments' do
|
26
|
-
expect(
|
39
|
+
expect(test.arguments).to eq arguments
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#negated?' do
|
44
|
+
it 'returns false' do
|
45
|
+
expect(test.negated?).to be false
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when test is negated' do
|
49
|
+
subject(:test) { Test.new(env, *arguments, negated: true) }
|
50
|
+
|
51
|
+
it 'returns true' do
|
52
|
+
expect(test.negated?).to be true
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#pass?' do
|
58
|
+
it 'returns true when #verify is true' do
|
59
|
+
allow(test).to receive(:verify) { true }
|
60
|
+
expect(test.pass?).to be true
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'returns false when #verify is false' do
|
64
|
+
allow(test).to receive(:verify) { false }
|
65
|
+
expect(test.pass?).to be false
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when test is negated' do
|
69
|
+
subject(:test) { Test.new(env, *arguments, negated: true) }
|
70
|
+
|
71
|
+
it 'returns false when #verify is true' do
|
72
|
+
allow(test).to receive(:verify) { true }
|
73
|
+
expect(test.pass?).to be false
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'returns true when #verify is false' do
|
77
|
+
allow(test).to receive(:verify) { false }
|
78
|
+
expect(test.pass?).to be true
|
79
|
+
end
|
27
80
|
end
|
28
81
|
end
|
29
82
|
end
|
@@ -10,8 +10,8 @@ module Producer::Core
|
|
10
10
|
expect(has_env).to be_a Test
|
11
11
|
end
|
12
12
|
|
13
|
-
describe '#
|
14
|
-
let(:environment) { double
|
13
|
+
describe '#verify' do
|
14
|
+
let(:environment) { double 'environment' }
|
15
15
|
|
16
16
|
before do
|
17
17
|
allow(env.remote).to receive(:environment) { environment }
|
@@ -19,22 +19,22 @@ module Producer::Core
|
|
19
19
|
|
20
20
|
it 'stringifies the queried variable name' do
|
21
21
|
expect(environment).to receive(:has_key?).with(kind_of(String))
|
22
|
-
has_env.
|
22
|
+
has_env.verify
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'upcases the queried variable name' do
|
26
26
|
expect(environment).to receive(:has_key?).with('SOME_VARIABLE_NAME')
|
27
|
-
has_env.
|
27
|
+
has_env.verify
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'returns true when remote environment var is defined' do
|
31
31
|
allow(environment).to receive(:has_key?) { true }
|
32
|
-
expect(has_env.
|
32
|
+
expect(has_env.verify).to be true
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'returns false when remote environment var is not defined' do
|
36
36
|
allow(environment).to receive(:has_key?) { false }
|
37
|
-
expect(has_env.
|
37
|
+
expect(has_env.verify).to be false
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -10,18 +10,18 @@ module Producer::Core
|
|
10
10
|
expect(has_file).to be_a Test
|
11
11
|
end
|
12
12
|
|
13
|
-
describe '#
|
13
|
+
describe '#verify', :ssh do
|
14
14
|
before { sftp_story }
|
15
15
|
|
16
16
|
it 'delegates the call on remote FS' do
|
17
17
|
expect(env.remote.fs).to receive(:has_file?).with(filepath)
|
18
|
-
has_file.
|
18
|
+
has_file.verify
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'returns the file existence' do
|
22
|
-
existence = double
|
22
|
+
existence = double 'existence'
|
23
23
|
allow(env.remote.fs).to receive(:has_file?) { existence }
|
24
|
-
expect(has_file.
|
24
|
+
expect(has_file.verify).to be existence
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -36,7 +36,7 @@ module NetSSHStoryHelpers
|
|
36
36
|
def sftp_story
|
37
37
|
story do |session|
|
38
38
|
ch = session.opens_channel
|
39
|
-
ch.sends_subsystem
|
39
|
+
ch.sends_subsystem 'sftp'
|
40
40
|
ch.sends_packet(
|
41
41
|
Net::SFTP::Constants::PacketTypes::FXP_INIT, :long,
|
42
42
|
Net::SFTP::Session::HIGHEST_PROTOCOL_VERSION_SUPPORTED
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: producer-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibault Jouan
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- features/tasks/evaluation.feature
|
128
128
|
- features/tests/has_env.feature
|
129
129
|
- features/tests/has_file.feature
|
130
|
+
- features/tests/negated_test.feature
|
130
131
|
- lib/producer/core.rb
|
131
132
|
- lib/producer/core/action.rb
|
132
133
|
- lib/producer/core/actions/echo.rb
|
@@ -196,7 +197,7 @@ rubyforge_project:
|
|
196
197
|
rubygems_version: 2.4.5
|
197
198
|
signing_key:
|
198
199
|
specification_version: 4
|
199
|
-
summary: producer-core-0.1.
|
200
|
+
summary: producer-core-0.1.5
|
200
201
|
test_files:
|
201
202
|
- features/actions/echo.feature
|
202
203
|
- features/actions/sh.feature
|
@@ -217,6 +218,7 @@ test_files:
|
|
217
218
|
- features/tasks/evaluation.feature
|
218
219
|
- features/tests/has_env.feature
|
219
220
|
- features/tests/has_file.feature
|
221
|
+
- features/tests/negated_test.feature
|
220
222
|
- spec/fixtures/recipes/empty.rb
|
221
223
|
- spec/fixtures/recipes/throw.rb
|
222
224
|
- spec/producer/core/action_spec.rb
|