]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
(Maint) Fix up the get_module_path parser function
authorJeff McCune <jeff@puppetlabs.com>
Fri, 20 Jul 2012 00:37:39 +0000 (17:37 -0700)
committerJeff McCune <jeff@puppetlabs.com>
Mon, 23 Jul 2012 16:21:22 +0000 (09:21 -0700)
This patch switches the spec tests for the get_module_path function to
use mock objects.  The underlying Puppet::Module.find method has
reasonable test coverage inside of Puppet core so we might as well break
the tight dependency while we're fixing up the specs to use the new
parser scope.

The behavior of the parser function itself should still have complete
coverage even though the tests have switched to mock the implementation
inside of Puppet.

lib/puppet/parser/functions/get_module_path.rb
spec/unit/puppet/parser/functions/get_module_path_spec.rb

index 4d2b50b286c9de0fb8517b5081c80740687daa22..1421b91f52f0244fee66a2515722da441e76795f 100644 (file)
@@ -7,7 +7,7 @@ module Puppet::Parser::Functions
       $module_path = get_module_path('stdlib')
   EOT
   ) do |args|
-    raise(Puppet::ParseError, "get_module_name(): Wrong number of arguments, expects one") unless args.size == 1
+    raise(Puppet::ParseError, "get_module_path(): Wrong number of arguments, expects one") unless args.size == 1
     if module_path = Puppet::Module.find(args[0], compiler.environment.to_s)
       module_path.path
     else
index d8340f45c71434e080c6baa86985cbf4b05597b6..0a769ebe20daa383f748971a7aa5852d219567aa 100644 (file)
@@ -1,42 +1,44 @@
-#!/usr/bin/env rspec
-require 'puppet'
-require 'fileutils'
+#! /usr/bin/env ruby -S rspec
 require 'spec_helper'
+
 describe Puppet::Parser::Functions.function(:get_module_path) do
-  include PuppetSpec::Files
+  Internals = PuppetlabsSpec::PuppetInternals
 
-  def get_scope(environment = 'production')
-    scope = Puppet::Parser::Scope.new
-    scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => environment))
-    scope
+  def scope(environment = "production")
+    Internals.scope(:compiler => Internals.compiler(:node => Internals.node(:environment => environment)))
   end
+
   it 'should only allow one argument' do
-    expect { get_scope.function_get_module_path([]) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
-    expect { get_scope.function_get_module_path(['1','2','3']) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
+    expect { scope.function_get_module_path([]) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
+    expect { scope.function_get_module_path(['1','2','3']) }.should raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
   end
   it 'should raise an exception when the module cannot be found' do
-    expect { get_scope.function_get_module_path(['foo']) }.should raise_error(Puppet::ParseError, /Could not find module/)
+    expect { scope.function_get_module_path(['foo']) }.should raise_error(Puppet::ParseError, /Could not find module/)
   end
   describe 'when locating a module' do
-    let(:modulepath) { tmpdir('modulepath') }
-    let(:foo_path) { File.join(modulepath, 'foo') }
-    before(:each) { FileUtils.mkdir(foo_path) }
+    let(:modulepath) { "/tmp/does_not_exist" }
+    let(:path_of_module_foo) do
+      mod = mock("Puppet::Module")
+      mod.stubs(:path).returns("/tmp/does_not_exist/foo")
+      mod
+    end
+
+    before(:each) { Puppet[:modulepath] = modulepath }
+
     it 'should be able to find module paths from the modulepath setting' do
-      Puppet[:modulepath] = modulepath
-      get_scope.function_get_module_path(['foo']).should == foo_path
+      Puppet::Module.expects(:find).with('foo', 'production').returns(path_of_module_foo)
+      scope.function_get_module_path(['foo']).should == path_of_module_foo.path
     end
     it 'should be able to find module paths when the modulepath is a list' do
       Puppet[:modulepath] = modulepath + ":/tmp"
-      get_scope.function_get_module_path(['foo']).should == foo_path
+      Puppet::Module.expects(:find).with('foo', 'production').returns(path_of_module_foo)
+      scope.function_get_module_path(['foo']).should == path_of_module_foo.path
     end
-    it 'should be able to find module paths from the environment' do
-      conf_file = tmpfile('conffile')
-      File.open(conf_file, 'w') do |fh|
-        fh.write("[dansenvironment]\nmodulepath = #{modulepath}")
-      end
-      Puppet[:config] = conf_file
-      Puppet.parse_config
-      get_scope('dansenvironment').function_get_module_path(['foo']).should ==foo_path
+    it 'should respect the environment' do
+      pending("Disabled on Puppet 2.6.x") if Puppet.version =~ /^2\.6\b/
+      Puppet.settings[:environment] = 'danstestenv'
+      Puppet::Module.expects(:find).with('foo', 'danstestenv').returns(path_of_module_foo)
+      scope('danstestenv').function_get_module_path(['foo']).should == path_of_module_foo.path
     end
   end
 end