My *type *file calls Puppet::Type.newtype() as you suggest, but the code 
snippet you were referring to was for my *provider*, so I think 
Puppet::Type.type(:myapp_config).provide

is correct here. The type/provider itself actually works. I have verified 
that by actually using the module. I am in the process of writing tests for 
modules where we did not do so before.

There are two providers for my type. One of them, the one showing this 
error when running tests, manages an ini-style configuration file, so I 
defined Puppet::Type.type(:ini_setting).provider(:ruby) as a parent 
provider. That is part of the puppetlabs/inifile module. My test fails 
because it doesnt seem to be able to find this? From what I can see, 
Puppet::Type.type(:ini_setting).provider(:ruby) is nil when the test runs. 
I included the inifile module in my .fixtures.yml  but apparently that 
doesnt fix it.



As for the facts, the test code I for testing this type/provider started 
out as a copy and paste so I wont be able to deal with the facts until I 
get past this issue, but to answer your question, one big issue I ran into 
with PDK's default handling of facts is that it uses rspec-puppet-facts 
which does not seem to support Solaris 10 anymore, or at least I hadnt 
gotten it to work. So I have been having to keep Solaris 10 out of my 
metadata.json file, even though it probably should be there as Solaris 10 
is supported by Puppet in my version of PE (2017.3.5) 

Bill


On Wednesday, March 21, 2018 at 9:57:34 AM UTC-4, Bill Sirinek wrote:
>
> 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/72b541e1-ac28-4e1f-a015-5bc349c78731%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to