producer-core 0.5.8 → 0.5.9

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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/lib/producer/core/version.rb +1 -1
  3. metadata +21 -202
  4. data/.gitignore +0 -3
  5. data/.travis.yml +0 -14
  6. data/Gemfile +0 -5
  7. data/Guardfile +0 -14
  8. data/LICENSE +0 -30
  9. data/Rakefile +0 -19
  10. data/config/cucumber.yaml +0 -2
  11. data/features/actions/echo.feature +0 -11
  12. data/features/actions/file_append.feature +0 -15
  13. data/features/actions/file_replace_content.feature +0 -24
  14. data/features/actions/file_write.feature +0 -21
  15. data/features/actions/mkdir.feature +0 -31
  16. data/features/actions/sh.feature +0 -43
  17. data/features/actions/yaml_write.feature +0 -14
  18. data/features/cli/debug.feature +0 -19
  19. data/features/cli/dry_run.feature +0 -22
  20. data/features/cli/error_reporting.feature +0 -32
  21. data/features/cli/target.feature +0 -15
  22. data/features/cli/usage.feature +0 -13
  23. data/features/cli/verbose.feature +0 -48
  24. data/features/condition/negated_test.feature +0 -47
  25. data/features/condition/target.feature +0 -15
  26. data/features/recipe/compose_macro.feature +0 -29
  27. data/features/recipe/errors.feature +0 -9
  28. data/features/recipe/macro.feature +0 -50
  29. data/features/recipe/registry.feature +0 -82
  30. data/features/recipe/source.feature +0 -17
  31. data/features/recipe/target.feature +0 -23
  32. data/features/recipe/test_macro.feature +0 -50
  33. data/features/ssh/config.feature +0 -25
  34. data/features/steps/environment_steps.rb +0 -3
  35. data/features/support/env.rb +0 -1
  36. data/features/task/ask.feature +0 -23
  37. data/features/task/condition.feature +0 -13
  38. data/features/task/nested_tasks.feature +0 -20
  39. data/features/task/recipe_argv.feature +0 -13
  40. data/features/task/target.feature +0 -11
  41. data/features/task/template.feature +0 -49
  42. data/features/tests/dir.feature +0 -21
  43. data/features/tests/env.feature +0 -47
  44. data/features/tests/executable.feature +0 -26
  45. data/features/tests/file.feature +0 -21
  46. data/features/tests/file_contains.feature +0 -26
  47. data/features/tests/file_eq.feature +0 -26
  48. data/features/tests/file_match.feature +0 -26
  49. data/features/tests/shell_command_status.feature +0 -46
  50. data/features/tests/yaml_eq.feature +0 -26
  51. data/producer-core.gemspec +0 -28
  52. data/spec/fixtures/recipes/empty.rb +0 -1
  53. data/spec/fixtures/recipes/raise.rb +0 -1
  54. data/spec/fixtures/recipes/some_recipe.rb +0 -5
  55. data/spec/fixtures/recipes/throw.rb +0 -1
  56. data/spec/fixtures/templates/basic.erb +0 -1
  57. data/spec/fixtures/templates/basic_yaml.yaml +0 -1
  58. data/spec/fixtures/templates/variables.erb +0 -1
  59. data/spec/producer/core/action_spec.rb +0 -46
  60. data/spec/producer/core/actions/echo_spec.rb +0 -20
  61. data/spec/producer/core/actions/file_append_spec.rb +0 -49
  62. data/spec/producer/core/actions/file_replace_content_spec.rb +0 -42
  63. data/spec/producer/core/actions/file_writer_spec.rb +0 -52
  64. data/spec/producer/core/actions/mkdir_spec.rb +0 -71
  65. data/spec/producer/core/actions/shell_command_spec.rb +0 -45
  66. data/spec/producer/core/actions/yaml_writer_spec.rb +0 -25
  67. data/spec/producer/core/cli_spec.rb +0 -211
  68. data/spec/producer/core/condition_spec.rb +0 -198
  69. data/spec/producer/core/env_spec.rb +0 -196
  70. data/spec/producer/core/error_formatter_spec.rb +0 -86
  71. data/spec/producer/core/logger_formatter_spec.rb +0 -26
  72. data/spec/producer/core/prompter_spec.rb +0 -40
  73. data/spec/producer/core/recipe/file_evaluator_spec.rb +0 -22
  74. data/spec/producer/core/recipe_spec.rb +0 -126
  75. data/spec/producer/core/remote/environment_spec.rb +0 -19
  76. data/spec/producer/core/remote/fs_spec.rb +0 -144
  77. data/spec/producer/core/remote_spec.rb +0 -168
  78. data/spec/producer/core/task_spec.rb +0 -198
  79. data/spec/producer/core/template_spec.rb +0 -41
  80. data/spec/producer/core/test_spec.rb +0 -7
  81. data/spec/producer/core/testing/mock_remote_spec.rb +0 -66
  82. data/spec/producer/core/tests/condition_test_spec.rb +0 -55
  83. data/spec/producer/core/tests/file_contains_spec.rb +0 -46
  84. data/spec/producer/core/tests/file_eq_spec.rb +0 -45
  85. data/spec/producer/core/tests/file_match_spec.rb +0 -46
  86. data/spec/producer/core/tests/has_dir_spec.rb +0 -25
  87. data/spec/producer/core/tests/has_env_spec.rb +0 -75
  88. data/spec/producer/core/tests/has_executable_spec.rb +0 -29
  89. data/spec/producer/core/tests/has_file_spec.rb +0 -25
  90. data/spec/producer/core/tests/shell_command_status_spec.rb +0 -34
  91. data/spec/producer/core/tests/yaml_eq_spec.rb +0 -47
  92. data/spec/producer/core/worker_spec.rb +0 -88
  93. data/spec/spec_helper.rb +0 -13
  94. data/spec/support/exit_helpers.rb +0 -6
  95. data/spec/support/fixtures_helpers.rb +0 -7
  96. data/spec/support/net_ssh_story_helpers.rb +0 -36
  97. data/spec/support/shared_action.rb +0 -44
  98. data/spec/support/shared_test.rb +0 -82
  99. data/spec/support/test_env_helpers.rb +0 -44
@@ -1,15 +0,0 @@
1
- Feature: CLI target option
2
-
3
- Background:
4
- Given a recipe with:
5
- """
6
- target 'some_host.example'
7
-
8
- task :some_task do
9
- echo env.target
10
- end
11
- """
12
-
13
- Scenario: override the recipe target
14
- When I successfully execute the recipe with option -t other_host.example
15
- Then the output must contain exactly "other_host.example\n"
@@ -1,13 +0,0 @@
1
- Feature: CLI usage
2
-
3
- @exec
4
- Scenario: prints the usage when an argument is missing
5
- When I run `producer`
6
- Then the exit status must be 64
7
- And the output must contain exactly the usage
8
-
9
- @exec
10
- Scenario: prints the usage when unknown option switch is given
11
- When I run `producer --unknown-option`
12
- Then the exit status must be 64
13
- And the output must contain exactly the usage
@@ -1,48 +0,0 @@
1
- Feature: CLI verbose option
2
-
3
- Background:
4
- Given a recipe with:
5
- """
6
- task :task_ok do
7
- condition { true }
8
-
9
- echo 'some message'
10
- end
11
-
12
- task :task_ko do
13
- condition { false }
14
- end
15
- """
16
-
17
- Scenario: prints tasks name
18
- When I successfully execute the recipe with option -v
19
- Then the output must match /Task:.+`task_ok'/
20
- And the output must match /Task:.+`task_ko'/
21
-
22
- Scenario: appends `applying' or `skipped' after tasks name
23
- When I successfully execute the recipe with option -v
24
- Then the output must match /task_ok.+applying...$/
25
- And the output must match /task_ko.+skipped$/
26
-
27
- Scenario: prints actions info
28
- When I successfully execute the recipe with option -v
29
- Then the output must match /^ action: echo/
30
-
31
- Scenario: prints actions arguments
32
- When I successfully execute the recipe with option -v
33
- Then the output must match /echo \["some message"\]/
34
-
35
- Scenario: summarizes printed actions arguments
36
- Given a recipe with:
37
- """
38
- task :some_task do
39
- echo 'long message ' * 32
40
- end
41
- """
42
- When I successfully execute the recipe with option -v
43
- Then the output must match /action: .{,70}$/
44
-
45
- Scenario: enables verbose mode from the environment
46
- Given I set the environment variable "PRODUCER_VERBOSE"
47
- When I successfully execute the recipe
48
- Then the output must contain "Task"
@@ -1,47 +0,0 @@
1
- Feature: negated test prefix (no_)
2
-
3
- Scenario: prefixed test fails when non-prefixed test is successful
4
- Given a recipe with:
5
- """
6
- test_macro :even? do |n|
7
- n % 2 == 0
8
- end
9
-
10
- task :successful_test do
11
- condition { even? 4 }
12
-
13
- echo 'successful_test'
14
- end
15
-
16
- task :negated_test do
17
- condition { no_even? 4 }
18
-
19
- echo 'negated_test'
20
- end
21
- """
22
- When I successfully execute the recipe
23
- Then the output must contain "successful_test"
24
- And the output must not contain "negated_test"
25
-
26
- Scenario: prefixed test succeed when non-prefixed test is failing
27
- Given a recipe with:
28
- """
29
- test_macro :even? do |n|
30
- n % 2 == 0
31
- end
32
-
33
- task :failing_test do
34
- condition { even? 5 }
35
-
36
- echo 'failing_test'
37
- end
38
-
39
- task :negated_test do
40
- condition { no_even? 5 }
41
-
42
- echo 'negated_test'
43
- end
44
- """
45
- When I successfully execute the recipe
46
- Then the output must not contain "failing_test"
47
- And the output must contain "negated_test"
@@ -1,15 +0,0 @@
1
- Feature: `target' condition keyword
2
-
3
- Scenario: returns the current target
4
- Given a recipe with:
5
- """
6
- target 'some_host.example'
7
-
8
- task :test_target do
9
- condition { target == 'some_host.example' }
10
-
11
- echo 'OK'
12
- end
13
- """
14
- When I execute the recipe
15
- Then the output must contain "OK"
@@ -1,29 +0,0 @@
1
- Feature: `compose_macro' recipe keyword
2
-
3
- Background:
4
- Given a recipe named "composed_macro.rb" with:
5
- """
6
- macro :hello do |prefix, *args|
7
- echo 'hello %s %s' % [prefix, args.join(', ')]
8
- end
9
-
10
- compose_macro :hello_composed, :hello, 'composed'
11
- """
12
-
13
- Scenario: declares a composed macro as recipe keyword
14
- Given a recipe with:
15
- """
16
- source 'composed_macro'
17
- hello_composed :foo, :bar
18
- """
19
- When I successfully execute the recipe
20
- Then the output must contain "hello composed foo, bar"
21
-
22
- Scenario: declares a composed macro as task keyword
23
- Given a recipe with:
24
- """
25
- source 'composed_macro'
26
- task(:some_task) { hello_composed :foo, :bar }
27
- """
28
- When I successfully execute the recipe
29
- Then the output must contain "hello composed foo, bar"
@@ -1,9 +0,0 @@
1
- Feature: recipe errors
2
-
3
- Scenario: reports when remote target is invalid
4
- Given a recipe with:
5
- """
6
- task(:some_task) { sh 'true' }
7
- """
8
- When I execute the recipe
9
- Then the output must match /\ARemoteInvalidError:\s+\w+/
@@ -1,50 +0,0 @@
1
- Feature: `macro' recipe keyword
2
-
3
- Scenario: declares a new recipe keyword accepting task code
4
- Given a recipe with:
5
- """
6
- macro :hello do
7
- echo 'hello macro'
8
- end
9
-
10
- hello
11
- """
12
- When I successfully execute the recipe
13
- Then the output must contain "hello macro"
14
-
15
- Scenario: declares a new task keyword
16
- Given a recipe with:
17
- """
18
- macro(:hello) { echo 'hello macro' }
19
-
20
- task(:some_task) { hello }
21
- """
22
- When I successfully execute the recipe
23
- Then the output must contain "hello macro"
24
-
25
- Scenario: supports arguments
26
- Given a recipe with:
27
- """
28
- macro :my_echo do |kind, message|
29
- echo "#{kind}: #{message}"
30
- end
31
-
32
- my_echo 'my', 'hello'
33
- """
34
- When I successfully execute the recipe
35
- Then the output must contain "my: hello"
36
-
37
- Scenario: supports arguments in conditions
38
- Given a recipe with:
39
- """
40
- macro :my_echo do |message|
41
- condition { message =~ /foo/ }
42
-
43
- echo message
44
- end
45
-
46
- %w[foo bar].each { |e| my_echo e }
47
- """
48
- When I successfully execute the recipe
49
- Then the output must contain "foo"
50
- And the output must not contain "bar"
@@ -1,82 +0,0 @@
1
- Feature: key/value registry
2
-
3
- Scenario: `get' keyword in a task fetches a value registered with `set'
4
- Given a recipe with:
5
- """
6
- set :some_key, 'some_value'
7
-
8
- task :registry_testing do
9
- echo get :some_key
10
- end
11
- """
12
- When I successfully execute the recipe
13
- Then the output must contain "some_value"
14
-
15
- Scenario: `get' keyword fetches a value from the recipe
16
- Given a recipe with:
17
- """
18
- set :some_key, 'some_value'
19
- set :other_key, get(:some_key)
20
-
21
- task :registry_testing do
22
- echo get :other_key
23
- end
24
- """
25
- When I successfully execute the recipe
26
- Then the output must contain "some_value"
27
-
28
- Scenario: `get' keyword fetches a value from a condition
29
- Given a recipe with:
30
- """
31
- set :some_key, 'some_value'
32
-
33
- task(:ok) { condition { get :some_key }; echo get :some_key }
34
- """
35
- When I successfully execute the recipe
36
- Then the output must contain "some_value"
37
-
38
- Scenario: `get' keyword should trigger an error when given invalid key
39
- Given a recipe with:
40
- """
41
- task :some_task do
42
- echo get :no_key
43
- echo 'after_fail'
44
- end
45
- """
46
- When I execute the recipe
47
- Then the output must not contain "after_fail"
48
- And the output must match /\A\w+Error:\s+:no_key/
49
-
50
- Scenario: `get' keyword accepts a default value
51
- Given a recipe with:
52
- """
53
- task :registry_testing do
54
- echo get(:some_key, 'some_value')
55
- end
56
- """
57
- When I successfully execute the recipe
58
- Then the output must contain "some_value"
59
-
60
- Scenario: `set' keyword sets a value from a task
61
- Given a recipe with:
62
- """
63
- task :registry_testing do
64
- set :some_key, 'some_value'
65
- echo get :some_key
66
- end
67
- """
68
- When I successfully execute the recipe
69
- Then the output must contain "some_value"
70
-
71
- Scenario: `set?' keyword tests wether given key is defined
72
- Given a recipe with:
73
- """
74
- set :some_key, 'some_value'
75
- task :registry_testing do
76
- echo 'some_value_set' if set? :some_key
77
- echo 'other_value' if set? :other_key
78
- end
79
- """
80
- When I execute the recipe
81
- Then the output must contain "some_value_set"
82
- And the output must not contain "other_value"
@@ -1,17 +0,0 @@
1
- Feature: `source' recipe keyword
2
-
3
- Background:
4
- Given a recipe with:
5
- """
6
- source 'sourced_recipe'
7
- """
8
-
9
- Scenario: requires a recipe file
10
- Given a file named "sourced_recipe.rb" with:
11
- """
12
- task :some_task do
13
- echo 'sourced recipe'
14
- end
15
- """
16
- When I successfully execute the recipe
17
- Then the output must contain "sourced recipe"
@@ -1,23 +0,0 @@
1
- Feature: `target' recipe keyword
2
-
3
- Scenario: registers the target host on which tasks should be applied
4
- Given a recipe with:
5
- """
6
- target 'some_host.example'
7
-
8
- task :some_task do
9
- echo env.target
10
- end
11
- """
12
- When I successfully execute the recipe
13
- Then the output must contain "some_host.example"
14
-
15
- Scenario: returns current target when no arguments are provided
16
- Given a recipe with:
17
- """
18
- target 'some_host.example'
19
-
20
- env.output.puts target
21
- """
22
- When I successfully execute the recipe
23
- Then the output must contain "some_host.example"
@@ -1,50 +0,0 @@
1
- Feature: `test_macro' recipe keyword
2
-
3
- Scenario: declares a new test keyword
4
- Given a recipe with:
5
- """
6
- test_macro :even? do |n|
7
- n % 2 == 0
8
- end
9
-
10
- [1, 2].each do |n|
11
- task "test_macro-even-#{n}" do
12
- condition { even? n }
13
- echo n
14
- end
15
- end
16
- """
17
- When I successfully execute the recipe
18
- Then the output must contain "2"
19
- And the output must not contain "1"
20
-
21
- @sshd
22
- Scenario: has access to core tests
23
- Given a recipe with:
24
- """
25
- test_macro(:other_env?) { |k| env? k }
26
-
27
- [:shell, :non_existent_var].each do |k|
28
- task "test_macro-condition-#{k}" do
29
- condition { other_env? k }
30
- echo "#{k}_ok"
31
- end
32
- end
33
- """
34
- When I successfully execute the recipe on remote target
35
- Then the output must contain "shell_ok"
36
- Then the output must not contain "non_existent_var_ok"
37
-
38
- Scenario: has access to other tests declared with `test_macro'
39
- Given a recipe with:
40
- """
41
- test_macro(:one?) { |e| e == 1 }
42
- test_macro(:one_alias?) { |e| one? e }
43
-
44
- task :test_macro_macro do
45
- condition { one_alias? 1 }
46
- echo 'one_alias_ok'
47
- end
48
- """
49
- When I successfully execute the recipe
50
- Then the output must contain "one_alias_ok"
@@ -1,25 +0,0 @@
1
- Feature: SSH settings
2
-
3
- Background:
4
- Given a recipe with:
5
- """
6
- target 'some_host.example'
7
-
8
- task :some_task do
9
- echo env.remote.user_name
10
- end
11
- """
12
-
13
- Scenario: uses current user login name as SSH user name by default
14
- When I successfully execute the recipe
15
- Then the output must contain my current login name
16
-
17
- @mocked-home-directory
18
- Scenario: uses configured SSH user name for a given host
19
- Given an SSH config with:
20
- """
21
- Host some_host.example
22
- User some_user
23
- """
24
- When I successfully execute the recipe
25
- Then the output must contain "some_user"
@@ -1,3 +0,0 @@
1
- Given /^I set the environment variable "([^"]+)"$/ do |variable|
2
- set_environment_variable variable, 'yes'
3
- end
@@ -1 +0,0 @@
1
- require 'producer/core/testing/cucumber'
@@ -1,23 +0,0 @@
1
- Feature: `ask' task keyword
2
-
3
- @exec
4
- Scenario: prompts user with a list of choices on standard output
5
- Given a recipe with:
6
- """
7
- task :ask_letter do
8
- letter = ask 'Which letter?', [[:a, ?A], [:b, ?B]]
9
-
10
- echo letter.inspect
11
- end
12
- """
13
- When I execute the recipe interactively
14
- And I type "1"
15
- Then the output must contain:
16
- """
17
- Which letter?
18
- 0: A
19
- 1: B
20
- Choice:
21
- :b
22
- """
23
- And the exit status must be 0
@@ -1,13 +0,0 @@
1
- Feature: `condition' task keyword
2
-
3
- Scenario: prevents task actions application when condition is not met
4
- Given a recipe with:
5
- """
6
- task :some_task do
7
- condition { false }
8
-
9
- echo 'evaluated'
10
- end
11
- """
12
- When I successfully execute the recipe
13
- Then the output must not contain "evaluated"
@@ -1,20 +0,0 @@
1
- Feature: nested tasks
2
-
3
- Background:
4
- Given a recipe with:
5
- """
6
- task :outer_task do
7
- task :inner_task do
8
- echo 'OK'
9
- end
10
- end
11
- """
12
-
13
- Scenario: applies nested tasks
14
- When I successfully execute the recipe
15
- Then the output must match /\AOK/
16
-
17
- Scenario: indents logging from nested tasks
18
- When I successfully execute the recipe with option -v
19
- Then the output must match /^ Task:.+/
20
- And the output must match /^ action:.+/
@@ -1,13 +0,0 @@
1
- Feature: `recipe_argv' task keyword
2
-
3
- Background:
4
- Given a recipe with:
5
- """
6
- task :echo_arguments do
7
- echo recipe_argv
8
- end
9
- """
10
-
11
- Scenario: returns recipe arguments
12
- When I successfully execute the recipe with arguments "foo bar"
13
- Then the output must contain exactly "foo\nbar\n"
@@ -1,11 +0,0 @@
1
- Feature: `target' task keyword
2
-
3
- Scenario: returns the current target
4
- Given a recipe with:
5
- """
6
- target 'some_host.example'
7
-
8
- task(:echo_target) { echo target }
9
- """
10
- When I execute the recipe
11
- Then the output must contain "some_host.example"
@@ -1,49 +0,0 @@
1
- Feature: `template' task keyword
2
-
3
- Scenario: renders an ERB template file
4
- Given a file named "templates/basic.erb" with:
5
- """
6
- basic template
7
- """
8
- And a recipe with:
9
- """
10
- task(:echo_template) { echo template 'basic' }
11
- """
12
- When I execute the recipe
13
- Then the output must contain "basic template"
14
-
15
- Scenario: renders ERB with given attributes as member data
16
- Given a file named "templates/variables.erb" with:
17
- """
18
- <%= @foo %>
19
- """
20
- And a recipe with:
21
- """
22
- task(:echo_template) { echo template('variables', foo: 'bar') }
23
- """
24
- When I execute the recipe
25
- Then the output must contain "bar"
26
-
27
- Scenario: renders without `templates' search path
28
- Given a file named "templates/basic.erb" with:
29
- """
30
- basic template
31
- """
32
- And a recipe with:
33
- """
34
- task(:echo_template) { echo template './templates/basic' }
35
- """
36
- When I execute the recipe
37
- Then the output must contain "basic template"
38
-
39
- Scenario: parses a yaml file
40
- Given a file named "templates/basic.yaml" with:
41
- """
42
- foo: bar
43
- """
44
- And a recipe with:
45
- """
46
- task(:echo_template) { echo template('basic')['foo'] }
47
- """
48
- When I execute the recipe
49
- Then the output must match /^bar$/
@@ -1,21 +0,0 @@
1
- @sshd
2
- Feature: `dir?' condition keyword
3
-
4
- Background:
5
- Given a recipe with:
6
- """
7
- task :dir_test do
8
- condition { dir? 'some_directory' }
9
-
10
- echo 'evaluated'
11
- end
12
- """
13
-
14
- Scenario: succeeds when directory exists
15
- Given a remote directory named "some_directory"
16
- When I successfully execute the recipe on remote target
17
- Then the output must contain "evaluated"
18
-
19
- Scenario: fails when directory does not exist
20
- When I successfully execute the recipe on remote target
21
- Then the output must not contain "evaluated"
@@ -1,47 +0,0 @@
1
- @sshd
2
- Feature: `env?' condition keyword
3
-
4
- Background:
5
- Given a recipe with:
6
- """
7
- task :env_test_definition_ok do
8
- condition { env? :shell }
9
-
10
- echo 'definition_ok'
11
- end
12
-
13
- task :env_test_definition_ko do
14
- condition { env? :non_existent_var }
15
-
16
- echo 'definition_ko'
17
- end
18
-
19
- task :env_test_value do
20
- condition { env? :shell, '/bin/sh' }
21
-
22
- echo 'value_ok'
23
- end
24
-
25
- task :env_test_value do
26
- condition { env? :shell, 'non_existent_shell' }
27
-
28
- echo 'value_ko'
29
- end
30
- """
31
-
32
- Scenario: succeeds when remote environment variable is defined
33
- When I successfully execute the recipe on remote target
34
- Then the output must contain "definition_ok"
35
-
36
- Scenario: fails when remote environment variable is not defined
37
- When I successfully execute the recipe on remote target
38
- Then the output must not contain "definition_ko"
39
-
40
- @ci_skip
41
- Scenario: succeeds when remote environment variable value match
42
- When I successfully execute the recipe on remote target
43
- Then the output must contain "value_ok"
44
-
45
- Scenario: fails when remote environment variable value does not match
46
- When I successfully execute the recipe on remote target
47
- Then the output must not contain "value_ko"
@@ -1,26 +0,0 @@
1
- @sshd
2
- Feature: `executable?' condition keyword
3
-
4
- Background:
5
- Given a recipe with:
6
- """
7
- task :executable_test_ok do
8
- condition { executable? 'true' }
9
-
10
- echo 'test_ok'
11
- end
12
-
13
- task :executable_test_ok do
14
- condition { executable? 'some_non_existent_executable' }
15
-
16
- echo 'test_ko'
17
- end
18
- """
19
-
20
- Scenario: succeeds when remote executable is available
21
- When I successfully execute the recipe on remote target
22
- Then the output must contain "test_ok"
23
-
24
- Scenario: fails when remote executable is not available
25
- When I successfully execute the recipe on remote target
26
- Then the output must not contain "test_ko"