Revision 8b27dabf
Added by Ewoud Kohl van Wijngaarden about 4 years ago
lib/proxy/default_plugin_validators.rb | ||
---|---|---|
class Proxy::DefaultPluginValidators
|
||
def self.validators
|
||
{:file_readable => ::Proxy::PluginValidators::FileReadable, :presence => ::Proxy::PluginValidators::Presence}
|
||
{
|
||
file_readable: ::Proxy::PluginValidators::FileReadable,
|
||
presence: ::Proxy::PluginValidators::Presence,
|
||
url: ::Proxy::PluginValidators::Url,
|
||
}
|
||
end
|
||
end
|
lib/proxy/plugin_validators.rb | ||
---|---|---|
true
|
||
end
|
||
end
|
||
|
||
class Url < Base
|
||
def validate!(settings)
|
||
setting_value = settings[@setting_name]
|
||
raise ::Proxy::Error::ConfigurationError, "Setting '#{@setting_name}' is expected to contain a url" if setting_value.to_s.empty?
|
||
|
||
parsed = URI.parse(setting_value)
|
||
raise ::Proxy::Error::ConfigurationError, "Setting '#{@setting_name}' is missing a scheme" if parsed.scheme.nil? || parsed.scheme.empty?
|
||
|
||
true
|
||
rescue URI::InvalidURIError
|
||
raise ::Proxy::Error::ConfigurationError.new("Setting '#{@setting_name}' contains an invalid url")
|
||
end
|
||
end
|
||
end
|
modules/dhcp_libvirt/dhcp_libvirt_plugin.rb | ||
---|---|---|
|
||
requires :dhcp, ::Proxy::VERSION
|
||
default_settings :url => "qemu:///system", :network => 'default'
|
||
validate :url, :url => true
|
||
|
||
load_classes ::Proxy::DHCP::Libvirt::PluginConfiguration
|
||
load_dependency_injection_wirings ::Proxy::DHCP::Libvirt::PluginConfiguration
|
modules/dns_libvirt/dns_libvirt_plugin.rb | ||
---|---|---|
requires :dns, ::Proxy::VERSION
|
||
|
||
default_settings :url => "qemu:///system", :network => 'default'
|
||
validate :url, :url => true
|
||
|
||
load_classes ::Proxy::Dns::Libvirt::PluginConfiguration
|
||
load_dependency_injection_wirings ::Proxy::Dns::Libvirt::PluginConfiguration
|
modules/puppet_proxy_common/custom_validators.rb | ||
---|---|---|
module ::Proxy::Puppet
|
||
class Validators
|
||
class UrlValidator < ::Proxy::PluginValidators::Base
|
||
def validate!(settings)
|
||
raise ::Proxy::Error::ConfigurationError, "Setting 'puppet_url' is expected to contain a url for puppet server" if settings[:puppet_url].to_s.empty?
|
||
URI.parse(settings[:puppet_url])
|
||
rescue URI::InvalidURIError
|
||
raise ::Proxy::Error::ConfigurationError.new("Setting 'puppet_url' contains an invalid url for puppet server")
|
||
end
|
||
end
|
||
end
|
||
end
|
modules/puppet_proxy_puppet_api/plugin_configuration.rb | ||
---|---|---|
end
|
||
|
||
def load_classes
|
||
require 'puppet_proxy_common/custom_validators'
|
||
require 'puppet_proxy_common/errors'
|
||
require 'puppet_proxy_common/environments_retriever_base'
|
||
require 'puppet_proxy_common/environment'
|
modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api.rb | ||
---|---|---|
require 'puppet_proxy_common/custom_validators'
|
||
require 'puppet_proxy_puppet_api/plugin_configuration'
|
||
require 'puppet_proxy_puppet_api/puppet_proxy_puppet_api_plugin'
|
modules/puppet_proxy_puppet_api/puppet_proxy_puppet_api_plugin.rb | ||
---|---|---|
|
||
plugin :puppet_proxy_puppet_api, ::Proxy::VERSION
|
||
|
||
load_validators :url => ::Proxy::Puppet::Validators::UrlValidator
|
||
load_programmable_settings ::Proxy::PuppetApi::PluginConfiguration
|
||
load_classes ::Proxy::PuppetApi::PluginConfiguration
|
||
load_dependency_injection_wirings ::Proxy::PuppetApi::PluginConfiguration
|
modules/puppetca_http_api/puppetca_http_api_plugin.rb | ||
---|---|---|
require 'puppet_proxy_common/custom_validators'
|
||
|
||
module ::Proxy
|
||
module PuppetCa
|
||
module PuppetcaHttpApi
|
||
... | ... | |
|
||
default_settings :puppet_ssl_ca => '/etc/puppetlabs/puppet/ssl/certs/ca.pem'
|
||
|
||
load_validators :url => ::Proxy::Puppet::Validators::UrlValidator
|
||
requires :puppetca, ::Proxy::VERSION
|
||
|
||
validate :puppet_url, :url => true
|
test/plugins/validator_test.rb | ||
---|---|---|
end
|
||
end
|
||
end
|
||
|
||
class UrlValidatorTest < Test::Unit::TestCase
|
||
class UrlValidatorTestPlugin < ::Proxy::Plugin
|
||
default_settings :a_setting => 'http://example.com'
|
||
end
|
||
|
||
def test_required_parameter_with_a_value_passes_validation
|
||
assert ::Proxy::PluginValidators::Url.new(UrlValidatorTestPlugin, 'a_setting', nil, nil).validate!(:a_setting => 'http://example.com')
|
||
end
|
||
|
||
def test_empty_string_treated_as_missing_value
|
||
error = assert_raises ::Proxy::Error::ConfigurationError do
|
||
::Proxy::PluginValidators::Url.new(UrlValidatorTestPlugin, 'a_setting', nil, nil).validate!(:a_setting => '')
|
||
end
|
||
|
||
assert_match(/expected to contain a url/, error.message)
|
||
end
|
||
|
||
def test_required_parameter_without_a_value_fails_validation
|
||
error = assert_raises ::Proxy::Error::ConfigurationError do
|
||
::Proxy::PluginValidators::Url.new(UrlValidatorTestPlugin, 'a_setting', nil, nil).validate!(:a_setting => nil)
|
||
end
|
||
|
||
assert_match(/expected to contain a url/, error.message)
|
||
end
|
||
|
||
def test_required_parameter_without_scheme_fails_validation
|
||
error = assert_raises ::Proxy::Error::ConfigurationError do
|
||
::Proxy::PluginValidators::Url.new(UrlValidatorTestPlugin, 'a_setting', nil, nil).validate!(:a_setting => 'example.com')
|
||
end
|
||
|
||
assert_match(/missing a scheme/, error.message)
|
||
end
|
||
|
||
def test_optional_parameter_without_a_value_fails_validation
|
||
error = assert_raises ::Proxy::Error::ConfigurationError do
|
||
::Proxy::PluginValidators::Url.new(UrlValidatorTestPlugin, 'optional_setting', nil, nil).validate!(:optional_setting => nil)
|
||
end
|
||
|
||
assert_match(/expected to contain a url/, error.message)
|
||
end
|
||
end
|
Also available in: Unified diff
Fixes #29468 - Add default URL validator for plugins
URL settings are common and this moves it from a custom validator in the
Puppet module to a default. Also adds tests and ensures the dhcp and dns
libvirt providers use it too.