Hi Jos

Been meaning to contact you.  I plan to re-use some of your code and idea's
> from hiera-http.
> You might have recognised the snippet in the first message.
>
> Do you mind?
>

Not at all - it's Apache 2.0 licensed so anyone can re-use the code if they
maintain the license / copyright notices as per the license terms..... glad
you found it useful!


>
> I'll have a look at a solution today or tomorrow, but it sounds like I
> need to mock the class.  I should have an approach by Wednesday.
>

I don't think it's as easy as just mocking the class - because it's not the
function itself thats using it, it's in the Puppet internals buried deep in
puppet / rspec-puppet so I can't find a way around this..... I really want
to get my backends set up with some testing so I'd appreciate any pointers
you discover

Cheers
Craig




>
> With regards,
>
> Jos Houtman
>
>
> On Monday, October 2, 2017 at 1:18:54 PM UTC+2, Craig Dunn wrote:
>>
>>
>> I've been having the exact same conversation with Henrik as I also need
>> to write tests for hiera-mysql, hiera-http and the Jerakia Hiera 5
>> backend.... He suggested copying the approach used by yaml_data and
>> json_data Puppet core but theres a few problems with this.  Firstly it uses
>> puppet_spec/compiler which isn't loadable (it's contained within the spec/
>> directory of Puppet) and it only gives you an interface to the Puppet side
>> of it, eg: validating the data that the lookup produces - it doesn't give
>> you the ability to mock things in the function and test functionality.
>>
>> For example, for hiera-http I want to mock out calls to the lookup_http
>> lib and write tests validating the URLs getting called with different
>> hiera.yaml options.  It would be nice to have some kind of helper that gave
>> you a fake Puppet::LookupContext context so you could load and run the
>> function under rspec.
>>
>> I'm completely stuck with how to proceed with these now - all three of my
>> Hiera 5 backends have no unit testing at all :-(
>>
>> Please do share if you come up with a nice way of doing this.
>>
>> Craig
>>
>>
>> On Fri, Sep 29, 2017 at 4:56 PM, <[email protected]> wrote:
>>
>>> Hi all,
>>>
>>> I am writing a custom hiera backend for consul and I want to test the
>>> functionality.
>>> But I am unable to create the proper puppet data structures that are
>>> required by the function definition.
>>>
>>>
>>> Part of the function I want to test:
>>>
>>> Puppet::Functions.create_function(:hiera_consul) do
>>> dispatch :lookup_key do
>>> param 'Variant[String, Numeric]', :key
>>> param 'Hash', :options
>>> param 'Puppet::LookupContext', :context
>>> end
>>> def lookup_key(key, options, context)
>>> if confine_keys = options['confine_to_keys']
>>> raise ArgumentError, 'confine_to_keys must be an array' unless
>>> confine_keys.is_a?(Array)
>>> confine_keys.map! { |r| Regexp.new(r) }
>>> regex_key_match = Regexp.union(confine_keys)
>>> unless key[regex_key_match] == key
>>> context.explain { "Skipping consul backend because key does not match
>>> confine_to_keys" }
>>> context.not_found
>>> end
>>> end
>>> ....
>>> end
>>> end
>>>
>>>
>>> The test:
>>> describe 'hiera_consul' do
>>> it "is confined to certain keys" do
>>> context = Puppet::Pops::Lookup::Context.new({},{})
>>>
>>> is_expected.to run.with_params('test_key', {'k' => 'v'}, context)
>>> end
>>> end
>>>
>>> The results:
>>> 1) hiera_consul is confined to certain keys
>>> Failure/Error: is_expected.to run.with_params('test_key', {'k' => 'v'},
>>> context)
>>>
>>> expected hiera_consul("test_key", {"k"=>"v"},
>>> #<Puppet::Pops::Lookup::Context:0x007fdb7acc7060 @lookup_invocation={},
>>> @function_context={}>) to have run successfully instead of
>>> NoMethodError(undefined method `gsub!' for nil:NilClass)
>>>
>>>
>>> What would the right way to construct the arguments for this signature?
>>>
>>> Specifically
>>> - how do i create Puppet::LookupContext. Is this really the way?
>>> - how do i create a puppet hash construct with data in it?
>>>
>>> With regards,
>>>
>>> Jos Houtman
>>>
>>>
>>>
>>> --
>>> 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/ms
>>> gid/puppet-users/2e9a54b7-c7bd-4ce4-8a69-723422845e21%40googlegroups.com
>>> <https://groups.google.com/d/msgid/puppet-users/2e9a54b7-c7bd-4ce4-8a69-723422845e21%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> Enviatics     |      Automation and Configuration Management
>> Puppet Labs Service Delivery Partner & Certified Consultant
>> http://www.enviatics.com | @Enviatics | [email protected]
>>
>> --
> 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/f1546edb-60cd-4f1f-aa28-2ee1a197bebb%40googlegroups.com
> <https://groups.google.com/d/msgid/puppet-users/f1546edb-60cd-4f1f-aa28-2ee1a197bebb%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Enviatics     |      Automation and Configuration Management
Puppet Labs Service Delivery Partner & Certified Consultant
http://www.enviatics.com | @Enviatics | [email protected]

-- 
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/CACxdKhFu3060RKVLoX5C95YCQYYvEwCaUTT5_W8NPJFLi%2BmSFA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to