summaryrefslogtreecommitdiffstats
path: root/test/ral/providers/package/apt.rb
blob: a82f1bc3a7e3e636b45ad76f3be341053eb8f72f (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/env ruby

require File.dirname(__FILE__) + '/../../../lib/puppettest'

require 'mocha'

class AptPackageProviderTest < PuppetTest::TestCase
    confine "Apt package provider missing" =>
        Puppet::Type.type(:package).provider(:apt).suitable?

	def setup
        super
		@type = Puppet::Type.type(:package)
	end
	
	def test_install
		pkg = @type.create :name => 'faff',
		                   :provider => :apt,
		                   :ensure => :present,
		                   :source => "/tmp/faff.deb"

		pkg.provider.expects(
		                 :dpkgquery
					  ).with(
							  '-W',
							  '--showformat',
							  '${Status} ${Package} ${Version}\n',
							  'faff'
					  ).returns(
					        "deinstall ok config-files faff 1.2.3-1\n"
					  ).times(1)

		pkg.provider.expects(
		                 :aptget
		           ).with(
		                 '-q',
		                 '-y',
		                 '-o',
		                 'DPkg::Options::=--force-confold',
		                 :install,
		                 'faff'
					  ).returns(0)
		
		pkg.evaluate.each { |state| state.transaction = self; state.forward }
	end
	
	def test_purge
		pkg = @type.create :name => 'faff', :provider => :apt, :ensure => :purged

		pkg.provider.expects(
		                 :dpkgquery
					  ).with(
					        '-W',
					        '--showformat',
					        '${Status} ${Package} ${Version}\n',
					        'faff'
					  ).returns(
					        "install ok installed faff 1.2.3-1\n"
					  ).times(1)
		pkg.provider.expects(
		                 :aptget
					  ).with(
					        '-y',
					        '-q',
					        'remove',
					        '--purge',
					        'faff'
					  ).returns(0)
		pkg.provider.expects(
		                 :dpkg
					  ).with(
					        '--purge',
					        'faff'
					  ).returns(0)
		
		pkg.evaluate.each { |state| state.transaction = self; state.forward }
	end

	def test_dont_try_to_purge_if_already_purged
		pkg = @type.create :name => 'faff', :provider => :apt, :ensure => :purged

		pkg.provider.expects(
		                 :dpkgquery
					  ).with(
					        '-W',
					        '--showformat',
					        '${Status} ${Package} ${Version}\n',
					        'faff'
					  ).raises(
					        Puppet::ExecutionFailure,
					        "No packages found matching faff.\n"
					  ).times(1)
		pkg.provider.expects(
		                 :aptget
					  ).never
		
		pkg.evaluate.each { |state| state.transaction = self; state.forward }
	end

	def test_dont_try_to_purge_if_already_purged_and_we_want_it_absent
		pkg = @type.create :name => 'faff', :provider => :apt, :ensure => :absent

		pkg.provider.expects(
		                 :dpkgquery
					  ).with(
					        '-W',
					        '--showformat',
					        '${Status} ${Package} ${Version}\n',
					        'faff'
					  ).raises(
					        Puppet::ExecutionFailure,
					        "No packages found matching faff.\n"
					  ).times(1)
		pkg.provider.expects(
		                 :aptget
					  ).never

		pkg.evaluate.each { |state| state.transaction = self; state.forward }
	end

	def test_make_sure_we_purge_if_package_still_has_conffiles
		pkg = @type.create :name => 'faff', :provider => :apt, :ensure => :purged

		pkg.provider.expects(
		                 :dpkgquery
					  ).with(
					        '-W',
					        '--showformat',
					        '${Status} ${Package} ${Version}\n',
					        'faff'
					  ).returns(
					        "deinstall ok config-files faff 1.2.3-1\n"
					  ).times(1)
		pkg.provider.expects(
		                 :aptget
					  ).with(
					        '-y',
					        '-q',
					        'remove',
					        '--purge',
					        'faff'
					  ).returns(0)
		pkg.provider.expects(
		                 :dpkg
					  ).with(
					        '--purge',
					        'faff'
					  ).returns(0)
		
		pkg.evaluate.each { |state| state.transaction = self; state.forward }
	end
	

    def test_latest
		pkg = @type.create :name => 'base-files', :provider => :apt

        assert(pkg, "did not create pkg")
        status = pkg.provider.query
        assert(status, "base-files is not installed")
        assert(status[:ensure] != :absent, "base-files is not installed")

        latest = nil
        assert_nothing_raised("Could not call latest") do
            latest = pkg.provider.latest
        end
        assert(latest, "Could not get latest value from apt")
    end
end

# $Id$