summaryrefslogtreecommitdiffstats
path: root/spec/unit/util
diff options
context:
space:
mode:
authorMatt Robinson <matt@puppetlabs.com>2011-03-16 11:19:10 -0700
committerMatt Robinson <matt@puppetlabs.com>2011-03-16 11:19:10 -0700
commitde8fea8ac8b25f45ffb07a2ef63a6da0cbaf0c41 (patch)
treef520b1400b4d35e63a0b1977b508d51d9422a88a /spec/unit/util
parent86c60354da1d5a2a54baf6dbd92677a12701423d (diff)
parentc60c6cacaca6b8e34c29835f9e5749fc380b8e0b (diff)
downloadpuppet-de8fea8ac8b25f45ffb07a2ef63a6da0cbaf0c41.tar.gz
puppet-de8fea8ac8b25f45ffb07a2ef63a6da0cbaf0c41.tar.xz
puppet-de8fea8ac8b25f45ffb07a2ef63a6da0cbaf0c41.zip
Merge branch '2.6.next' into 2.6.x
* 2.6.next: (102 commits) (#5073) Download plugins even if you're filtering on tags Fix #5610: Prevent unnecessary RAL lookups Revert "Merge branch 'ticket/2.6.x/5605' of git://github.com/stschulte/puppet into 2.6.next" (#6723) Fix withenv environment restoration bug (#6689) Remove extraneous include of Puppet::Util in InventoryActiveRecord Remove extra trailing whitespace from lib/puppet/resource.rb (#5428) More fully "stub" Puppet::Resource::Reference for use with storedconfigs (#6707) Fix typo in rest_authconfig.rb (#6689) Make inventory_active_record terminus search quickly (#5392) Give a better error when realizing a non-existant resource (#2645) Adding a less-stubby test to verify the "system" attribute's behavior maint: Remove serialization of InventoryFact values maint: Rename InventoryHost to InventoryNode Fixed #2645 - Added support for creating system users maint: Remove spec run noise maint:Refactor of mount provider integration tests (#6338) Support searching on metadata in InventoryActiveRecord terminus (#6338) Implement search for InventoryActiveRecord facts terminus (#6338) Add an InventoryActiveRecord terminus for Facts Added integration tests for the mount provider ...
Diffstat (limited to 'spec/unit/util')
-rw-r--r--spec/unit/util/execution_spec.rb49
-rw-r--r--spec/unit/util/execution_stub_spec.rb35
-rwxr-xr-xspec/unit/util/rdoc/parser_spec.rb18
-rwxr-xr-xspec/unit/util/settings_spec.rb13
4 files changed, 110 insertions, 5 deletions
diff --git a/spec/unit/util/execution_spec.rb b/spec/unit/util/execution_spec.rb
new file mode 100644
index 000000000..312dd3b8e
--- /dev/null
+++ b/spec/unit/util/execution_spec.rb
@@ -0,0 +1,49 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe Puppet::Util::Execution do
+ include Puppet::Util::Execution
+ describe "#withenv" do
+ before :each do
+ @original_path = ENV["PATH"]
+ @new_env = {:PATH => "/some/bogus/path"}
+ end
+
+ it "should change environment variables within the block then reset environment variables to their original values" do
+ withenv @new_env do
+ ENV["PATH"].should == "/some/bogus/path"
+ end
+ ENV["PATH"].should == @original_path
+ end
+
+ it "should reset environment variables to their original values even if the block fails" do
+ begin
+ withenv @new_env do
+ ENV["PATH"].should == "/some/bogus/path"
+ raise "This is a failure"
+ end
+ rescue
+ end
+ ENV["PATH"].should == @original_path
+ end
+
+ it "should reset environment variables even when they are set twice" do
+ # Setting Path & Environment parameters in Exec type can cause weirdness
+ @new_env["PATH"] = "/someother/bogus/path"
+ withenv @new_env do
+ # When assigning duplicate keys, can't guarantee order of evaluation
+ ENV["PATH"].should =~ /\/some.*\/bogus\/path/
+ end
+ ENV["PATH"].should == @original_path
+ end
+
+ it "should remove any new environment variables after the block ends" do
+ @new_env[:FOO] = "bar"
+ withenv @new_env do
+ ENV["FOO"].should == "bar"
+ end
+ ENV["FOO"].should == nil
+ end
+ end
+end
diff --git a/spec/unit/util/execution_stub_spec.rb b/spec/unit/util/execution_stub_spec.rb
new file mode 100644
index 000000000..14cf9c67a
--- /dev/null
+++ b/spec/unit/util/execution_stub_spec.rb
@@ -0,0 +1,35 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+describe Puppet::Util::ExecutionStub do
+ it "should use the provided stub code when 'set' is called" do
+ Puppet::Util::ExecutionStub.set do |command, options|
+ command.should == ['/bin/foo', 'bar']
+ "stub output"
+ end
+ Puppet::Util::ExecutionStub.current_value.should_not == nil
+ Puppet::Util.execute(['/bin/foo', 'bar']).should == "stub output"
+ end
+
+ it "should automatically restore normal execution at the conclusion of each spec test" do
+ # Note: this test relies on the previous test creating a stub.
+ Puppet::Util::ExecutionStub.current_value.should == nil
+ end
+
+ it "should restore normal execution after 'reset' is called" do
+ true_command = Puppet::Util.which('true') # Note: "true" exists at different paths in different OSes
+ stub_call_count = 0
+ Puppet::Util::ExecutionStub.set do |command, options|
+ command.should == [true_command]
+ stub_call_count += 1
+ 'stub called'
+ end
+ Puppet::Util.execute([true_command]).should == 'stub called'
+ stub_call_count.should == 1
+ Puppet::Util::ExecutionStub.reset
+ Puppet::Util::ExecutionStub.current_value.should == nil
+ Puppet::Util.execute([true_command]).should == ''
+ stub_call_count.should == 1
+ end
+end
diff --git a/spec/unit/util/rdoc/parser_spec.rb b/spec/unit/util/rdoc/parser_spec.rb
index 28c33c295..b4453ae86 100755
--- a/spec/unit/util/rdoc/parser_spec.rb
+++ b/spec/unit/util/rdoc/parser_spec.rb
@@ -43,6 +43,18 @@ describe RDoc::Parser do
@parser.scan.should be_a(RDoc::PuppetTopLevel)
end
+
+ it "should scan the top level even if the file has already parsed" do
+ known_type = stub 'known_types'
+ env = stub 'env'
+ Puppet::Node::Environment.stubs(:new).returns(env)
+ env.stubs(:known_resource_types).returns(known_type)
+ known_type.expects(:watching_file?).with("module/manifests/init.pp").returns(true)
+
+ @parser.expects(:scan_top_level)
+
+ @parser.scan
+ end
end
describe "when scanning top level entities" do
@@ -339,7 +351,7 @@ describe RDoc::Parser do
describe "when scanning for includes and requires" do
def create_stmt(name)
- stmt_value = stub "#{name}_value", :value => "myclass"
+ stmt_value = stub "#{name}_value", :to_s => "myclass"
Puppet::Parser::AST::Function.new(
:name => name,
@@ -357,13 +369,13 @@ describe RDoc::Parser do
it "should also scan mono-instruction code" do
@class.expects(:add_include).with { |i| i.is_a?(RDoc::Include) and i.name == "myclass" and i.comment == "mydoc" }
- @parser.scan_for_include_or_require(@class,create_stmt("include"))
+ @parser.scan_for_include_or_require(@class, create_stmt("include"))
end
it "should register recursively includes to the current container" do
@code.stubs(:children).returns([ create_stmt("include") ])
- @class.expects(:add_include).with { |i| i.is_a?(RDoc::Include) and i.name == "myclass" and i.comment == "mydoc" }
+ @class.expects(:add_include)#.with { |i| i.is_a?(RDoc::Include) and i.name == "myclass" and i.comment == "mydoc" }
@parser.scan_for_include_or_require(@class, [@code])
end
diff --git a/spec/unit/util/settings_spec.rb b/spec/unit/util/settings_spec.rb
index 7bca44b76..07b712c08 100755
--- a/spec/unit/util/settings_spec.rb
+++ b/spec/unit/util/settings_spec.rb
@@ -284,7 +284,8 @@ describe Puppet::Util::Settings do
@settings = Puppet::Util::Settings.new
@settings.setdefaults :section,
:config => ["/my/file", "a"],
- :one => ["ONE", "a"]
+ :one => ["ONE", "a"],
+ :two => ["TWO", "b"]
FileTest.stubs(:exist?).returns true
Puppet.stubs(:run_mode).returns stub('run_mode', :name => :mymode)
end
@@ -331,12 +332,20 @@ describe Puppet::Util::Settings do
@settings.value(:one, "env").should == "envval"
end
- it "should interpolate found values using the current environment" do
+ it 'should use the current environment for $environment' do
@settings.setdefaults :main, :myval => ["$environment/foo", "mydocs"]
@settings.value(:myval, "myenv").should == "myenv/foo"
end
+ it "should interpolate found values using the current environment" do
+ text = "[main]\none = mainval\n[myname]\none = nameval\ntwo = $one/two\n"
+ @settings.stubs(:read_file).returns(text)
+ @settings.parse
+
+ @settings.value(:two, "myname").should == "nameval/two"
+ end
+
it "should return values in a specified environment before values in the main or name sections" do
text = "[env]\none = envval\n[main]\none = mainval\n[myname]\none = nameval\n"
@settings.stubs(:read_file).returns(text)