diff options
Diffstat (limited to 'spec/unit/node/environment_spec.rb')
-rwxr-xr-x | spec/unit/node/environment_spec.rb | 90 |
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 |