beaker 4.40.1 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (217) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +9 -0
  3. data/.github/workflows/release.yml +2 -2
  4. data/.github/workflows/test.yml +26 -13
  5. data/.rubocop.yml +23 -10
  6. data/.rubocop_todo.yml +34 -10
  7. data/CHANGELOG.md +13 -11
  8. data/Gemfile +12 -7
  9. data/Rakefile +99 -111
  10. data/acceptance/config/acceptance-options.rb +1 -1
  11. data/acceptance/config/base/acceptance-options.rb +2 -2
  12. data/acceptance/config/hypervisor/acceptance-options.rb +2 -2
  13. data/acceptance/config/subcommands/acceptance-options.rb +2 -2
  14. data/acceptance/fixtures/module/Rakefile +1 -1
  15. data/acceptance/fixtures/module/spec/acceptance/demo_spec.rb +8 -12
  16. data/acceptance/fixtures/module/spec/classes/init_spec.rb +0 -1
  17. data/acceptance/fixtures/module/spec/spec_helper_acceptance.rb +3 -5
  18. data/acceptance/lib/helpers/test_helper.rb +4 -3
  19. data/acceptance/pre_suite/subcommands/05_install_ruby.rb +2 -3
  20. data/acceptance/pre_suite/subcommands/08_install_beaker.rb +1 -2
  21. data/acceptance/tests/base/dsl/helpers/configuration_test.rb +4 -4
  22. data/acceptance/tests/base/dsl/helpers/hocon_helpers_test.rb +1 -2
  23. data/acceptance/tests/base/dsl/helpers/host_helpers/add_system32_hosts_entry_test.rb +0 -3
  24. data/acceptance/tests/base/dsl/helpers/host_helpers/archive_file_from_test.rb +3 -1
  25. data/acceptance/tests/base/dsl/helpers/host_helpers/backup_the_file_test.rb +9 -9
  26. data/acceptance/tests/base/dsl/helpers/host_helpers/check_for_package_test.rb +0 -4
  27. data/acceptance/tests/base/dsl/helpers/host_helpers/create_remote_file_test.rb +19 -26
  28. data/acceptance/tests/base/dsl/helpers/host_helpers/curl_on_test.rb +2 -2
  29. data/acceptance/tests/base/dsl/helpers/host_helpers/curl_with_retries_test.rb +0 -1
  30. data/acceptance/tests/base/dsl/helpers/host_helpers/on_test.rb +18 -13
  31. data/acceptance/tests/base/dsl/helpers/host_helpers/retry_on_test.rb +3 -3
  32. data/acceptance/tests/base/dsl/helpers/host_helpers/rsync_to_test.rb +22 -27
  33. data/acceptance/tests/base/dsl/helpers/host_helpers/run_cron_on_test.rb +12 -16
  34. data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_on_test.rb +3 -4
  35. data/acceptance/tests/base/dsl/helpers/host_helpers/run_script_test.rb +3 -3
  36. data/acceptance/tests/base/dsl/helpers/host_helpers/scp_from_test.rb +4 -4
  37. data/acceptance/tests/base/dsl/helpers/host_helpers/scp_to_test.rb +3 -4
  38. data/acceptance/tests/base/dsl/helpers/host_helpers/shell_test.rb +5 -5
  39. data/acceptance/tests/base/dsl/helpers/host_helpers/upgrade_package_test.rb +3 -5
  40. data/acceptance/tests/base/dsl/platform_tag_confiner_test.rb +14 -17
  41. data/acceptance/tests/base/dsl/structure_test.rb +5 -11
  42. data/acceptance/tests/base/host/file_test.rb +2 -2
  43. data/acceptance/tests/base/host/group_test.rb +0 -1
  44. data/acceptance/tests/base/host/host_test.rb +66 -63
  45. data/acceptance/tests/base/host/packages.rb +1 -2
  46. data/acceptance/tests/base/host/packages_unix.rb +0 -55
  47. data/acceptance/tests/base/host/user_test.rb +0 -1
  48. data/acceptance/tests/base/host_prebuilt_steps/ssh_environment_test.rb +1 -2
  49. data/acceptance/tests/base/test_suite/export.rb +6 -9
  50. data/acceptance/tests/install/from_file.rb +2 -4
  51. data/acceptance/tests/load_path_bootstrap.rb +1 -1
  52. data/acceptance/tests/subcommands/destroy.rb +19 -21
  53. data/acceptance/tests/subcommands/exec.rb +0 -1
  54. data/acceptance/tests/subcommands/init.rb +2 -3
  55. data/acceptance/tests/subcommands/provision.rb +0 -1
  56. data/beaker.gemspec +4 -7
  57. data/docs/concepts/argument_processing_and_precedence.md +1 -10
  58. data/docs/how_to/debug_beaker_tests.md +12 -12
  59. data/docs/how_to/hosts/eos.md +2 -12
  60. data/docs/how_to/install_puppet.md +0 -18
  61. data/docs/how_to/the_beaker_dsl.md +0 -2
  62. data/lib/beaker/cli.rb +59 -68
  63. data/lib/beaker/command.rb +20 -28
  64. data/lib/beaker/command_factory.rb +3 -2
  65. data/lib/beaker/dsl/assertions.rb +6 -18
  66. data/lib/beaker/dsl/helpers/hocon_helpers.rb +3 -7
  67. data/lib/beaker/dsl/helpers/host_helpers.rb +62 -123
  68. data/lib/beaker/dsl/helpers/test_helpers.rb +3 -5
  69. data/lib/beaker/dsl/helpers/web_helpers.rb +19 -39
  70. data/lib/beaker/dsl/helpers.rb +2 -4
  71. data/lib/beaker/dsl/outcomes.rb +13 -15
  72. data/lib/beaker/dsl/patterns.rb +1 -3
  73. data/lib/beaker/dsl/roles.rb +17 -20
  74. data/lib/beaker/dsl/structure.rb +53 -65
  75. data/lib/beaker/dsl/test_tagging.rb +7 -10
  76. data/lib/beaker/dsl/wrappers.rb +15 -16
  77. data/lib/beaker/dsl.rb +2 -3
  78. data/lib/beaker/host/aix/exec.rb +1 -1
  79. data/lib/beaker/host/aix/file.rb +0 -1
  80. data/lib/beaker/host/aix/group.rb +1 -1
  81. data/lib/beaker/host/aix/user.rb +1 -1
  82. data/lib/beaker/host/aix.rb +3 -4
  83. data/lib/beaker/host/cisco.rb +27 -39
  84. data/lib/beaker/host/eos.rb +4 -30
  85. data/lib/beaker/host/freebsd/exec.rb +1 -1
  86. data/lib/beaker/host/freebsd/pkg.rb +3 -3
  87. data/lib/beaker/host/freebsd.rb +9 -12
  88. data/lib/beaker/host/mac/exec.rb +4 -4
  89. data/lib/beaker/host/mac/group.rb +7 -7
  90. data/lib/beaker/host/mac/pkg.rb +3 -106
  91. data/lib/beaker/host/mac/user.rb +2 -2
  92. data/lib/beaker/host/mac.rb +8 -9
  93. data/lib/beaker/host/pswindows/exec.rb +66 -70
  94. data/lib/beaker/host/pswindows/file.rb +3 -5
  95. data/lib/beaker/host/pswindows/group.rb +3 -3
  96. data/lib/beaker/host/pswindows/pkg.rb +12 -12
  97. data/lib/beaker/host/pswindows/user.rb +3 -3
  98. data/lib/beaker/host/pswindows.rb +4 -3
  99. data/lib/beaker/host/unix/exec.rb +80 -82
  100. data/lib/beaker/host/unix/file.rb +38 -43
  101. data/lib/beaker/host/unix/group.rb +1 -1
  102. data/lib/beaker/host/unix/pkg.rb +154 -417
  103. data/lib/beaker/host/unix/user.rb +2 -2
  104. data/lib/beaker/host/unix.rb +8 -11
  105. data/lib/beaker/host/windows/exec.rb +17 -17
  106. data/lib/beaker/host/windows/file.rb +3 -3
  107. data/lib/beaker/host/windows/group.rb +3 -3
  108. data/lib/beaker/host/windows/pkg.rb +3 -54
  109. data/lib/beaker/host/windows/user.rb +3 -3
  110. data/lib/beaker/host/windows.rb +12 -12
  111. data/lib/beaker/host.rb +76 -133
  112. data/lib/beaker/host_prebuilt_steps.rb +93 -198
  113. data/lib/beaker/hypervisor/noop.rb +2 -4
  114. data/lib/beaker/hypervisor.rb +44 -61
  115. data/lib/beaker/local_connection.rb +2 -4
  116. data/lib/beaker/logger.rb +68 -76
  117. data/lib/beaker/logger_junit.rb +21 -25
  118. data/lib/beaker/network_manager.rb +39 -42
  119. data/lib/beaker/options/command_line_parser.rb +12 -23
  120. data/lib/beaker/options/hosts_file_parser.rb +16 -24
  121. data/lib/beaker/options/options_file_parser.rb +3 -6
  122. data/lib/beaker/options/options_hash.rb +2 -7
  123. data/lib/beaker/options/parser.rb +86 -102
  124. data/lib/beaker/options/presets.rb +114 -123
  125. data/lib/beaker/options/subcommand_options_file_parser.rb +3 -6
  126. data/lib/beaker/options/validator.rb +26 -31
  127. data/lib/beaker/perf.rb +22 -27
  128. data/lib/beaker/platform.rb +38 -46
  129. data/lib/beaker/result.rb +7 -6
  130. data/lib/beaker/shared/error_handler.rb +8 -10
  131. data/lib/beaker/shared/fog_credentials.rb +5 -9
  132. data/lib/beaker/shared/host_manager.rb +36 -41
  133. data/lib/beaker/shared/options_resolver.rb +3 -7
  134. data/lib/beaker/shared/repetition.rb +2 -4
  135. data/lib/beaker/shared/semvar.rb +37 -41
  136. data/lib/beaker/shared/timed.rb +0 -3
  137. data/lib/beaker/shared.rb +1 -1
  138. data/lib/beaker/ssh_connection.rb +38 -47
  139. data/lib/beaker/subcommand.rb +17 -24
  140. data/lib/beaker/subcommands/subcommand_util.rb +4 -4
  141. data/lib/beaker/tasks/quick_start.rb +4 -9
  142. data/lib/beaker/tasks/rake_task.rb +25 -27
  143. data/lib/beaker/tasks/test.rb +4 -4
  144. data/lib/beaker/test_case.rb +15 -27
  145. data/lib/beaker/test_suite.rb +35 -39
  146. data/lib/beaker/test_suite_result.rb +45 -47
  147. data/lib/beaker/version.rb +1 -1
  148. data/lib/beaker.rb +5 -6
  149. data/spec/beaker/cli_spec.rb +121 -142
  150. data/spec/beaker/command_spec.rb +55 -59
  151. data/spec/beaker/dsl/assertions_spec.rb +36 -36
  152. data/spec/beaker/dsl/helpers/host_helpers_spec.rb +110 -131
  153. data/spec/beaker/dsl/helpers/test_helpers_spec.rb +9 -10
  154. data/spec/beaker/dsl/helpers/web_helpers_spec.rb +22 -31
  155. data/spec/beaker/dsl/outcomes_spec.rb +14 -14
  156. data/spec/beaker/dsl/roles_spec.rb +125 -130
  157. data/spec/beaker/dsl/structure_spec.rb +169 -158
  158. data/spec/beaker/dsl/test_tagging_spec.rb +89 -90
  159. data/spec/beaker/dsl/wrappers_spec.rb +32 -33
  160. data/spec/beaker/host/aix_spec.rb +14 -14
  161. data/spec/beaker/host/cisco_spec.rb +84 -94
  162. data/spec/beaker/host/eos_spec.rb +15 -36
  163. data/spec/beaker/host/freebsd/exec_spec.rb +3 -6
  164. data/spec/beaker/host/freebsd/pkg_spec.rb +24 -27
  165. data/spec/beaker/host/mac/exec_spec.rb +2 -3
  166. data/spec/beaker/host/mac/group_spec.rb +47 -56
  167. data/spec/beaker/host/mac/user_spec.rb +53 -62
  168. data/spec/beaker/host/pswindows/exec_spec.rb +30 -32
  169. data/spec/beaker/host/pswindows/file_spec.rb +16 -16
  170. data/spec/beaker/host/pswindows/user_spec.rb +17 -23
  171. data/spec/beaker/host/pswindows_spec.rb +13 -13
  172. data/spec/beaker/host/unix/exec_spec.rb +75 -80
  173. data/spec/beaker/host/unix/file_spec.rb +66 -73
  174. data/spec/beaker/host/unix/pkg_spec.rb +155 -401
  175. data/spec/beaker/host/unix_spec.rb +11 -207
  176. data/spec/beaker/host/windows/exec_spec.rb +30 -32
  177. data/spec/beaker/host/windows/file_spec.rb +18 -19
  178. data/spec/beaker/host/windows/group_spec.rb +10 -12
  179. data/spec/beaker/host/windows/pkg_spec.rb +6 -9
  180. data/spec/beaker/host/windows/user_spec.rb +17 -23
  181. data/spec/beaker/host/windows_spec.rb +39 -39
  182. data/spec/beaker/host_prebuilt_steps_spec.rb +172 -326
  183. data/spec/beaker/host_spec.rb +204 -284
  184. data/spec/beaker/hypervisor/hypervisor_spec.rb +36 -61
  185. data/spec/beaker/localhost_connection_spec.rb +10 -11
  186. data/spec/beaker/logger_junit_spec.rb +19 -30
  187. data/spec/beaker/logger_spec.rb +153 -136
  188. data/spec/beaker/network_manager_spec.rb +23 -23
  189. data/spec/beaker/options/command_line_parser_spec.rb +20 -23
  190. data/spec/beaker/options/hosts_file_parser_spec.rb +30 -32
  191. data/spec/beaker/options/options_file_parser_spec.rb +4 -7
  192. data/spec/beaker/options/options_hash_spec.rb +4 -6
  193. data/spec/beaker/options/parser_spec.rb +167 -167
  194. data/spec/beaker/options/presets_spec.rb +7 -9
  195. data/spec/beaker/options/subcommand_options_parser_spec.rb +13 -14
  196. data/spec/beaker/options/validator_spec.rb +10 -11
  197. data/spec/beaker/perf_spec.rb +18 -21
  198. data/spec/beaker/platform_spec.rb +25 -36
  199. data/spec/beaker/shared/error_handler_spec.rb +7 -16
  200. data/spec/beaker/shared/fog_credentials_spec.rb +29 -29
  201. data/spec/beaker/shared/host_manager_spec.rb +50 -84
  202. data/spec/beaker/shared/options_resolver_spec.rb +9 -12
  203. data/spec/beaker/shared/repetition_spec.rb +17 -24
  204. data/spec/beaker/shared/semvar_spec.rb +21 -26
  205. data/spec/beaker/ssh_connection_spec.rb +76 -83
  206. data/spec/beaker/subcommand/subcommand_util_spec.rb +31 -33
  207. data/spec/beaker/subcommand_spec.rb +75 -77
  208. data/spec/beaker/test_case_spec.rb +25 -50
  209. data/spec/beaker/test_suite_spec.rb +147 -154
  210. data/spec/helpers.rb +48 -53
  211. data/spec/matchers.rb +8 -7
  212. data/spec/mocks.rb +1 -6
  213. data/spec/spec_helper.rb +0 -1
  214. metadata +7 -24
  215. data/acceptance/tests/base/dsl/helpers/host_helpers/deploy_package_repo_test.rb +0 -142
  216. data/acceptance/tests/base/external_resources_test.rb +0 -31
  217. data/spec/beaker/host/mac_spec.rb +0 -113
@@ -15,7 +15,6 @@ module Beaker
15
15
  # designed to allow some degree of freedom from the individual third
16
16
  # party test runners that could be used.
17
17
  module Outcomes
18
-
19
18
  # Raise this class if it is determined that a test case should not
20
19
  # be executed because the feature in question is still a
21
20
  # "Work in Progress"
@@ -32,16 +31,15 @@ module Beaker
32
31
  # shown itself to pass the test.
33
32
  class PassTest < RuntimeError; end
34
33
 
35
-
36
34
  # Raises FailTest Exception and logs an error message
37
35
  #
38
36
  # @param [String] msg An optional message to log
39
37
  # @raise [FailTest]
40
38
  def fail_test msg = nil
41
- message = formatted_message( msg, 'Failed' )
42
- logger.warn( [message, logger.pretty_backtrace].join("\n") )
39
+ message = formatted_message(msg, 'Failed')
40
+ logger.warn([message, logger.pretty_backtrace].join("\n"))
43
41
 
44
- raise( FailTest, message )
42
+ raise(FailTest, message)
45
43
  end
46
44
 
47
45
  # Raises PassTest Exception and logs a message
@@ -49,10 +47,10 @@ module Beaker
49
47
  # @param [String] msg An optional message to log
50
48
  # @raise [PassTest]
51
49
  def pass_test msg = nil
52
- message = formatted_message( msg, 'Passed' )
53
- logger.notify( message )
50
+ message = formatted_message(msg, 'Passed')
51
+ logger.notify(message)
54
52
 
55
- raise( PassTest, message )
53
+ raise(PassTest, message)
56
54
  end
57
55
 
58
56
  # Raises PendingTest Exception and logs an error message
@@ -60,10 +58,10 @@ module Beaker
60
58
  # @param [String] msg An optional message to log
61
59
  # @raise [PendingTest]
62
60
  def pending_test msg = nil
63
- message = formatted_message( msg, 'is Pending' )
64
- logger.warn( message )
61
+ message = formatted_message(msg, 'is Pending')
62
+ logger.warn(message)
65
63
 
66
- raise( PendingTest, message )
64
+ raise(PendingTest, message)
67
65
  end
68
66
 
69
67
  # Raises SkipTest Exception and logs a message
@@ -71,10 +69,10 @@ module Beaker
71
69
  # @param [String] msg An optional message to log
72
70
  # @raise [SkipTest]
73
71
  def skip_test msg = nil
74
- message = formatted_message( msg, 'was Skipped' )
75
- logger.notify( message )
72
+ message = formatted_message(msg, 'was Skipped')
73
+ logger.notify(message)
76
74
 
77
- raise( SkipTest, message )
75
+ raise(SkipTest, message)
78
76
  end
79
77
 
80
78
  # populate a TestCase's @exports[] with structured_data
@@ -93,7 +91,7 @@ module Beaker
93
91
  #
94
92
  # @return [String] A prettier string with helpful info
95
93
  # @!visibility private
96
- def formatted_message(message, default_str )
94
+ def formatted_message(message, default_str)
97
95
  msg = message ? "\n#{message}\n" : "\n#{self} #{default_str}.\n"
98
96
  return msg
99
97
  end
@@ -10,7 +10,6 @@ module Beaker
10
10
  # and #to_s available and provide an array when #[]('roles') is called.
11
11
  #
12
12
  module Patterns
13
-
14
13
  # Execute a block selecting the hosts that match with the provided criteria
15
14
  # @param [Array<Host>, Host, String, Symbol] hosts_or_filter A host role as a String or Symbol that can be
16
15
  # used to search for a set of Hosts, a host name
@@ -23,7 +22,7 @@ module Beaker
23
22
  #
24
23
  # @return [Array<Result>, Result, nil] An array of results, a result object, or nil.
25
24
  # Check {Beaker::Shared::HostManager#run_block_on} for more details on this.
26
- def block_on hosts_or_filter, opts={}, &block
25
+ def block_on hosts_or_filter, opts = {}, &block
27
26
  block_hosts = nil
28
27
  if defined? hosts
29
28
  block_hosts = hosts
@@ -36,7 +35,6 @@ module Beaker
36
35
  end
37
36
  run_block_on block_hosts, filter, opts, &block
38
37
  end
39
-
40
38
  end
41
39
  end
42
40
  end
@@ -14,7 +14,6 @@ module Beaker
14
14
  # in error conditions
15
15
  #
16
16
  module Roles
17
-
18
17
  # The hosts for which ['roles'] include 'agent'
19
18
  #
20
19
  # @return [Array<Host>] May be empty
@@ -100,7 +99,7 @@ module Beaker
100
99
  # end
101
100
  #
102
101
  def not_controller(host)
103
- controllers = ['dashboard', 'database', 'master', 'console']
102
+ controllers = %w[dashboard database master console]
104
103
  matched_roles = host['roles'].select { |v| controllers.include?(v) }
105
104
  matched_roles.length == 0
106
105
  end
@@ -116,7 +115,7 @@ module Beaker
116
115
  #
117
116
  # @return [Boolean] True if agent-only, false otherwise
118
117
  def agent_only(host)
119
- host['roles'].length == 1 && host['roles'].include?('agent')
118
+ host['roles'].length == 1 && host['roles'].include?('agent')
120
119
  end
121
120
 
122
121
  # Determine whether a host has an AIO version or not. If a host :pe_ver or
@@ -134,12 +133,13 @@ module Beaker
134
133
  #
135
134
  # @return [Boolean] whether or not a host is AIO-capable
136
135
  def aio_version?(host)
137
- [:pe_ver, :version].each do |key|
136
+ %i[pe_ver version].each do |key|
138
137
  version = host[key]
139
138
  return !version_is_less(version, '4.0') if version && !version.empty?
140
139
  end
141
140
  return true if host[:roles] && host[:roles].include?('aio')
142
141
  return true if host[:type] && /(\A|-)aio(\Z|-)/.match(host[:type])
142
+
143
143
  false
144
144
  end
145
145
 
@@ -160,31 +160,28 @@ module Beaker
160
160
  host[:roles] = host[:roles] | [role]
161
161
  end
162
162
 
163
- #Create a new role method for a given arbitrary role name. Makes it possible to be able to run
164
- #commands without having to refer to role by String or Symbol. Will not add a new method
165
- #definition if the name is already in use.
163
+ # Create a new role method for a given arbitrary role name. Makes it possible to be able to run
164
+ # commands without having to refer to role by String or Symbol. Will not add a new method
165
+ # definition if the name is already in use.
166
166
  # @param [String, Symbol, Array[String,Symbol]] role The role that you wish to create a definition for, either a String
167
167
  # Symbol or an Array of Strings or Symbols.
168
168
  # @example Basic usage
169
169
  # add_role_def('myrole')
170
170
  # on myrole, "run command"
171
171
  def add_role_def role
172
- if role.kind_of?(Array)
172
+ if role.is_a?(Array)
173
173
  role.each do |r|
174
174
  add_role_def r
175
175
  end
176
- else
177
- if not respond_to? role
178
- if !/\A[[:alpha:]]+[a-zA-Z0-9_]*[!?=]?\Z/.match?(role)
179
- raise ArgumentError, "Role name format error for '#{role}'. Allowed characters are: \na-Z\n0-9 (as long as not at the beginning of name)\n'_'\n'?', '!' and '=' (only as individual last character at end of name)"
180
- end
181
- self.class.send :define_method, role.to_s do
182
- hosts_with_role = hosts_as role.to_sym
183
- if hosts_with_role.length == 1
184
- hosts_with_role = hosts_with_role.pop
185
- end
186
- hosts_with_role
187
- end
176
+ elsif not respond_to? role
177
+ if !/\A[[:alpha:]]+[a-zA-Z0-9_]*[!?=]?\Z/.match?(role)
178
+ raise ArgumentError, "Role name format error for '#{role}'. Allowed characters are: \na-Z\n0-9 (as long as not at the beginning of name)\n'_'\n'?', '!' and '=' (only as individual last character at end of name)"
179
+ end
180
+
181
+ self.class.send :define_method, role.to_s do
182
+ hosts_with_role = hosts_as role.to_sym
183
+ hosts_with_role = hosts_with_role.pop if hosts_with_role.length == 1
184
+ hosts_with_role
188
185
  end
189
186
  end
190
187
  end
@@ -37,32 +37,30 @@ module Beaker
37
37
  def step step_name, &block
38
38
  logger.notify "\n* #{step_name}\n"
39
39
  set_current_step_name(step_name)
40
- if block
41
- begin
42
- logger.with_indent do
43
- yield
44
- end
45
- rescue Exception => e
46
- if(@options.has_key?(:debug_errors) && @options[:debug_errors] == true)
40
+ return unless block
41
+
42
+ begin
43
+ logger.with_indent(&block)
44
+ rescue Exception => e
45
+ if @options.has_key?(:debug_errors) && @options[:debug_errors] == true
46
+ begin
47
+ require 'pry'
48
+ rescue LoadError
47
49
  begin
48
- require 'pry'
50
+ require 'debug'
49
51
  rescue LoadError
50
- begin
51
- require 'debug'
52
- rescue LoadError
53
- logger.exception('Unable to load pry and debug while debug_errors was true')
54
- else
55
- logger.info("Exception raised during step execution and debug-errors option is set, entering debug. Exception was: #{e.inspect}")
56
- binding.break
57
- end
52
+ logger.exception('Unable to load pry and debug while debug_errors was true')
58
53
  else
59
- logger.info("Exception raised during step execution and debug-errors option is set, entering pry. Exception was: #{e.inspect}")
60
- logger.info("HINT: Use the pry 'backtrace' and 'up' commands to navigate to the test code")
61
- binding.pry # rubocop:disable Lint/Debugger
54
+ logger.info("Exception raised during step execution and debug-errors option is set, entering debug. Exception was: #{e.inspect}")
55
+ binding.break # rubocop:disable Lint/Debugger
62
56
  end
57
+ else
58
+ logger.info("Exception raised during step execution and debug-errors option is set, entering pry. Exception was: #{e.inspect}")
59
+ logger.info("HINT: Use the pry 'backtrace' and 'up' commands to navigate to the test code")
60
+ binding.pry # rubocop:disable Lint/Debugger
63
61
  end
64
- raise e
65
62
  end
63
+ raise e
66
64
  end
67
65
  end
68
66
 
@@ -72,7 +70,7 @@ module Beaker
72
70
  def manual_step step_name
73
71
  require 'readline'
74
72
  logger.notify "\n* #{step_name}\n"
75
- if(!@options.has_key?(:exec_manual_tests))
73
+ if !@options.has_key?(:exec_manual_tests)
76
74
  # if the option -exec-manual-tests is not set then this has executed outside of a manual tests
77
75
  # so we raise an error to avoid issues
78
76
  raise('--exec-manual-tests option not set, this means a manual_step was used outside a manual_test')
@@ -90,12 +88,10 @@ module Beaker
90
88
  fail_message = ''
91
89
  loop do
92
90
  fail_message = Readline.readline('What was the reason for failure? ', true).squeeze(" ").strip
93
- if fail_message == ''
94
- # if nothing is entered we tell the user to enter something
95
- puts "No reason for failure given, please enter reason for failure."
96
- else
97
- break
98
- end
91
+ break unless fail_message == ''
92
+
93
+ # if nothing is entered we tell the user to enter something
94
+ puts "No reason for failure given, please enter reason for failure."
99
95
  end
100
96
  raise Beaker::DSL::FailTest, fail_message
101
97
  else
@@ -112,14 +108,14 @@ module Beaker
112
108
  # @param [Proc] block The actions to be performed during this test.
113
109
  #
114
110
  def manual_test manual_test_name, &block
115
- if(@options.has_key?(:exec_manual_tests) && @options[:exec_manual_tests] == true)
111
+ if @options.has_key?(:exec_manual_tests) && @options[:exec_manual_tests] == true
116
112
  # here the option is set so we run the test as normal
117
113
  test_name manual_test_name, &block
118
114
  else
119
115
  # here no option was set so we log the test name and skip it
120
116
  test_name manual_test_name
121
- raise( Beaker::DSL::SkipTest,
122
- '--exec-manual-tests option not set, so skipping manual test' )
117
+ raise(Beaker::DSL::SkipTest,
118
+ '--exec-manual-tests option not set, so skipping manual test')
123
119
  end
124
120
  end
125
121
 
@@ -128,14 +124,12 @@ module Beaker
128
124
  # @param [String] my_name The name of the test to be logged.
129
125
  # @param [Proc] block The actions to be performed during this test.
130
126
  #
131
- def test_name my_name
127
+ def test_name my_name, &block
132
128
  logger.notify "\n#{my_name}\n"
133
129
  set_current_test_name(my_name)
134
- if block_given?
135
- logger.with_indent do
136
- yield
137
- end
138
- end
130
+ return unless block
131
+
132
+ logger.with_indent(&block)
139
133
  end
140
134
 
141
135
  # Declare a teardown process that will be called after a test case is
@@ -192,15 +186,15 @@ module Beaker
192
186
  # @author Chris Cowell-Shah (<tt>ccs@puppetlabs.com</tt>)
193
187
  def expect_failure(explanation)
194
188
  begin
195
- yield if block_given? # code block should contain an assert that you expect to fail
189
+ yield if block_given? # code block should contain an assert that you expect to fail
196
190
  rescue Beaker::DSL::Assertions, Minitest::Assertion => e
197
191
  # Yay! The assert in the code block failed, as expected.
198
192
  # Swallow the failure so the test passes.
199
193
  logger.notify 'An assertion was expected to fail, and did. ' +
200
- 'This is probably due to a known product bug, ' +
201
- 'and is probably not a problem. ' +
202
- "Additional info: '#{explanation}' " +
203
- "Failed assertion: '#{e}'"
194
+ 'This is probably due to a known product bug, ' +
195
+ 'and is probably not a problem. ' +
196
+ "Additional info: '#{explanation}' " +
197
+ "Failed assertion: '#{e}'"
204
198
  return
205
199
  end
206
200
  # Uh-oh! The assert in the code block unexpectedly passed.
@@ -268,22 +262,22 @@ module Beaker
268
262
  # @raise [SkipTest] Raises skip test if there are no valid hosts for
269
263
  # this test case after confinement.
270
264
  def confine(type, criteria, host_array = nil, &block)
271
- hosts_to_modify = Array( host_array || hosts )
272
- hosts_not_modified = hosts - hosts_to_modify #we aren't examining these hosts
265
+ hosts_to_modify = Array(host_array || hosts)
266
+ hosts_not_modified = hosts - hosts_to_modify # we aren't examining these hosts
273
267
  case type
274
268
  when :except
275
- if criteria and ( not criteria.empty? )
276
- hosts_to_modify = hosts_to_modify - select_hosts(criteria, hosts_to_modify, &block) + hosts_not_modified
277
- else
278
- # confining to all hosts *except* provided array of hosts
279
- hosts_to_modify = hosts_not_modified
280
- end
269
+ hosts_to_modify = if criteria and (not criteria.empty?)
270
+ hosts_to_modify - select_hosts(criteria, hosts_to_modify, &block) + hosts_not_modified
271
+ else
272
+ # confining to all hosts *except* provided array of hosts
273
+ hosts_not_modified
274
+ end
281
275
  if hosts_to_modify.empty?
282
276
  logger.warn "No suitable hosts without: #{criteria.inspect}"
283
277
  skip_test "No suitable hosts found without #{criteria.inspect}"
284
278
  end
285
279
  when :to
286
- if criteria and ( not criteria.empty? )
280
+ if criteria and (not criteria.empty?)
287
281
  hosts_to_modify = select_hosts(criteria, hosts_to_modify, &block) + hosts_not_modified
288
282
  else
289
283
  # confining to only hosts in provided array of hosts
@@ -305,12 +299,11 @@ module Beaker
305
299
  #
306
300
  # @see #confine
307
301
  def confine_block(type, criteria, host_array = nil)
308
- host_array = Array( host_array || hosts )
302
+ host_array = Array(host_array || hosts)
309
303
  original_hosts = self.hosts.dup
310
304
  confine(type, criteria, host_array)
311
305
 
312
306
  yield
313
-
314
307
  rescue Beaker::DSL::Outcomes::SkipTest => e
315
308
  # I don't like this much, but adding options to confine is a breaking change
316
309
  # to the DSL that would involve a major version bump
@@ -322,7 +315,7 @@ module Beaker
322
315
  self.hosts = original_hosts
323
316
  end
324
317
 
325
- #Return a set of hosts that meet the given criteria
318
+ # Return a set of hosts that meet the given criteria
326
319
  # @param [Hash{Symbol,String=>String,Regexp,Array<String,Regexp>}]
327
320
  # criteria Specify the criteria with which a host should be
328
321
  # considered for inclusion. The key is any attribute
@@ -340,33 +333,28 @@ module Beaker
340
333
  # should return true if the host matches this additional criteria.
341
334
  #
342
335
  # @return [Array<Host>] Returns an array of hosts that meet the provided criteria
343
- def select_hosts(criteria, host_array = nil)
336
+ def select_hosts(criteria, host_array = nil, &block)
344
337
  hosts_to_select_from = host_array || hosts
345
338
  criteria.each_pair do |property, value|
346
339
  hosts_to_select_from = hosts_to_select_from.select do |host|
347
340
  inspect_host host, property, value
348
341
  end
349
342
  end
350
- if block_given?
351
- hosts_to_select_from = hosts_to_select_from.select do |host|
352
- yield host
353
- end
354
- end
343
+ hosts_to_select_from = hosts_to_select_from.select(&block) if block
355
344
  hosts_to_select_from
356
345
  end
357
346
 
358
347
  # @!visibility private
359
348
  def inspect_host(host, property, one_or_more_values)
360
- values = Array(one_or_more_values)
361
- return values.any? do |value|
362
- true_false = false
349
+ Array(one_or_more_values).any? do |value|
363
350
  case value
364
351
  when String
365
- true_false = host[property.to_s].include? value
352
+ host[property.to_s].include? value
366
353
  when Regexp
367
- true_false = value.match?(host[property.to_s])
354
+ value.match?(host[property.to_s])
355
+ else
356
+ false
368
357
  end
369
- true_false
370
358
  end
371
359
  end
372
360
  end
@@ -12,7 +12,6 @@ module Beaker
12
12
  # - {Beaker::Options::Validator#validate_tags} ensures test tag CLI params
13
13
  # are valid for use by this module
14
14
  module TestTagging
15
-
16
15
  # Sets tags on the current {Beaker::TestCase}, and skips testing
17
16
  # if necessary after checking this case's tags against the ones that are
18
17
  # being included or excluded.
@@ -65,22 +64,21 @@ module Beaker
65
64
  # @!visibility private
66
65
  def platform_specific_tag_confines
67
66
  @options[:platform_tag_confines_object] ||= PlatformTagConfiner.new(
68
- @options[:platform_tag_confines]
67
+ @options[:platform_tag_confines],
69
68
  )
70
69
  confines = @options[:platform_tag_confines_object].confine_details(
71
- metadata[:case][:tags]
70
+ metadata[:case][:tags],
72
71
  )
73
72
  confines.each do |confine_details|
74
- logger.notify( confine_details[:log_message] )
73
+ logger.notify(confine_details[:log_message])
75
74
  confine(
76
75
  confine_details[:type],
77
- :platform => confine_details[:platform_regex]
76
+ :platform => confine_details[:platform_regex],
78
77
  )
79
78
  end
80
79
  end
81
80
 
82
81
  class PlatformTagConfiner
83
-
84
82
  # Constructs the PlatformTagConfiner, transforming the user format
85
83
  # into the internal structure for use by Beaker itself.
86
84
  #
@@ -122,7 +120,7 @@ module Beaker
122
120
  @tag_confine_details_hash[tag] << {
123
121
  :platform_regex => entry[:platform],
124
122
  :log_message => log_msg,
125
- :type => :except
123
+ :type => :except,
126
124
  }
127
125
  end
128
126
  end
@@ -143,7 +141,7 @@ module Beaker
143
141
  tag_confine_array = @tag_confine_details_hash[tag]
144
142
  next if tag_confine_array.nil?
145
143
 
146
- details.push( *tag_confine_array )
144
+ details.push(*tag_confine_array)
147
145
  # tag_confine_array.each do |confine_details|
148
146
  # details << confine_details
149
147
  # end
@@ -151,7 +149,6 @@ module Beaker
151
149
  details
152
150
  end
153
151
  end
154
-
155
152
  end
156
153
  end
157
- end
154
+ end
@@ -8,7 +8,6 @@ module Beaker
8
8
  # I find most of these adapters of suspicious value and have deprecated
9
9
  # many of them.
10
10
  module Wrappers
11
-
12
11
  # @param [String] command_string A string of to be interpolated
13
12
  # within the context of a host in
14
13
  # question
@@ -36,13 +35,13 @@ module Beaker
36
35
  # powershell("", {'-File' => '/path/to/file'})
37
36
  #
38
37
  # @return [Command]
39
- def powershell(command, args={})
38
+ def powershell(command, args = {})
40
39
  ps_opts = {
41
40
  'ExecutionPolicy' => 'Bypass',
42
- 'InputFormat' => 'None',
43
- 'NoLogo' => '',
44
- 'NoProfile' => '',
45
- 'NonInteractive' => ''
41
+ 'InputFormat' => 'None',
42
+ 'NoLogo' => '',
43
+ 'NoProfile' => '',
44
+ 'NonInteractive' => '',
46
45
  }
47
46
  encoded = false
48
47
  ps_opts.merge!(args)
@@ -56,20 +55,20 @@ module Beaker
56
55
  end
57
56
 
58
57
  ps_opts.each do |k, v|
59
- if v.eql?('') or v.nil?
60
- ps_args << "-#{k}"
61
- else
62
- ps_args << "-#{k} #{v}"
63
- end
58
+ ps_args << if v.eql?('') or v.nil?
59
+ "-#{k}"
60
+ else
61
+ "-#{k} #{v}"
62
+ end
64
63
  end
65
64
 
66
65
  # may not have a command if executing a file
67
66
  if command && !command.empty?
68
- if encoded
69
- ps_args << "-EncodedCommand #{encode_command(command)}"
70
- else
71
- ps_args << "-Command #{command}"
72
- end
67
+ ps_args << if encoded
68
+ "-EncodedCommand #{encode_command(command)}"
69
+ else
70
+ "-Command #{command}"
71
+ end
73
72
  end
74
73
 
75
74
  Command.new("powershell.exe", ps_args)
data/lib/beaker/dsl.rb CHANGED
@@ -1,5 +1,4 @@
1
- [ 'install_utils', 'roles', 'outcomes', 'assertions', 'patterns',
2
- 'structure', 'helpers', 'wrappers', 'test_tagging' ].each do |lib|
1
+ %w[install_utils roles outcomes assertions patterns structure helpers wrappers test_tagging].each do |lib|
3
2
  require "beaker/dsl/#{lib}"
4
3
  end
5
4
 
@@ -69,7 +68,7 @@ module Beaker
69
68
  # end
70
69
  # end
71
70
  #
72
- #@api dsl
71
+ # @api dsl
73
72
  module DSL
74
73
  include Beaker::DSL::Roles
75
74
  include Beaker::DSL::Outcomes
@@ -24,6 +24,6 @@ module Aix::Exec
24
24
  # (from {#ssh_service_restart}).
25
25
  def ssh_permit_user_environment
26
26
  exec(Beaker::Command.new("echo '\nPermitUserEnvironment yes' >> /etc/ssh/sshd_config"))
27
- ssh_service_restart()
27
+ ssh_service_restart
28
28
  end
29
29
  end
@@ -12,5 +12,4 @@ module Aix::File
12
12
  def path_split(paths)
13
13
  paths.split(':')
14
14
  end
15
-
16
15
  end
@@ -1,7 +1,7 @@
1
1
  module Aix::Group
2
2
  include Beaker::CommandFactory
3
3
 
4
- def group_list()
4
+ def group_list
5
5
  execute("lsgroup -a ALL") do |result|
6
6
  yield result if block_given?
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Aix::User
2
2
  include Beaker::CommandFactory
3
3
 
4
- def user_list()
4
+ def user_list
5
5
  execute("lsuser ALL") do |result|
6
6
  users = []
7
7
  result.stdout.each_line do |line|
@@ -1,17 +1,16 @@
1
- [ 'host', 'command_factory' ].each do |lib|
1
+ %w[host command_factory].each do |lib|
2
2
  require "beaker/#{lib}"
3
3
  end
4
4
 
5
5
  module Aix
6
6
  class Host < Unix::Host
7
- [ 'user', 'group', 'file', 'exec' ].each do |lib|
8
- require "beaker/host/aix/#{lib}"
7
+ %w[user group file exec].each do |lib|
8
+ require "beaker/host/aix/#{lib}"
9
9
  end
10
10
 
11
11
  include Aix::User
12
12
  include Aix::Group
13
13
  include Aix::File
14
14
  include Aix::Exec
15
-
16
15
  end
17
16
  end