beaker-testmode_switcher 0.1.1 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e11986d5a67ffd960f9c786ff8536b2b505d5b81
4
- data.tar.gz: b0c43f008a61c19804a16f41f3470bcdb7cd4c41
3
+ metadata.gz: 0b6fa280da0e2d74f94c99172bbdc84a0fd136eb
4
+ data.tar.gz: b7d5add69806870c20e23ee07e24412678c98dae
5
5
  SHA512:
6
- metadata.gz: 6ed863db3115f3166f1b64ac59e110d5f70652f17a61ea864654c2e710728471acdcaaa7139c1a3c770c889beb6596948dee28b570f09b8b798990f88a8653d8
7
- data.tar.gz: 6306bad36cc1db0b325b55e5d9a77eb3bee9a75ef504e8f48853bc93956d1b2b9837e50f962fca4be7da59dec79fe09e791e0f5ea46044b12e8a4e929dfb5b72
6
+ metadata.gz: 43b4c25be5bdd16a76c56d57e7e8935ccc5e58cb83fa275f57404fc20218d8f93c876389ed5e367d99622fdf161313f0a6922d54efb1f1bfc5fde0242f6318d2
7
+ data.tar.gz: bb9b824bfd40e4dd11da7ca1bf3948cc83a3c1b61ab97c89ab96c48f706aec78f2f183418020ec3d0bd72d1b7c1a1a323f1b52063bf49ca7f0cd2e31ef3f4617
@@ -1,6 +1,10 @@
1
- # Version 0.1.0
1
+ # 2017-03-03 Version 0.2.0
2
+ ### Summary
3
+ Make use of catch_changes, catch_failures, expect_changes and expect_failures. This makes beaker-testmode_switcher easier to integrate into modules.
2
4
 
3
- Initial release.
5
+ ### Features
6
+ - Implement catch_changes, catch_failures, expect_changes and expect_failures in beaker_runners
7
+ - Fix docs issue where `execute_manifest` options were listed under `resource
4
8
 
5
9
  # 2017-01-19 - Version 0.1.1
6
10
  ###Summary
@@ -11,3 +15,7 @@ This release adds a feature that provides control of specific nodes you would li
11
15
  - Add execute_manifest_on() function
12
16
  - Add MAINTAINERS file
13
17
  - Addressing Rubocop errors
18
+
19
+ # Version 0.1.0
20
+
21
+ Initial release.
data/README.md CHANGED
@@ -45,13 +45,26 @@ This experimental version supports only a minimal set of functionality from the
45
45
  * `create_remote_file_ex(file_path, file_content, opts = {})`: Creates a file at `file_path` with the content specified in `file_content` on the default node. `opts` can have the keys `:mode`, `:user`, and `:group` to specify the permissions, owner, and group respectively.
46
46
 
47
47
  * `execute_manifest_on(hosts, manifest, opts = {})`: Execute the manifest on all nodes. This will only work when `BEAKER_TESTMODE`, is set to `agent` and it will run a `puppet agent` run.
48
+
48
49
  `opts` keys:
49
50
  * `:debug`, `:trace`, `:noop`: set to true to enable the puppet option of the same name.
50
51
  * `:dry_run`: set to true to skip executing the actual command.
51
52
  * `:environment`: pass environment variables for the command as a hash.
53
+ * `:catch_failures` enables detailed exit codes and causes a test failure if the puppet run indicates there was a failure during its execution.
54
+ * `:catch_changes` enables detailed exit codes and causes a test failure if the puppet run indicates that there were changes or failures during its execution.
55
+ * `:expect_changes` enables detailed exit codes and causes a test failure if the puppet run indicates that there were no resource changes during its execution.
56
+ * `:expect_failures` enables detailed exit codes and causes a test failure if the puppet run indicates there were no failure during its execution.
52
57
 
53
- * `execute_manifest(manifest, opts = {})`: Execute the manifest on the default node. Depending on the `BEAKER_TESTMODE` environment variable, this may use `puppet agent` or `puppet apply`.
54
- `opts` This makes use of `execute_manifest_on(hosts, manifest, opts = {})`.
58
+ * `execute_manifest(manifest, opts = {})`: Execute the manifest on the default node. Depending on the `BEAKER_TESTMODE` environment variable, this may use `puppet agent` or `puppet apply`. Calls execute_manifest_on when `BEAKER_TESTMODE`=`agent`
59
+
60
+ `opts` keys:
61
+ * `:debug`, `:trace`, `:noop`: set to true to enable the puppet option of the same name.
62
+ * `:dry_run`: set to true to skip executing the actual command.
63
+ * `:environment`: pass environment variables for the command as a hash.
64
+ * `:catch_failures` enables detailed exit codes and causes a test failure if the puppet run indicates there was a failure during its execution.
65
+ * `:catch_changes` enables detailed exit codes and causes a test failure if the puppet run indicates that there were changes or failures during its execution.
66
+ * `:expect_changes` enables detailed exit codes and causes a test failure if the puppet run indicates that there were no resource changes during its execution.
67
+ * `:expect_failures` enables detailed exit codes and causes a test failure if the puppet run indicates there were no failure during its execution.
55
68
 
56
69
  * `resource(type, name, opts = {})`: Runs `puppet resource` with the specified `type` and `name` arguments.
57
70
  `opts` keys:
@@ -1,11 +1,12 @@
1
1
  require 'beaker'
2
2
  require 'shellwords'
3
3
  require 'open3'
4
+ require_relative 'runner_base'
4
5
 
5
6
  module Beaker
6
7
  module TestmodeSwitcher
7
8
  # Re-used functionality for all beaker runners
8
- class BeakerRunnerBase
9
+ class BeakerRunnerBase < RunnerBase
9
10
  include Beaker::DSL
10
11
 
11
12
  attr_accessor :hosts, :logger
@@ -81,18 +82,21 @@ module Beaker
81
82
  site_pp = create_site_pp(master, manifest: manifest)
82
83
  inject_site_pp(master, prod_env_site_pp_path, site_pp)
83
84
 
84
- cmd = ['agent', '--test', '--environment production']
85
+ cmd = ['agent', '--test', '--environment production', '--detailed-exitcodes']
85
86
  cmd << "--debug" if opts[:debug]
86
87
  cmd << "--noop" if opts[:noop]
87
88
  cmd << "--trace" if opts[:trace]
88
89
 
89
90
  # acceptable_exit_codes are passed because we want detailed-exit-codes but want to
90
91
  # make our own assertions about the responses
91
- on(hosts,
92
- puppet(*cmd),
93
- dry_run: opts[:dry_run],
94
- environment: opts[:environment] || {},
95
- acceptable_exit_codes: (0...256))
92
+ res = on(hosts,
93
+ puppet(*cmd),
94
+ dry_run: opts[:dry_run],
95
+ environment: opts[:environment] || {},
96
+ acceptable_exit_codes: (0...256))
97
+
98
+ handle_puppet_run_returned_exit_code(get_acceptable_puppet_run_exit_codes(opts), res.exit_code)
99
+ res
96
100
  end
97
101
  end
98
102
 
@@ -102,16 +106,18 @@ module Beaker
102
106
  def execute_manifest(manifest, opts = {})
103
107
  # acceptable_exit_codes and expect_changes are passed because we want detailed-exit-codes but want to
104
108
  # make our own assertions about the responses
105
- apply_manifest(
109
+ res = apply_manifest(
106
110
  manifest,
107
- expect_changes: true,
108
111
  debug: opts[:debug],
109
112
  dry_run: opts[:dry_run],
110
113
  environment: opts[:environment] || {},
111
114
  noop: opts[:noop],
112
115
  trace: opts[:trace],
113
- acceptable_exit_codes: (0...256)
114
- )
116
+ expect_failures: true,
117
+ acceptable_exit_codes: (0...256))
118
+
119
+ handle_puppet_run_returned_exit_code(get_acceptable_puppet_run_exit_codes(opts), res.exit_code)
120
+ res
115
121
  end
116
122
  end
117
123
  end
@@ -1,10 +1,11 @@
1
1
  require 'shellwords'
2
2
  require 'open3'
3
+ require_relative 'runner_base'
3
4
 
4
5
  module Beaker
5
6
  module TestmodeSwitcher
6
7
  # All functionality specific to running in 'local' mode
7
- class LocalRunner
8
+ class LocalRunner < RunnerBase
8
9
  # creates the file on the local machine and adjusts permissions
9
10
  # the opts hash allows the following keys: :mode, :user, :group
10
11
  def create_remote_file_ex(file_path, file_content, opts = {})
@@ -31,7 +32,11 @@ module Beaker
31
32
  cmd << "--debug" if opts[:debug]
32
33
  cmd << "--noop" if opts[:noop]
33
34
  cmd << "--trace" if opts[:trace]
34
- use_local_shell(cmd.join(' '), opts)
35
+
36
+ res = use_local_shell(cmd.join(' '), opts)
37
+ handle_puppet_run_returned_exit_code(get_acceptable_puppet_run_exit_codes(opts), res.exit_code)
38
+
39
+ res
35
40
  end
36
41
 
37
42
  # build and execute complex puppet resource commands locally
@@ -0,0 +1,35 @@
1
+ module Beaker
2
+ module TestmodeSwitcher
3
+ # A standard error to be raised by runner classes when an unexpected exit code is returned
4
+ class UnacceptableExitCodeError < RuntimeError
5
+ end
6
+
7
+ # Contains functions used in both local runner and beaker runners
8
+ class RunnerBase
9
+ def get_acceptable_puppet_run_exit_codes(opts = {})
10
+ # Ensure only one option given
11
+ if [opts[:catch_changes], opts[:catch_failures], opts[:expect_failures], opts[:expect_changes]].compact.length > 1
12
+ raise(ArgumentError,
13
+ 'Cannot specify more than one of `catch_failures`, \
14
+ `catch_changes`, `expect_failures`, or `expect_changes` \
15
+ for a single manifest')
16
+ end
17
+
18
+ # Return appropriate exit code
19
+ return [0] if opts[:catch_changes]
20
+ return [0, 2] if opts[:catch_failures]
21
+ return [1, 4, 6] if opts[:expect_failures]
22
+ return [2] if opts[:expect_changes]
23
+
24
+ # If no option supplied, return all exit codes, as an array,
25
+ # as acceptable so beaker returns a detailed output
26
+ (0...256)
27
+ end
28
+
29
+ def handle_puppet_run_returned_exit_code(acceptable_exit_codes, returned_exit_code)
30
+ return if acceptable_exit_codes.include?(returned_exit_code)
31
+ raise UnacceptableExitCodeError, "Unacceptable exit code returned: #{returned_exit_code}. Acceptable code(s): #{acceptable_exit_codes.join(', ')}"
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,6 +1,6 @@
1
1
  module Beaker
2
2
  # central definition of this gem's version
3
3
  module TestmodeSwitcher
4
- VERSION = "0.1.1".freeze
4
+ VERSION = "0.2.0".freeze
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker-testmode_switcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet Labs
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: exe
14
14
  cert_chain: []
15
- date: 2017-01-19 00:00:00.000000000 Z
15
+ date: 2017-03-03 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: beaker
@@ -67,6 +67,7 @@ files:
67
67
  - lib/beaker/testmode_switcher/beaker_runners.rb
68
68
  - lib/beaker/testmode_switcher/dsl.rb
69
69
  - lib/beaker/testmode_switcher/local_runner.rb
70
+ - lib/beaker/testmode_switcher/runner_base.rb
70
71
  - lib/beaker/testmode_switcher/version.rb
71
72
  homepage: https://github.com/puppetlabs/beaker-testmode_switcher
72
73
  licenses: []