diff options
author | Seth Chisamore <schisamo@opscode.com> | 2012-10-30 10:39:35 -0400 |
---|---|---|
committer | Seth Chisamore <schisamo@opscode.com> | 2012-10-30 10:39:35 -0400 |
commit | 24dc69a9a97e82a6e4207de68d6dcc664178249b (patch) | |
tree | 19bb289c9f88b4bbab066bc56b95d6d222fd5c35 /spec/unit/cookbook_manifest_spec.rb | |
parent | 9348c1c9c80ee757354d624b7dc1b78ebc7605c4 (diff) | |
download | chef-24dc69a9a97e82a6e4207de68d6dcc664178249b.tar.gz |
[OC-3564] move core Chef to the repo root \o/ \m/
The opscode/chef repository now only contains the core Chef library code
used by chef-client, knife and chef-solo!
Diffstat (limited to 'spec/unit/cookbook_manifest_spec.rb')
-rw-r--r-- | spec/unit/cookbook_manifest_spec.rb | 554 |
1 files changed, 554 insertions, 0 deletions
diff --git a/spec/unit/cookbook_manifest_spec.rb b/spec/unit/cookbook_manifest_spec.rb new file mode 100644 index 0000000000..7da87e93a5 --- /dev/null +++ b/spec/unit/cookbook_manifest_spec.rb @@ -0,0 +1,554 @@ +# +# Author:: Tim Hinderliter (<tim@opscode.com>) +# Author:: Christopher Walters (<cw@opscode.com>) +# Copyright:: Copyright (c) 2010 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'spec_helper' + +describe "Chef::CookbookVersion manifest" do + before(:each) do + @cookbook = Chef::CookbookVersion.new "test-cookbook" + @cookbook.manifest = { + "files" => + [ + # afile.rb + { + :name => "afile.rb", + :path => "files/host-examplehost.example.org/afile.rb", + :checksum => "csum-host", + :specificity => "host-examplehost.example.org" + }, + { + :name => "afile.rb", + :path => "files/ubuntu-9.10/afile.rb", + :checksum => "csum-platver-full", + :specificity => "ubuntu-9.10" + }, + { + :name => "afile.rb", + :path => "files/newubuntu-9/afile.rb", + :checksum => "csum-platver-partial", + :specificity => "newubuntu-9" + }, + { + :name => "afile.rb", + :path => "files/ubuntu/afile.rb", + :checksum => "csum-plat", + :specificity => "ubuntu" + }, + { + :name => "afile.rb", + :path => "files/default/afile.rb", + :checksum => "csum-default", + :specificity => "default" + }, + + # for different/odd platform_versions + { + :name => "bfile.rb", + :path => "files/fakeos-2.0.rc.1/bfile.rb", + :checksum => "csum2-platver-full", + :specificity => "fakeos-2.0.rc.1" + }, + { + :name => "bfile.rb", + :path => "files/newfakeos-2.0.rc/bfile.rb", + :checksum => "csum2-platver-partial", + :specificity => "newfakeos-2.0.rc" + }, + { + :name => "bfile.rb", + :path => "files/fakeos-maple tree/bfile.rb", + :checksum => "csum3-platver-full", + :specificity => "maple tree" + }, + { + :name => "bfile.rb", + :path => "files/fakeos-1/bfile.rb", + :checksum => "csum4-platver-full", + :specificity => "fakeos-1" + }, + + # directory adirectory + { + :name => "anotherfile1.rb", + :path => "files/host-examplehost.example.org/adirectory/anotherfile1.rb.host", + :checksum => "csum-host-1", + :specificity => "host-examplehost.example.org" + }, + { + :name => "anotherfile2.rb", + :path => "files/host-examplehost.example.org/adirectory/anotherfile2.rb.host", + :checksum => "csum-host-2", + :specificity => "host-examplehost.example.org" + }, + + { + :name => "anotherfile1.rb", + :path => "files/ubuntu-9.10/adirectory/anotherfile1.rb.platform-full-version", + :checksum => "csum-platver-full-1", + :specificity => "ubuntu-9.10" + }, + { + :name => "anotherfile2.rb", + :path => "files/ubuntu-9.10/adirectory/anotherfile2.rb.platform-full-version", + :checksum => "csum-platver-full-2", + :specificity => "ubuntu-9.10" + }, + + { + :name => "anotherfile1.rb", + :path => "files/newubuntu-9/adirectory/anotherfile1.rb.platform-partial-version", + :checksum => "csum-platver-partial-1", + :specificity => "newubuntu-9" + }, + { + :name => "anotherfile2.rb", + :path => "files/newubuntu-9/adirectory/anotherfile2.rb.platform-partial-version", + :checksum => "csum-platver-partial-2", + :specificity => "nweubuntu-9" + }, + + { + :name => "anotherfile1.rb", + :path => "files/ubuntu/adirectory/anotherfile1.rb.platform", + :checksum => "csum-plat-1", + :specificity => "ubuntu" + }, + { + :name => "anotherfile2.rb", + :path => "files/ubuntu/adirectory/anotherfile2.rb.platform", + :checksum => "csum-plat-2", + :specificity => "ubuntu" + }, + + { + :name => "anotherfile1.rb", + :path => "files/default/adirectory/anotherfile1.rb.default", + :checksum => "csum-default-1", + :specificity => "default" + }, + { + :name => "anotherfile2.rb", + :path => "files/default/adirectory/anotherfile2.rb.default", + :checksum => "csum-default-2", + :specificity => "default" + }, + # for different/odd platform_versions + { + :name => "anotherfile1.rb", + :path => "files/fakeos-2.0.rc.1/adirectory/anotherfile1.rb.platform-full-version", + :checksum => "csum2-platver-full-1", + :specificity => "fakeos-2.0.rc.1" + }, + { + :name => "anotherfile2.rb", + :path => "files/fakeos-2.0.rc.1/adirectory/anotherfile2.rb.platform-full-version", + :checksum => "csum2-platver-full-2", + :specificity => "fakeos-2.0.rc.1" + }, + { + :name => "anotherfile1.rb", + :path => "files/newfakeos-2.0.rc.1/adirectory/anotherfile1.rb.platform-partial-version", + :checksum => "csum2-platver-partial-1", + :specificity => "newfakeos-2.0.rc" + }, + { + :name => "anotherfile2.rb", + :path => "files/newfakeos-2.0.rc.1/adirectory/anotherfile2.rb.platform-partial-version", + :checksum => "csum2-platver-partial-2", + :specificity => "newfakeos-2.0.rc" + }, + { + :name => "anotherfile1.rb", + :path => "files/fakeos-maple tree/adirectory/anotherfile1.rb.platform-full-version", + :checksum => "csum3-platver-full-1", + :specificity => "fakeos-maple tree" + }, + { + :name => "anotherfile2.rb", + :path => "files/fakeos-maple tree/adirectory/anotherfile2.rb.platform-full-version", + :checksum => "csum3-platver-full-2", + :specificity => "fakeos-maple tree" + }, + { + :name => "anotherfile1.rb", + :path => "files/fakeos-1/adirectory/anotherfile1.rb.platform-full-version", + :checksum => "csum4-platver-full-1", + :specificity => "fakeos-1" + }, + { + :name => "anotherfile2.rb", + :path => "files/fakeos-1/adirectory/anotherfile2.rb.platform-full-version", + :checksum => "csum4-platver-full-2", + :specificity => "fakeos-1" + }, + ] + } + + end + + + it "should return a manifest record based on priority preference: host" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "examplehost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum-host" + end + + it "should return a manifest record based on priority preference: platform & full version" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum-platver-full" + end + + it "should return a manifest record based on priority preference: platform & partial version" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "newubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum-platver-partial" + end + + it "should return a manifest record based on priority preference: platform only" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "1.0" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum-plat" + end + + it "should return a manifest record based on priority preference: default" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "notubuntu" + node.automatic_attrs[:platform_version] = "1.0" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "afile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum-default" + end + + it "should return a manifest record based on priority preference: platform & full version - platform_version variant 1" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "2.0.rc.1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "bfile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum2-platver-full" + end + + it "should return a manifest record based on priority preference: platform & partial version - platform_version variant 1" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "newfakeos" + node.automatic_attrs[:platform_version] = "2.0.rc.1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "bfile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum2-platver-partial" + end + + it "should return a manifest record based on priority preference: platform & full version - platform_version variant 2" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "maple tree" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "bfile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum3-platver-full" + end + + it "should return a manifest record based on priority preference: platform & full version - platform_version variant 3" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_record = @cookbook.preferred_manifest_record(node, :files, "bfile.rb") + manifest_record.should_not be_nil + manifest_record[:checksum].should == "csum4-platver-full" + end + + describe "when fetching the contents of a directory by file specificity" do + + it "should return a directory of manifest records based on priority preference: host" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "examplehost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum-host-1", "csum-host-2"] + end + + it "should return a directory of manifest records based on priority preference: platform & full version" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum-platver-full-1", "csum-platver-full-2"] + end + + it "should return a directory of manifest records based on priority preference: platform & partial version" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "newubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum-platver-partial-1", "csum-platver-partial-2"] + end + + it "should return a directory of manifest records based on priority preference: platform only" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "1.0" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum-plat-1", "csum-plat-2"] + end + + it "should return a directory of manifest records based on priority preference: default" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "notubuntu" + node.automatic_attrs[:platform_version] = "1.0" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum-default-1", "csum-default-2"] + end + + it "should return a manifest record based on priority preference: platform & full version - platform_version variant 1" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "2.0.rc.1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum2-platver-full-1", "csum2-platver-full-2"] + end + + it "should return a manifest record based on priority preference: platform & partial version - platform_version variant 1" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "newfakeos" + node.automatic_attrs[:platform_version] = "2.0.rc.1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum2-platver-partial-1", "csum2-platver-partial-2"] + end + + it "should return a manifest record based on priority preference: platform & full version - platform_version variant 2" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "maple tree" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum3-platver-full-1", "csum3-platver-full-2"] + end + + it "should return a manifest record based on priority preference: platform & full version - platform_version variant 3" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + manifest_records = @cookbook.preferred_manifest_records_for_directory(node, :files, "adirectory") + manifest_records.should_not be_nil + manifest_records.size.should == 2 + + checksums = manifest_records.map{ |manifest_record| manifest_record[:checksum] } + checksums.sort.should == ["csum4-platver-full-1", "csum4-platver-full-2"] + end + end + + ## Globbing the relative paths out of the manifest records ## + + describe "when globbing for relative file paths based on filespecificity" do + it "should return a list of relative paths based on priority preference: host" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "examplehost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.host', 'anotherfile2.rb.host'] + end + + it "should return a list of relative paths based on priority preference: platform & full version" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.platform-full-version', 'anotherfile2.rb.platform-full-version'] + end + + it "should return a list of relative paths based on priority preference: platform & partial version" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "newubuntu" + node.automatic_attrs[:platform_version] = "9.10" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.platform-partial-version', 'anotherfile2.rb.platform-partial-version'] + end + + it "should return a list of relative paths based on priority preference: platform only" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "ubuntu" + node.automatic_attrs[:platform_version] = "1.0" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.platform', 'anotherfile2.rb.platform'] + end + + it "should return a list of relative paths based on priority preference: default" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "notubuntu" + node.automatic_attrs[:platform_version] = "1.0" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.default', 'anotherfile2.rb.default'] + end + + it "should return a list of relative paths based on priority preference: platform & full version - platform_version variant 1" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "2.0.rc.1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.platform-full-version', 'anotherfile2.rb.platform-full-version'] + end + + it "should return a list of relative paths based on priority preference: platform & partial version - platform_version variant 1" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "newfakeos" + node.automatic_attrs[:platform_version] = "2.0.rc.1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.platform-partial-version', 'anotherfile2.rb.platform-partial-version'] + end + + it "should return a list of relative paths based on priority preference: platform & full version - platform_version variant 2" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "maple tree" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.platform-full-version', 'anotherfile2.rb.platform-full-version'] + end + + it "should return a list of relative paths based on priority preference: platform & full version - platform_version variant 3" do + node = Chef::Node.new + node.automatic_attrs[:platform] = "fakeos" + node.automatic_attrs[:platform_version] = "1" + node.automatic_attrs[:fqdn] = "differenthost.example.org" + + filenames = @cookbook.relative_filenames_in_preferred_directory(node, :files, "adirectory") + filenames.should_not be_nil + filenames.size.should == 2 + + filenames.sort.should == ['anotherfile1.rb.platform-full-version', 'anotherfile2.rb.platform-full-version'] + end + end +end |