summaryrefslogtreecommitdiff
path: root/spec/unit/node/environment_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/node/environment_spec.rb')
-rwxr-xr-xspec/unit/node/environment_spec.rb90
1 files changed, 90 insertions, 0 deletions
diff --git a/spec/unit/node/environment_spec.rb b/spec/unit/node/environment_spec.rb
index 0881b8576..3df5d329c 100755
--- a/spec/unit/node/environment_spec.rb
+++ b/spec/unit/node/environment_spec.rb
@@ -43,6 +43,42 @@ describe Puppet::Node::Environment do
Puppet::Node::Environment.new(one).should equal(one)
end
+ describe "equality" do
+ it "works as a hash key" do
+ base = Puppet::Node::Environment.create(:first, ["modules"], "manifests")
+ same = Puppet::Node::Environment.create(:first, ["modules"], "manifests")
+ different = Puppet::Node::Environment.create(:first, ["different"], "manifests")
+ hash = {}
+
+ hash[base] = "base env"
+ hash[same] = "same env"
+ hash[different] = "different env"
+
+ expect(hash[base]).to eq("same env")
+ expect(hash[different]).to eq("different env")
+ expect(hash).to have(2).item
+ end
+
+ it "is equal when name, modules, and manifests are the same" do
+ base = Puppet::Node::Environment.create(:base, ["modules"], "manifests")
+ different_name = Puppet::Node::Environment.create(:different, base.full_modulepath, base.manifest)
+
+ expect(base).to_not eq("not an environment")
+
+ expect(base).to eq(base)
+ expect(base.hash).to eq(base.hash)
+
+ expect(base.override_with(:modulepath => ["different"])).to_not eq(base)
+ expect(base.override_with(:modulepath => ["different"]).hash).to_not eq(base.hash)
+
+ expect(base.override_with(:manifest => "different")).to_not eq(base)
+ expect(base.override_with(:manifest => "different").hash).to_not eq(base.hash)
+
+ expect(different_name).to_not eq(base)
+ expect(different_name.hash).to_not eq(base.hash)
+ end
+ end
+
describe "overriding an existing environment" do
let(:original_path) { [tmpdir('original')] }
let(:new_path) { [tmpdir('new')] }
@@ -151,6 +187,60 @@ describe Puppet::Node::Environment do
end
end
+ it "does not register conflicting_manifest_settings? when not using directory environments" do
+ expect(Puppet::Node::Environment.create(:directory, [], '/some/non/default/manifest.pp').conflicting_manifest_settings?).to be_false
+ end
+
+ describe "when operating in the context of directory environments" do
+ before(:each) do
+ Puppet[:environmentpath] = "$confdir/environments"
+ Puppet[:default_manifest] = "/default/manifests/site.pp"
+ end
+
+ it "has no conflicting_manifest_settings? when disable_per_environment_manifest is false" do
+ expect(Puppet::Node::Environment.create(:directory, [], '/some/non/default/manifest.pp').conflicting_manifest_settings?).to be_false
+ end
+
+ context "when disable_per_environment_manifest is true" do
+ let(:config) { mock('config') }
+ let(:global_modulepath) { ["/global/modulepath"] }
+ let(:envconf) { Puppet::Settings::EnvironmentConf.new("/some/direnv", config, global_modulepath) }
+
+ before(:each) do
+ Puppet[:disable_per_environment_manifest] = true
+ end
+
+ def assert_manifest_conflict(expectation, envconf_manifest_value)
+ config.expects(:setting).with(:manifest).returns(
+ mock('setting', :value => envconf_manifest_value)
+ )
+ environment = Puppet::Node::Environment.create(:directory, [], '/default/manifests/site.pp')
+ loader = Puppet::Environments::Static.new(environment)
+ loader.stubs(:get_conf).returns(envconf)
+
+ Puppet.override(:environments => loader) do
+ expect(environment.conflicting_manifest_settings?).to eq(expectation)
+ end
+ end
+
+ it "has conflicting_manifest_settings when environment.conf manifest was set" do
+ assert_manifest_conflict(true, '/some/envconf/manifest/site.pp')
+ end
+
+ it "does not have conflicting_manifest_settings when environment.conf manifest is empty" do
+ assert_manifest_conflict(false, '')
+ end
+
+ it "does not have conflicting_manifest_settings when environment.conf manifest is nil" do
+ assert_manifest_conflict(false, nil)
+ end
+
+ it "does not have conflicting_manifest_settings when environment.conf manifest is an exact, uninterpolated match of default_manifest" do
+ assert_manifest_conflict(false, '/default/manifests/site.pp')
+ end
+ end
+ end
+
describe "when modeling a specific environment" do
it "should have a method for returning the environment name" do
Puppet::Node::Environment.new("testing").name.should == :testing