Hi Craig, 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? 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. 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] <javascript:>> 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] <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/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] <javascript:> > > -- 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. For more options, visit https://groups.google.com/d/optout.
