From 5c51463c1f9e89bfd012c737c19581ac0f771926 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Thu, 30 Jun 2016 17:52:45 +0100 Subject: [PATCH 1/2] Fix load_module_metadata and loadjson tests to pass with fully deployed module When replacing the lib/ and manifests/ symlinks in the fixtures with a proper top-level symlink, puppet 4 starts loading the metadata.json before loading functions, which confuses these tests. Added more specific expectations, and provide data for that call. --- spec/functions/load_module_metadata_spec.rb | 43 +++++++------ spec/functions/loadjson_spec.rb | 67 ++++++++++++--------- 2 files changed, 65 insertions(+), 45 deletions(-) diff --git a/spec/functions/load_module_metadata_spec.rb b/spec/functions/load_module_metadata_spec.rb index fe665fb..1a61e2c 100755 --- a/spec/functions/load_module_metadata_spec.rb +++ b/spec/functions/load_module_metadata_spec.rb @@ -5,25 +5,34 @@ describe 'load_module_metadata' do it { is_expected.to run.with_params().and_raise_error(Puppet::ParseError, /wrong number of arguments/i) } it { is_expected.to run.with_params("one", "two", "three").and_raise_error(Puppet::ParseError, /wrong number of arguments/i) } - it "should json parse the file" do - allow(scope).to receive(:function_get_module_path).with(['science']).and_return('/path/to/module/') - allow(File).to receive(:exists?).with(/metadata.json/).and_return(true) - allow(File).to receive(:read).with(/metadata.json/).and_return('{"name": "spencer-science"}') + describe "when calling with valid arguments" do + before :each do + if RSpec.configuration.puppet_future + allow(File).to receive(:read).with(/\/stdlib\/metadata.json/, {:encoding=>"utf-8"}).and_return('{"name": "puppetlabs-stdlib"}') + else + allow(File).to receive(:read).with(/\/stdlib\/metadata.json/).and_return('{"name": "puppetlabs-stdlib"}') + end + end + it "should json parse the file" do + allow(scope).to receive(:function_get_module_path).with(['science']).and_return('/path/to/module/') + allow(File).to receive(:exists?).with('/path/to/module/metadata.json').and_return(true) + allow(File).to receive(:read).with('/path/to/module/metadata.json').and_return('{"name": "spencer-science"}') - result = subject.call(['science']) - expect(result['name']).to eq('spencer-science') - end + result = subject.call(['science']) + expect(result['name']).to eq('spencer-science') + end - it "should fail by default if there is no metadata.json" do - allow(scope).to receive(:function_get_module_path).with(['science']).and_return('/path/to/module/') - allow(File).to receive(:exists?).with(/metadata.json/).and_return(false) - expect {subject.call(['science'])}.to raise_error(Puppet::ParseError) - end + it "should fail by default if there is no metadata.json" do + allow(scope).to receive(:function_get_module_path).with(['science']).and_return('/path/to/module/') + allow(File).to receive(:exists?).with('/path/to/module/metadata.json').and_return(false) + expect {subject.call(['science'])}.to raise_error(Puppet::ParseError) + end - it "should return nil if user allows empty metadata.json" do - allow(scope).to receive(:function_get_module_path).with(['science']).and_return('/path/to/module/') - allow(File).to receive(:exists?).with(/metadata.json/).and_return(false) - result = subject.call(['science', true]) - expect(result).to eq({}) + it "should return nil if user allows empty metadata.json" do + allow(scope).to receive(:function_get_module_path).with(['science']).and_return('/path/to/module/') + allow(File).to receive(:exists?).with('/path/to/module/metadata.json').and_return(false) + result = subject.call(['science', true]) + expect(result).to eq({}) + end end end diff --git a/spec/functions/loadjson_spec.rb b/spec/functions/loadjson_spec.rb index 12a9b82..a00dff9 100644 --- a/spec/functions/loadjson_spec.rb +++ b/spec/functions/loadjson_spec.rb @@ -4,35 +4,46 @@ describe 'loadjson' do it { is_expected.not_to eq(nil) } it { is_expected.to run.with_params().and_raise_error(ArgumentError, /wrong number of arguments/i) } - context 'when a non-existing file is specified' do - let(:filename) { '/tmp/doesnotexist' } - before { - File.expects(:exists?).with(filename).returns(false).once - PSON.expects(:load).never - } - it { is_expected.to run.with_params(filename, {'default' => 'value'}).and_return({'default' => 'value'}) } - end + describe "when calling with valid arguments" do + before :each do + if RSpec.configuration.puppet_future + allow(File).to receive(:read).with(/\/stdlib\/metadata.json/, {:encoding=>"utf-8"}).and_return('{"name": "puppetlabs-stdlib"}') + else + allow(File).to receive(:read).with(/\/stdlib\/metadata.json/).and_return('{"name": "puppetlabs-stdlib"}') + end + end - context 'when an existing file is specified' do - let(:filename) { '/tmp/doesexist' } - let(:data) { { 'key' => 'value' } } - let(:json) { '{"key":"value"}' } - before { - File.expects(:exists?).with(filename).returns(true).once - File.expects(:read).with(filename).returns(json).once - PSON.expects(:load).with(json).returns(data).once - } - it { is_expected.to run.with_params(filename).and_return(data) } - end + context 'when a non-existing file is specified' do + let(:filename) { '/tmp/doesnotexist' } + before { + allow(File).to receive(:exists?).with(filename).and_return(false).once + allow(PSON).to receive(:load).never + } + it { is_expected.to run.with_params(filename, {'default' => 'value'}).and_return({'default' => 'value'}) } + end - context 'when the file could not be parsed' do - let(:filename) { '/tmp/doesexist' } - let(:json) { '{"key":"value"}' } - before { - File.expects(:exists?).with(filename).returns(true).once - File.expects(:read).with(filename).returns(json).once - PSON.stubs(:load).with(json).once.raises StandardError, 'Something terrible have happened!' - } - it { is_expected.to run.with_params(filename, {'default' => 'value'}).and_return({'default' => 'value'}) } + context 'when an existing file is specified' do + let(:filename) { '/tmp/doesexist' } + let(:data) { { 'key' => 'value' } } + let(:json) { '{"key":"value"}' } + before { + allow(File).to receive(:exists?).with(filename).and_return(true).once + allow(File).to receive(:read).with(filename).and_return(json).once + allow(File).to receive(:read).with(filename).and_return(json).once + allow(PSON).to receive(:load).with(json).and_return(data).once + } + it { is_expected.to run.with_params(filename).and_return(data) } + end + + context 'when the file could not be parsed' do + let(:filename) { '/tmp/doesexist' } + let(:json) { '{"key":"value"}' } + before { + allow(File).to receive(:exists?).with(filename).and_return(true).once + allow(File).to receive(:read).with(filename).and_return(json).once + allow(PSON).to receive(:load).with(json).once.and_raise StandardError, 'Something terrible have happened!' + } + it { is_expected.to run.with_params(filename, {'default' => 'value'}).and_return({'default' => 'value'}) } + end end end From daa80f168f8c334b8ff220338691f3c765f162d9 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Thu, 30 Jun 2016 17:52:45 +0100 Subject: [PATCH 2/2] (MODULES-3435) Fix gitignore and fixtures directory This change more accurately reflects what is being ignored and what's required as fixtures. --- .gitignore | 4 +++- spec/fixtures/modules/stdlib/lib | 1 - spec/fixtures/modules/stdlib/manifests | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) delete mode 120000 spec/fixtures/modules/stdlib/lib delete mode 120000 spec/fixtures/modules/stdlib/manifests diff --git a/.gitignore b/.gitignore index dd126f2..cf4e9c6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,10 +2,12 @@ pkg/ Gemfile.lock vendor/ -spec/fixtures/ +spec/fixtures/manifests/site.pp +spec/fixtures/modules/* .vagrant/ .bundle/ coverage/ log/ .idea/ *.iml +tmp/ diff --git a/spec/fixtures/modules/stdlib/lib b/spec/fixtures/modules/stdlib/lib deleted file mode 120000 index b6ce6cc..0000000 --- a/spec/fixtures/modules/stdlib/lib +++ /dev/null @@ -1 +0,0 @@ -../../../../lib/ \ No newline at end of file diff --git a/spec/fixtures/modules/stdlib/manifests b/spec/fixtures/modules/stdlib/manifests deleted file mode 120000 index cdcdae0..0000000 --- a/spec/fixtures/modules/stdlib/manifests +++ /dev/null @@ -1 +0,0 @@ -../../../../manifests/ \ No newline at end of file