From 31fe0b1ea6668cb3919fc4c6cdfadb09fd911001 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Tue, 21 May 2019 14:27:49 +0100 Subject: [PATCH 1/2] (maint) reset provider cache between tests Without this the `provider` mock would leak between tests. --- spec/puppet/resource_api_spec.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/puppet/resource_api_spec.rb b/spec/puppet/resource_api_spec.rb index d8db9afc..c7f56f43 100644 --- a/spec/puppet/resource_api_spec.rb +++ b/spec/puppet/resource_api_spec.rb @@ -1767,6 +1767,11 @@ def set(_context, changes) end allow(provider_class).to receive(:new).and_return(provider) end + after(:each) do + # reset cached provider between tests + type.instance_variable_set(:@my_provider, nil) + end + it { expect { described_class.register_type(definition) }.not_to raise_error } it 'is seen as a supported feature' do From 45e03654962ca808a544131b8045af2b8fad3cf4 Mon Sep 17 00:00:00 2001 From: David Schmitt Date: Thu, 13 Jun 2019 15:33:47 +0100 Subject: [PATCH 2/2] (maint) have the #inject_device test clean up after itself Before the fix: ``` david@davids:~/git/puppet-resource_api$ SPEC_OPTS="--exclude-pattern spec/\{fixtures/\*\*/\*.rb,fixtures/modules/\*/\*\*/\*.rb\}" bundle exec rspec ./spec/puppet/resource_api/transport_spec.rb[1:4:2:1] ./spec/puppet/resource_api_spec.rb[1:16:2:1] --seed 40589 -fd Run options: include {:ids=>{"./spec/puppet/resource_api/transport_spec.rb"=>["1:4:2:1"], "./spec/puppet/resource_api_spec.rb"=>["1:16:2:1"]}} Randomized with seed 40589 Puppet::ResourceApi::Transport #inject_device(name, transport) when puppet does not have set_device wraps the transport and sets it as current in NetworkDevice Puppet::ResourceApi #load_provider when loading a provider that doesn't create the correct class should raise Puppet::DevError with message matching /provider class Puppet::Provider::NoClass::NoClass not found/ (FAILED - 1) Failures: 1) Puppet::ResourceApi#load_provider when loading a provider that doesn't create the correct class should raise Puppet::DevError with message matching /provider class Puppet::Provider::NoClass::NoClass not found/ Failure/Error: it { expect { described_class.load_provider('no_class') }.to raise_error Puppet::DevError, %r{provider class Puppet::Provider::NoClass::NoClass not found} } expected Puppet::DevError with message matching /provider class Puppet::Provider::NoClass::NoClass not found/, got # with backtrace: # ./lib/puppet/resource_api.rb:437:in `rescue in load_provider' # ./lib/puppet/resource_api.rb:416:in `load_provider' # ./spec/puppet/resource_api_spec.rb:1202:in `block (5 levels) in ' # ./spec/puppet/resource_api_spec.rb:1202:in `block (4 levels) in ' # ./spec/puppet/resource_api_spec.rb:1202:in `block (4 levels) in ' Finished in 0.05427 seconds (files took 0.94482 seconds to load) 2 examples, 1 failure Failed examples: rspec ./spec/puppet/resource_api_spec.rb:1202 # Puppet::ResourceApi#load_provider when loading a provider that doesn't create the correct class should raise Puppet::DevError with message matching /provider class Puppet::Provider::NoClass::NoClass not found/ Randomized with seed 40589 david@davids:~/git/puppet-resource_api$ ``` After the fix: ``` david@davids:~/git/puppet-resource_api$ SPEC_OPTS="--exclude-pattern spec/\{fixtures/\*\*/\*.rb,fixtures/modules/\*/\*\*/\*.rb\}" bundle exec rspec ./spec/puppet/resource_api/transport_spec.rb[1:4:2:1] ./spec/puppet/resource_api_spec.rb[1:16:2:1] --seed 40589 -fd Run options: include {:ids=>{"./spec/puppet/resource_api/transport_spec.rb"=>["1:4:2:1"], "./spec/puppet/resource_api_spec.rb"=>["1:16:2:1"]}} Randomized with seed 40589 Puppet::ResourceApi::Transport #inject_device(name, transport) when puppet does not have set_device wraps the transport and sets it as current in NetworkDevice Puppet::ResourceApi #load_provider when loading a provider that doesn't create the correct class should raise Puppet::DevError with message matching /provider class Puppet::Provider::NoClass::NoClass not found/ Finished in 0.03734 seconds (files took 0.95637 seconds to load) 2 examples, 0 failures Randomized with seed 40589 david@davids:~/git/puppet-resource_api$ ``` --- spec/puppet/resource_api/transport_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spec/puppet/resource_api/transport_spec.rb b/spec/puppet/resource_api/transport_spec.rb index 5fedb181..9da781ba 100644 --- a/spec/puppet/resource_api/transport_spec.rb +++ b/spec/puppet/resource_api/transport_spec.rb @@ -260,6 +260,10 @@ class Wibble; end end end + after(:each) do + Puppet::Util::NetworkDevice.instance_variable_set(:@current, nil) + end + context 'when puppet has set_device' do it 'wraps the transport and calls set_device within NetworkDevice' do expect(Puppet::ResourceApi::Transport::Wrapper).to receive(:new).with(device_name, transport).and_return(wrapper)