I am trying to write an rspec test for a custom type and provider I wrote
and having issues.
The custom type has a provider that manages an ini file. Because I already
have puppetlabs/inifile, I made this provider a child provider of
ini_setting. (I don't use the ini_setting type directly in my manifests,
because some versions of the application use a command line tool talking to
a DB for configuration, rather than a plaintext ini file, and my custom
type supports both) The type/provider code works in puppet, I'm writing
tests for our modules after the fact. :\
lib/puppet/provider/ini_style_config.rb:
Puppet::Type.type(:myapp_config).provide(
:ini_style_config,
:parent => Puppet::Type.type(:ini_setting).provider(:ruby)
) do
desc "configuration items for version of the app that uses an .ini file"
< ... provider code ... >
spec/lib/puppet/provider/ini_style_config_spec.rb:
require 'spec_helper'
describe Puppet::Type.type(:myapp_config).provider(:ini_style_config) do
on_supported_os.each do |os, facts|
context "on #{os}" do
before :each do
Facter.clear
facts.each do |k, v|
Facter.stubs(:fact).with(k).returns Facter.add(k) { setcode { v }
}
end
end
describe 'instances' do
it 'should have an instance method' do
expect(described_class).to respond_to :instances
end
end
describe 'prefetch' do
it 'should have a prefetch method' do
expect(described_class).to respond_to :prefetch
end
end
end
end
end
When I run the tests I get an error because it can't find the ini_setting
type from puppetlabs/inifile:
mymacbook:myapp bsirinek$ pdk test unit
[✔] Preparing to run the unit tests.
[✖] Running unit tests.
An error occurred while loading ./spec/unit/puppet/provider/
ini_style_config_spec.rb.
Failure/Error: :parent => Puppet::Type.type(:ini_setting).provider(:ruby)
Puppet::Error:
Could not autoload puppet/type/myapp_config: Could not autoload puppet/
provider/myapp_config/ini_style_config: undefined method `provider' for
nil:NilClass
# ./lib/puppet/provider/myapp_config/ini_style_config.rb:3:in `<top (
required)>'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:68:in
`load'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:68:in
`load_file'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:83:in
`block in loadall'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:81:in
`each'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:81:in
`loadall'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:208:in
`loadall'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/metatype/manager.rb:126:in
`newtype'
# ./lib/puppet/type/myapp_config.rb:1:in `<top (required)>'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:68:in
`load'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:68:in
`load_file'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/util/autoload.rb:194:in
`load'
#
/opt/puppetlabs/pdk/share/cache/ruby/2.1.0/gems/puppet-5.3.3/lib/puppet/metatype/manager.rb:171:in
`type'
# ./spec/unit/puppet/provider/ini_style_config_spec.rb:3:in `<top
(required)>'
# ------------------
# --- Caused by: ---
# NoMethodError:
# undefined method `provider' for nil:NilClass
# ./lib/puppet/provider/myapp_config/ini_style_config.rb:3:in `<top
(required)>'
Evaluated 0 tests in 0.00058 seconds: 0 failures, 0 pending.
[✔] Cleaning up after running unit tests.
mymacbook:myapp bsirinek$
I have inifile listed in my .fixtures.yml.
---
fixtures:
symlinks:
myapp: "#{source_dir}"
forge_modules:
stdlib:
repo: "puppetlabs/stdlib"
ref: "4.20.0"
inifile:
repo: "puppetlabs/inifile"
ref: "2.0.0"
Am I missing something?
Thanks
Bill
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/194dfe1f-ff97-4388-92f7-be755de24d7b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.