summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xlib/puppet/provider/package/darwinport.rb86
-rw-r--r--spec/lib/puppet_spec/files.rb56
-rw-r--r--spec/spec_helper.rb4
-rwxr-xr-xspec/unit/application/faces_base_spec.rb7
4 files changed, 44 insertions, 109 deletions
diff --git a/lib/puppet/provider/package/darwinport.rb b/lib/puppet/provider/package/darwinport.rb
deleted file mode 100755
index c5f9ba28f..000000000
--- a/lib/puppet/provider/package/darwinport.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-require 'puppet/provider/package'
-
-Puppet::Type.type(:package).provide :darwinport, :parent => Puppet::Provider::Package do
- desc "Package management using DarwinPorts on OS X."
-
- confine :operatingsystem => :darwin
- commands :port => "/opt/local/bin/port"
-
- def self.eachpkgashash
- # list out all of the packages
- open("| #{command(:port)} list installed") { |process|
- regex = %r{(\S+)\s+@(\S+)\s+(\S+)}
- fields = [:name, :ensure, :location]
- hash = {}
-
- # now turn each returned line into a package object
- process.each { |line|
- hash.clear
-
- if match = regex.match(line)
- fields.zip(match.captures) { |field,value|
- hash[field] = value
- }
-
- hash.delete :location
- hash[:provider] = self.name
- yield hash.dup
- else
- raise Puppet::DevError,
- "Failed to match dpkg line #{line}"
- end
- }
- }
- end
-
- def self.instances
- packages = []
-
- eachpkgashash do |hash|
- packages << new(hash)
- end
-
- packages
- end
-
- def install
- should = @resource.should(:ensure)
-
- # Seems like you can always say 'upgrade'
- output = port "upgrade", @resource[:name]
- if output =~ /^Error: No port/
- raise Puppet::ExecutionFailure, "Could not find package #{@resource[:name]}"
- end
- end
-
- def query
- version = nil
- self.class.eachpkgashash do |hash|
- return hash if hash[:name] == @resource[:name]
- end
-
- nil
- end
-
- def latest
- info = port :search, "^#{@resource[:name]}$"
-
- if $CHILD_STATUS != 0 or info =~ /^Error/
- return nil
- end
-
- ary = info.split(/\s+/)
- version = ary[2].sub(/^@/, '')
-
- version
- end
-
- def uninstall
- port :uninstall, @resource[:name]
- end
-
- def update
- install
- end
-end
-
diff --git a/spec/lib/puppet_spec/files.rb b/spec/lib/puppet_spec/files.rb
index 38c51a572..30fb4fc42 100644
--- a/spec/lib/puppet_spec/files.rb
+++ b/spec/lib/puppet_spec/files.rb
@@ -3,41 +3,51 @@ require 'tempfile'
# A support module for testing files.
module PuppetSpec::Files
+ # This code exists only to support tests that run as root, pretty much.
+ # Once they have finally been eliminated this can all go... --daniel 2011-04-08
+ if Puppet.features.posix? then
+ def self.in_tmp(path)
+ path =~ /^\/tmp/ or path =~ /^\/var\/folders/
+ end
+ elsif Puppet.features.microsoft_windows?
+ def self.in_tmp(path)
+ tempdir = File.expand_path(File.join(Dir::LOCAL_APPDATA, "Temp"))
+ path =~ /^#{tempdir}/
+ end
+ else
+ fail "Help! Can't find in_tmp for this platform"
+ end
+
def self.cleanup
- if defined?($tmpfiles)
- $tmpfiles.each do |file|
- file = File.expand_path(file)
- if Puppet.features.posix? and file !~ /^\/tmp/ and file !~ /^\/var\/folders/
- puts "Not deleting tmpfile #{file} outside of /tmp or /var/folders"
- next
- elsif Puppet.features.microsoft_windows?
- tempdir = File.expand_path(File.join(Dir::LOCAL_APPDATA, "Temp"))
- if file !~ /^#{tempdir}/
- puts "Not deleting tmpfile #{file} outside of #{tempdir}"
- next
- end
- end
- if FileTest.exist?(file)
- system("chmod -R 755 '#{file}'")
- system("rm -rf '#{file}'")
- end
+ $global_tempfiles ||= []
+ while path = $global_tempfiles.pop do
+ fail "Not deleting tmpfile #{path} outside regular tmpdir" unless in_tmp(path)
+
+ begin
+ FileUtils.rm_r path, :secure => true
+ rescue Errno::ENOENT
+ # nothing to do
end
- $tmpfiles.clear
end
end
def tmpfile(name)
+ # Generate a temporary file, just for the name...
source = Tempfile.new(name)
path = source.path
source.close!
- $tmpfiles ||= []
- $tmpfiles << path
+
+ # ...record it for cleanup,
+ $global_tempfiles ||= []
+ $global_tempfiles << File.expand_path(path)
+
+ # ...and bam.
path
end
def tmpdir(name)
- file = tmpfile(name)
- FileUtils.mkdir_p(file)
- file
+ path = tmpfile(name)
+ FileUtils.mkdir_p(path)
+ path
end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index fc63c6d19..e8ab66611 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -38,6 +38,8 @@ RSpec.configure do |config|
config.mock_with :mocha
config.before :each do
+ GC.disable
+
# these globals are set by Application
$puppet_application_mode = nil
$puppet_application_name = nil
@@ -65,6 +67,8 @@ RSpec.configure do |config|
@logs.clear
Puppet::Util::Log.close_all
+
+ GC.enable
end
end
diff --git a/spec/unit/application/faces_base_spec.rb b/spec/unit/application/faces_base_spec.rb
index 6d8815f44..6d8456612 100755
--- a/spec/unit/application/faces_base_spec.rb
+++ b/spec/unit/application/faces_base_spec.rb
@@ -59,6 +59,13 @@ describe Puppet::Application::FacesBase do
describe "parsing the command line" do
context "with just an action" do
before :all do
+ # We have to stub Signal.trap to avoid a crazy mess where we take
+ # over signal handling and make it impossible to cancel the test
+ # suite run.
+ #
+ # It would be nice to fix this elsewhere, but it is actually hard to
+ # capture this in rspec 2.5 and all. :( --daniel 2011-04-08
+ Signal.stubs(:trap)
app.command_line.stubs(:args).returns %w{foo}
app.preinit
end