From 746c1f83984ce875d810e00788e383109fa7ab2f Mon Sep 17 00:00:00 2001 From: Helen Campbell Date: Wed, 23 Nov 2016 16:01:01 +0000 Subject: Deprecation - Use puppet stacktrace if available A previous PR (#685) was raised on this issue, however once it was merged it was discovered that Puppet 3 with future parser enabled was calling the Puppet 4 version of the deprecation function. The Puppet stacktrace is not available until Puppet 4.6, so this was breaking existing setups. The solution was to check is the stacktrace was defined, and if it was to use it as part of the message output. --- lib/puppet/functions/deprecation.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/puppet/functions/deprecation.rb b/lib/puppet/functions/deprecation.rb index a860aa2..39d9bc7 100644 --- a/lib/puppet/functions/deprecation.rb +++ b/lib/puppet/functions/deprecation.rb @@ -8,6 +8,12 @@ Puppet::Functions.create_function(:deprecation) do end def deprecation(key, message) + if defined? Puppet::Pops::PuppetStack.stacktrace() + stacktrace = Puppet::Pops::PuppetStack.stacktrace() + file = stacktrace[0] + line = stacktrace[1] + message = "#{message} at #{file}:#{line}" + end # depending on configuration setting of strict case Puppet.settings[:strict] when :off -- cgit v1.2.3 From e501cb1b646e9741fb6f2510a1a3a434041a4d33 Mon Sep 17 00:00:00 2001 From: Helen Campbell Date: Thu, 24 Nov 2016 16:32:15 +0000 Subject: Update deprecation tests to include future parser --- spec/acceptance/deprecation_spec.rb | 17 +++++++++++++++++ spec/functions/deprecation_spec.rb | 5 ++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/spec/acceptance/deprecation_spec.rb b/spec/acceptance/deprecation_spec.rb index ea13700..7a0b34c 100644 --- a/spec/acceptance/deprecation_spec.rb +++ b/spec/acceptance/deprecation_spec.rb @@ -82,4 +82,21 @@ describe 'deprecation function' do it { is_expected.to be_file } end end + + context 'puppet 3 test', if: get_puppet_version =~ /^3/ do + before :all do + @result = on(default, puppet('apply', '--parser=future', '-e', add_file_manifest), acceptable_exit_codes: (0...256)) + end + after :all do + apply_manifest(remove_file_manifest) + end + + it "should return a deprecation error" do + expect(@result.stderr).to match(/Warning: message/) + end + it "should pass without error" do + expect(@result.exit_code).to eq(0) + end + end + end diff --git a/spec/functions/deprecation_spec.rb b/spec/functions/deprecation_spec.rb index 9859833..cee4f1c 100644 --- a/spec/functions/deprecation_spec.rb +++ b/spec/functions/deprecation_spec.rb @@ -41,11 +41,14 @@ if Puppet.version.to_f >= 4.0 } end else + # Puppet version < 4 will use these tests. describe 'deprecation' do after(:all) do ENV.delete('STDLIB_LOG_DEPRECATIONS') end - ENV['STDLIB_LOG_DEPRECATIONS'] = "true" + before(:all) do + ENV['STDLIB_LOG_DEPRECATIONS'] = "true" + end it { is_expected.not_to eq(nil) } it { is_expected.to run.with_params().and_raise_error(Puppet::ParseError, /wrong number of arguments/i) } -- cgit v1.2.3