summaryrefslogtreecommitdiffstats
path: root/spec/spec_helper.rb
blob: e38d1e2186a962d3141fdfb360de9832196c172c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
unless defined? SPEC_HELPER_IS_LOADED
SPEC_HELPER_IS_LOADED = 1

dir = File.expand_path(File.dirname(__FILE__))

$LOAD_PATH.unshift("#{dir}/")
$LOAD_PATH.unshift("#{dir}/lib") # a spec-specific test lib dir
$LOAD_PATH.unshift("#{dir}/../lib")
$LOAD_PATH.unshift("#{dir}/../test/lib")  # Add the old test dir, so that we can still find our local mocha and spec

# include any gems in vendor/gems
Dir["#{dir}/../vendor/gems/**"].each do |path|
    libpath = File.join(path, "lib")
    if File.directory?(libpath)
        $LOAD_PATH.unshift(libpath)
    else
        $LOAD_PATH.unshift(path)
    end
end

require 'puppettest'
require 'puppettest/runnable_test'
require 'mocha'
gem 'rspec', '>=1.2.9'
require 'spec/autorun'

# So everyone else doesn't have to include this base constant.
module PuppetSpec
    FIXTURE_DIR = File.join(dir = File.expand_path(File.dirname(__FILE__)), "fixtures") unless defined?(FIXTURE_DIR)
end

# load any monkey-patches
Dir["#{dir}/monkey_patches/*.rb"].map { |file| require file }

Spec::Runner.configure do |config|
    config.mock_with :mocha

#  config.prepend_before :all do
#      setup_mocks_for_rspec
#      setup() if respond_to? :setup
#  end
#
    config.prepend_after :each do
        Puppet.settings.clear
        Puppet::Node::Environment.clear
        Puppet::Util::Storage.clear

        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
            end
            $tmpfiles.clear
        end

        @logs.clear
        Puppet::Util::Log.close_all
    end

    config.prepend_before :each do
        # these globals are set by Application
        $puppet_application_mode = nil
        $puppet_application_name = nil

        # Set the confdir and vardir to gibberish so that tests
        # have to be correctly mocked.
        Puppet[:confdir] = "/dev/null"
        Puppet[:vardir] = "/dev/null"

        # Avoid opening ports to the outside world
        Puppet.settings[:bindaddress] = "127.0.0.1"

        @logs = []
        Puppet::Util::Log.newdestination(@logs)
    end
end

# We need this because the RAL uses 'should' as a method.  This
# allows us the same behaviour but with a different method name.
class Object
    alias :must :should
end

end