Project

General

Profile

« Previous | Next » 

Revision 8b27dabf

Added by Ewoud Kohl van Wijngaarden about 4 years ago

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.

View differences:

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