diff options
| author | Jeff McCune <jeff@puppetlabs.com> | 2011-06-03 11:42:39 -0700 | 
|---|---|---|
| committer | Jeff McCune <jeff@puppetlabs.com> | 2011-06-03 11:42:39 -0700 | 
| commit | 3d093334a60b711d9518d067f4dd3dcdfc4cc5c1 (patch) | |
| tree | f70061f24fb046c844e8163f99491c2e7ef1c2a0 | |
| parent | cdbdc275ac4ff8b62f79154a2e077e79a2d9d07c (diff) | |
| parent | 20b6c24186b6dd9d3d81524499b80f26b1c6c8eb (diff) | |
| download | puppet-stdlib-3d093334a60b711d9518d067f4dd3dcdfc4cc5c1.tar.gz puppet-stdlib-3d093334a60b711d9518d067f4dd3dcdfc4cc5c1.tar.bz2  | |
Merge branch 'feature/master/validation_functions'
* feature/master/validation_functions:
  Add spec test for validate_bool function
  Add validate_bool() function to stdlib
| -rw-r--r-- | lib/puppet/parser/functions/validate_bool.rb | 39 | ||||
| -rw-r--r-- | spec/unit/puppet/parser/functions/validate_bool_spec.rb | 68 | 
2 files changed, 107 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/validate_bool.rb b/lib/puppet/parser/functions/validate_bool.rb new file mode 100644 index 0000000..49e6378 --- /dev/null +++ b/lib/puppet/parser/functions/validate_bool.rb @@ -0,0 +1,39 @@ +module Puppet::Parser::Functions + +  newfunction(:validate_bool, :doc => <<-'ENDHEREDOC') do |args| +    Validate all passed values are true or false.  Abort catalog compilation if the +    value does not pass the check. + +    Example: + +    These booleans validate + +        $iamtrue = true +        validate_bool(true) +        validate_bool(true, true, false, $iamtrue) + +    These strings do NOT validate and will abort catalog compilation + +        $some_array = [ true ] +        validate_bool("false") +        validate_bool("true") +        validate_bool($some_array) + +    * Jeff McCune <jeff@puppetlabs.com> +    * Dan Bode <dan@puppetlabs.com> + +    ENDHEREDOC + +    unless args.length > 0 then +      raise Puppet::ParseError, ("validate_bool(): wrong number of arguments (#{args.length}; must be > 0)") +    end + +    args.each do |arg| +      unless (arg.is_a?(TrueClass) || arg.is_a?(FalseClass)) +        raise Puppet::ParseError, ("#{arg.inspect} is not a boolean.  It looks to be a #{arg.class}") +      end +    end + +  end + +end diff --git a/spec/unit/puppet/parser/functions/validate_bool_spec.rb b/spec/unit/puppet/parser/functions/validate_bool_spec.rb new file mode 100644 index 0000000..19ecf23 --- /dev/null +++ b/spec/unit/puppet/parser/functions/validate_bool_spec.rb @@ -0,0 +1,68 @@ +require 'puppet' + +# We don't need this for the basic tests we're doing +# require 'spec_helper' + +# Dan mentioned that Nick recommended the function method call +# to return the string value for the test description. +# this will not even try the test if the function cannot be +# loaded. +describe Puppet::Parser::Functions.function(:validate_bool) do + +  # Pulled from Dan's create_resources function +  def get_scope +    @topscope = Puppet::Parser::Scope.new +    # This is necessary so we don't try to use the compiler to discover our parent. +    @topscope.parent = nil +    @scope = Puppet::Parser::Scope.new +    @scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => 'production')) +    @scope.parent = @topscope +    @compiler = @scope.compiler +  end + +  describe 'when calling validate_bool from puppet' do +    it "should validate true and false as bare words" do +      Puppet[:code] = 'validate_bool(true)' +      get_scope +      @scope.compiler.compile +    end +    it "should not compile when false is a string" do +      Puppet[:code] = 'validate_bool("false")' +      get_scope +      expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) +    end +    it "should not compile when an arbitrary string is passed" do +      Puppet[:code] = 'validate_bool("jeff and dan are awesome")' +      get_scope +      expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) +    end +    it "should not compile when no arguments are passed" do +      Puppet[:code] = 'validate_bool()' +      get_scope +      expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /wrong number of arguments/) +    end + +    it "should compile when multiple boolean arguments are passed" do +      Puppet[:code] = <<-'ENDofPUPPETcode' +        $foo = true +        $bar = false +        validate_bool($foo, $bar, true, false) +      ENDofPUPPETcode +      get_scope +      @scope.compiler.compile +    end + +    it "should compile when multiple boolean arguments are passed" do +      Puppet[:code] = <<-'ENDofPUPPETcode' +        $foo = true +        $bar = false +        validate_bool($foo, $bar, true, false, 'jeff') +      ENDofPUPPETcode +      get_scope +      expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) +    end + +  end + +end +  | 
