[chef] Re: Re: ChefSpec for LWRPs without recipes...


Chronological Thread 
  • From: Bryan Stenson < >
  • To:
  • Subject: [chef] Re: Re: ChefSpec for LWRPs without recipes...
  • Date: Thu, 9 May 2013 06:25:40 -0700

This is perfect.  I got the same response off list from Eric Saxby, too.  I really appreciate the response here.

Ultimately, I think this type of design should be baked in to Chefspec...seems to violate the DRY principle that I'd have to setup EVERY cookbook like this just to test "recipe-less" LWRPs.

Cheers.

Bryan


On Wed, May 8, 2013 at 2:08 PM, Malte Swart < " target="_blank"> > wrote:
Hey,

I had to solve the same problem for a cookbook of my own.

My approach is similar to your second alternative. A created another (test)
cookbook which uses and depends on the main cookbook (LWRP, definitions ...).
I put this cookbook under spec/support/cookbooks and adjusted the ChefSpec
cookbook_path to use also spec/support/cookbook to search for cookbooks. [1]
It is undocumented but chefspec supports like the chef client also a list of
directories as cookbook_path.
In my case Chef::ChefRunner.new cookbook_path: [ '..',
'spec/support/cookbooks' ] works great. There might be a more robust way to
set the cookbook path like [2] - but if chefspec is started from the cookbook
directory, there should no problem.

I hope this late answer helps you, too.

Malte.

[1]: https://github.com/acrmp/chefspec#varying-the-cookbook-path
[2]:
https://github.com/acrmp/chefspec/blob/master/lib/chefspec/chef_runner.rb#L161


On Wednesday, 01 May 2013 07:53:21 Bryan Stenson wrote:
> Ohai!
>
> Following the cookbook pattern described in the "Berkshelf Way", I'm trying
> to create a library cookbook which contains some custom LWRPs.  This
> library cookbook will not have any meaningful recipe on its own...it will
> only supply providers and resources to be consumed by application cookbooks.
>
> I'd like to test the library cookbook separately, and I think ChefSpec is
> the correct approach for unit testing.  I see that ChefSpec takes a recipe
> list when "converging", but, since my library cookbook won't have recipes,
> I don't have one to give to ChefRunner.
>
> I suppose I'd like some suggestions/experiences on how to do this.  From my
> perspective, I can see at least two ways to solve it (with a STRONG
> preference on the latter):
>
> 1. Create a "lwrp_testing.rb" recipe which will specifically call out to
> each LWRP the library cookbook provides.  I don't like this cause then I've
> got a testing recipe floating around which COULD be applied to a node in
> production - and that's just silly.  I could prefix this recipe with a "_"
> (as in, "_lwrp_testing.rb"), but again, it feels like a hack.
>
> 2. Create a recipe fixture for testing the LWRP for use only during
> ChefSpec runs.  The recipe would only exist in the context of a ChefSpec
> run, and allow for valid exercise of the underlying LWRPs during
> testing...at the same time, the recipe would not exist "for reals" in the
> cookbook, and couldn't be assigned to a run_list.  This seems like an
> elegant approach (design wise), but my Ruby skills are not to the level
> they should be to easily implement this.  Anybody else try this?
>
> Or, perhaps there's another solution I'm overlooking?
>
> Thanks for your thoughts.
>
> Bryan
>
> PS - Thanks to everybody for another great ChefConf!




Archive powered by MHonArc 2.6.16.

§