summaryrefslogtreecommitdiffstats
path: root/spec/unit
diff options
context:
space:
mode:
authorMatt Robinson <matt@puppetlabs.com>2011-07-12 15:47:21 -0700
committerMatt Robinson <matt@puppetlabs.com>2011-07-12 16:06:22 -0700
commit45b3908e03734388b6c699ffbc4223f43b44a1d5 (patch)
treed082e9654a46f77e820fb17723a60ce252e201c2 /spec/unit
parent1feccc3f2db29d112308a55032e7f93ca44b45aa (diff)
downloadpuppet-45b3908e03734388b6c699ffbc4223f43b44a1d5.tar.gz
puppet-45b3908e03734388b6c699ffbc4223f43b44a1d5.tar.xz
puppet-45b3908e03734388b6c699ffbc4223f43b44a1d5.zip
(#4142) Fix module check not to fail when empty metadata.json
Even though the puppet module tool was fixed to generate the required metadata attributes when it packages modules, it still creates an empty metadata.json file that gets checked into everybody's module repos. This causes the module to be unusable straight from a git clone since puppet was requiring all the required metadata attributes just with the presence of that file, and resulting in the error: No source module metadata provided for mcollective at This change makes it so that if you have an empty metadata.json (like the moduletool generates), puppet doesn't consider it to have metadata. If you have ANY metadata attributes in that file, it will still check to make sure all the required attributes are present. The work around up to this point has just been to delete the metadata.json file in git cloned modules. This also fixed the tests around this to actually run, since previously the tests depended on the a json feature, which we didn't have. We do, however, have a pson feature. Reviewed-by: Nick Lewis <nick@puppetlabs.com>
Diffstat (limited to 'spec/unit')
-rwxr-xr-xspec/unit/module_spec.rb47
1 files changed, 38 insertions, 9 deletions
diff --git a/spec/unit/module_spec.rb b/spec/unit/module_spec.rb
index 8d38657f9..822c76296 100755
--- a/spec/unit/module_spec.rb
+++ b/spec/unit/module_spec.rb
@@ -505,12 +505,38 @@ describe Puppet::Module do
mod.metadata_file.should == mod.metadata_file
end
- it "should know if it has a metadata file" do
+ it "should have metadata if it has a metadata file and its data is not empty" do
FileTest.expects(:exist?).with(@module.metadata_file).returns true
+ File.stubs(:read).with(@module.metadata_file).returns "{\"foo\" : \"bar\"}"
@module.should be_has_metadata
end
+ it "should have metadata if it has a metadata file and its data is not empty" do
+ FileTest.expects(:exist?).with(@module.metadata_file).returns true
+ File.stubs(:read).with(@module.metadata_file).returns "{\"foo\" : \"bar\"}"
+
+ @module.should be_has_metadata
+ end
+
+ it "should not have metadata if has a metadata file and its data is empty" do
+ FileTest.expects(:exist?).with(@module.metadata_file).returns true
+ File.stubs(:read).with(@module.metadata_file).returns "/*
++-----------------------------------------------------------------------+
+| |
+| ==> DO NOT EDIT THIS FILE! <== |
+| |
+| You should edit the `Modulefile` and run `puppet-module build` |
+| to generate the `metadata.json` file for your releases. |
+| |
++-----------------------------------------------------------------------+
+*/
+
+{}"
+
+ @module.should_not be_has_metadata
+ end
+
it "should know if it is missing a metadata file" do
FileTest.expects(:exist?).with(@module.metadata_file).returns false
@@ -528,16 +554,16 @@ describe Puppet::Module do
Puppet::Module.new("yay")
end
- describe "when loading the medatada file", :if => Puppet.features.json? do
+ describe "when loading the medatada file", :if => Puppet.features.pson? do
before do
@data = {
- :license => "GPL2",
- :author => "luke",
- :version => "1.0",
- :source => "http://foo/",
+ :license => "GPL2",
+ :author => "luke",
+ :version => "1.0",
+ :source => "http://foo/",
:puppetversion => "0.25"
}
- @text = @data.to_json
+ @text = @data.to_pson
@module = Puppet::Module.new("foo")
@module.stubs(:metadata_file).returns "/my/file"
@@ -552,9 +578,12 @@ describe Puppet::Module do
it "should fail if #{attr} is not present in the metadata file" do
@data.delete(attr.to_sym)
- @text = @data.to_json
+ @text = @data.to_pson
File.stubs(:read).with("/my/file").returns @text
- lambda { @module.load_metadata }.should raise_error(Puppet::Module::MissingMetadata)
+ lambda { @module.load_metadata }.should raise_error(
+ Puppet::Module::MissingMetadata,
+ "No #{attr} module metadata provided for foo"
+ )
end
end