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. -- Luke Kanies | http://about.me/lak | http://puppetlabs.com/ | +1-615-594-8199 -- 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.
