On Fri, 2011-09-16 at 09:20 -0700, Luke Kanies wrote:
> On Sep 16, 2011, at 2:05 AM, Brice Figureau wrote:
> 
> > Hi,
> > 
> > I'm struggling with a test failure when running in my latest pull
> > request (thanks to Jeff for finding it):
> > https://github.com/puppetlabs/puppet/pull/113/files#r126166
> > 
> > The spec in question is:
> > 
> >  it "should allow to reset localhost" do
> >    previous_host = Puppet::SSL::Host.localhost
> >    Puppet::SSL::Host.reset
> >    Puppet::SSL::Host.localhost.should_not == previous_host
> >  end
> > 
> > The test passes fine when I run only the host_spec.rb test.
> > 
> > With trial and error I was able to find that running:
> > spec/unit/indirector/certificate_request/ca_spec.rb 
> > spec/unit/ssl/host_spec.rb
> > in the same rspec batch produces the failure:
> > 
> >  1) Puppet::SSL::Host should allow to reset localhost
> >     Failure/Error: previous_host = Puppet::SSL::Host.localhost
> >     Puppet::Error:
> >       Cannot save maynard.lan; parent
> > directory 
> > /var/folders/hq/hhqxfhws68bc_s23f2ktyx0m0000gp/T/ssl_host_testing20110914-2703-fzokxv-0/ssl/private_keys
> >  does not exist
> >     # ./lib/puppet/indirector/ssl_file.rb:95:in `save'
> >     # ./lib/puppet/indirector/key/file.rb:34:in `save'
> >     # ./lib/puppet/indirector/indirection.rb:265:in `save'
> >     # ./lib/puppet/ssl/host.rb:147:in `generate_key'
> >     # ./lib/puppet/ssl/host.rb:176:in `certificate'
> >     # ./lib/puppet/ssl/host.rb:32:in `localhost'
> >     # ./spec/unit/ssl/host_spec.rb:69
> > 
> > 
> > My troubleshooting so far indicates that the problem comes from this
> > snippet in the ca_spec.rb:
> >  before :each do
> >    Puppet[:ssldir] = tmpdir('ssl')
> > 
> >    Puppet::SSL::Host.ca_location = :local
> >    Puppet[:localcacert] = Puppet[:cacert]
> >    Puppet::SSLCertificates::CA.new.mkrootcert
> > 
> >    @ca = Puppet::SSL::CertificateAuthority.new
> >  end
> > 
> > And more precisely from the 
> > Puppet::SSL::CertificateAuthority.new
> > 
> > line which in turn does a:
> > Puppet.settings.use :main, :ssl
> > 
> > This of course does a lot of thing, including creating the various
> > vardir, confidr and ssldir directories.
> > 
> > Unfortunately, this apparently dirties the settings in an unrecoverable
> > way if you need to further create files in ssldir. I don't exactly
> > understand why, and that's why I need someone else's help.
> > 
> > Note, I'm able to fix the problem by rewriting my spec to:
> >  it "should allow to reset localhost" do
> >    Puppet.settings.use :main
> >    previous_host = Puppet::SSL::Host.localhost
> >    Puppet::SSL::Host.reset
> >    Puppet::SSL::Host.localhost.should_not == previous_host
> >  end
> > 
> > because this forces the creation of all missing vardir and ssldir.
> > 
> > Of cource one solution could be to fully stub what happens in
> > Puppet::SSL::Host.localhost, but I thought doing the real thing was a
> > guarantee of testing something sensible.
> > 
> > Anyway, any input is welcome!
> 
> In general, this has usually turned out to be a problem with Settings
> retaining the fact that it has called use(), and thus refusing to
> create directories (because it thinks that would be a duplicate).
> 
> Does it change anything if you run Puppet.settings.clear before your
> test?  I thought this was being called between every test, but if
> there's an interaction between tests, there's obviously some kind of
> state being retained.

Yes, it works. But it doesn't if the Puppet.settings.clear happens in
the before, which might explain why it doesn't work when settings are
cleared after every test in my case.

I guess I'll have to dig deeper...
-- 
Brice Figureau
Follow the latest Puppet Community evolutions on www.planetpuppet.org!

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to