Class: Beaker::Options::Validator
- Inherits:
-
Object
- Object
- Beaker::Options::Validator
- Defined in:
- lib/beaker/options/validator.rb
Constant Summary collapse
- VALID_FAIL_MODES =
/stop|fast|slow/
- VALID_PRESERVE_HOSTS =
/always|onfail|onpass|never/
- FRICTIONLESS_ROLE =
'frictionless'
- FRICTIONLESS_ADDITIONAL_ROLES =
%w(master database dashboard console)
Instance Method Summary collapse
-
#check_yaml_file(f, msg = '') ⇒ Object
Determine is a given file exists and is a valid YAML file.
-
#default_set?(default) ⇒ true, false
Raises an ArgumentError if more than one default exists, otherwise returns true or false if default is set.
-
#validate_fail_mode(fail_mode) ⇒ nil
Raises an error if fail_mode is not a supported failure mode.
-
#validate_files(file_list, path) ⇒ Object
Raise an error if file_list is empty.
-
#validate_frictionless_roles(role_array) ⇒ Object
Raises an error if role_array contains the frictionless role and conflicting roles.
-
#validate_master_count(count) ⇒ nil
Raise an error if the master count is incorrect.
-
#validate_path(path) ⇒ Object
Raise an error if path is not a valid file or directory.
-
#validate_platform(host, name) ⇒ nil
Raise an error if host does not have a platform defined.
-
#validate_preserve_hosts(hosts_setting) ⇒ nil
Raises an error if hosts_setting is not a supported preserve hosts value.
-
#validate_test_tags(tags_and, tags_or, tags_exclude) ⇒ nil
Raise an error if an item exists in both the include and exclude lists.
-
#validator_error(msg = '') ⇒ Object
(also: #parser_error)
Raises an ArgumentError with associated message.
Instance Method Details
#check_yaml_file(f, msg = '') ⇒ Object
Determine is a given file exists and is a valid YAML file
13 14 15 16 17 18 19 20 21 |
# File 'lib/beaker/options/validator.rb', line 13 def check_yaml_file(f, msg = '') validator_error "#{f} does not exist (#{msg})" unless File.file?(f) begin YAML.load_file(f) rescue Beaker::Options::Parser::PARSE_ERROR => e validator_error "#{f} is not a valid YAML file (#{msg})\n\t#{e}" end end |
#default_set?(default) ⇒ true, false
Raises an ArgumentError if more than one default exists, otherwise returns true or false if default is set.
38 39 40 41 42 43 44 45 46 |
# File 'lib/beaker/options/validator.rb', line 38 def default_set?(default) if default.empty? return false elsif default.length > 1 validator_error "Only one host may have the role 'default', default roles assigned to #{default}" end true end |
#validate_fail_mode(fail_mode) ⇒ nil
Raises an error if fail_mode is not a supported failure mode.
52 53 54 55 56 57 |
# File 'lib/beaker/options/validator.rb', line 52 def validate_fail_mode(fail_mode) # check for valid fail mode return if fail_mode.is_a?(String) && VALID_FAIL_MODES.match?(fail_mode) validator_error "--fail-mode must be one of fast or slow, not '#{fail_mode}'" end |
#validate_files(file_list, path) ⇒ Object
Raise an error if file_list is empty
124 125 126 127 128 |
# File 'lib/beaker/options/validator.rb', line 124 def validate_files(file_list, path) return unless file_list.empty? validator_error("No files found for path: '#{path}'") end |
#validate_frictionless_roles(role_array) ⇒ Object
Raises an error if role_array contains the frictionless role and conflicting roles.
102 103 104 105 106 |
# File 'lib/beaker/options/validator.rb', line 102 def validate_frictionless_roles(role_array) return unless role_array.include?(FRICTIONLESS_ROLE) and !(role_array & FRICTIONLESS_ADDITIONAL_ROLES).empty? validator_error "Only agent nodes may have the role 'frictionless'." end |
#validate_master_count(count) ⇒ nil
Raise an error if the master count is incorrect.
113 114 115 116 117 |
# File 'lib/beaker/options/validator.rb', line 113 def validate_master_count(count) return unless count > 1 validator_error("Only one host/node may have the role 'master'.") end |
#validate_path(path) ⇒ Object
Raise an error if path is not a valid file or directory
134 135 136 137 138 |
# File 'lib/beaker/options/validator.rb', line 134 def validate_path(path) return unless !File.file?(path) && !File.directory?(path) validator_error("#{path} used as a file option but is not a file or directory!") end |
#validate_platform(host, name) ⇒ nil
Raise an error if host does not have a platform defined.
75 76 77 78 79 |
# File 'lib/beaker/options/validator.rb', line 75 def validate_platform(host, name) return unless !host['platform'] || host['platform'].empty? validator_error "Host #{name} does not have a platform specified" end |
#validate_preserve_hosts(hosts_setting) ⇒ nil
Raises an error if hosts_setting is not a supported preserve hosts value.
63 64 65 66 67 68 |
# File 'lib/beaker/options/validator.rb', line 63 def validate_preserve_hosts(hosts_setting) # check for valid preserve_hosts option return if hosts_setting.is_a?(String) && VALID_PRESERVE_HOSTS.match?(hosts_setting) validator_error("--preserve_hosts must be one of always, onfail, onpass or never, not '#{hosts_setting}'") end |
#validate_test_tags(tags_and, tags_or, tags_exclude) ⇒ nil
see test tagging logic at DSL::TestTagging module
Raise an error if an item exists in both the include and exclude lists.
88 89 90 91 92 93 94 95 96 |
# File 'lib/beaker/options/validator.rb', line 88 def (, , ) validator_error "cannot have values for both test tagging operands (AND and OR)" if .length > 0 && .length > 0 .each do |included_tag| # select items from exclude set that match included_tag # no match is an empty list/array/[] validator_error "tag '#{included_tag}' cannot be in both the included and excluded tag sets" if .select { |ex| ex == included_tag } != [] end end |
#validator_error(msg = '') ⇒ Object Also known as: parser_error
Raises an ArgumentError with associated message
26 27 28 |
# File 'lib/beaker/options/validator.rb', line 26 def validator_error(msg = '') raise ArgumentError, msg.to_s end |