puppet 0.13.6 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (149) hide show
  1. data/CHANGELOG +57 -0
  2. data/Rakefile +38 -410
  3. data/bin/puppet +14 -12
  4. data/bin/puppetca +1 -3
  5. data/bin/puppetd +25 -7
  6. data/bin/puppetdoc +161 -104
  7. data/bin/puppetmasterd +4 -4
  8. data/conf/epm.list +8 -0
  9. data/conf/redhat/client.init +6 -1
  10. data/conf/redhat/no-chuser-0.15.1.patch +38 -0
  11. data/conf/redhat/puppet.spec +20 -5
  12. data/conf/redhat/puppetd.conf +1 -1
  13. data/conf/redhat/puppetmasterd.conf +1 -1
  14. data/conf/redhat/server.init +2 -4
  15. data/examples/code/snippets/{casestatement → casestatement.pp} +12 -1
  16. data/examples/code/snippets/selectorvalues.pp +15 -0
  17. data/examples/code/snippets/singleselector.pp +22 -0
  18. data/examples/code/snippets/tag.pp +9 -0
  19. data/ext/module_puppet +1 -1
  20. data/install.rb +303 -303
  21. data/lib/puppet.rb +7 -9
  22. data/lib/puppet/client.rb +18 -5
  23. data/lib/puppet/client/dipper.rb +12 -10
  24. data/lib/puppet/client/master.rb +113 -41
  25. data/lib/puppet/client/pelement.rb +20 -0
  26. data/lib/puppet/config.rb +113 -6
  27. data/lib/puppet/element.rb +1 -3
  28. data/lib/puppet/event.rb +12 -23
  29. data/lib/puppet/filetype.rb +93 -5
  30. data/lib/puppet/inifile.rb +201 -0
  31. data/lib/puppet/log.rb +18 -6
  32. data/lib/puppet/parameter.rb +80 -29
  33. data/lib/puppet/parser/ast.rb +6 -4
  34. data/lib/puppet/parser/ast/caseopt.rb +13 -4
  35. data/lib/puppet/parser/ast/casestatement.rb +2 -2
  36. data/lib/puppet/parser/ast/component.rb +4 -14
  37. data/lib/puppet/parser/ast/hostclass.rb +1 -1
  38. data/lib/puppet/parser/ast/leaf.rb +12 -0
  39. data/lib/puppet/parser/ast/node.rb +4 -4
  40. data/lib/puppet/parser/ast/objectdef.rb +5 -51
  41. data/lib/puppet/parser/ast/selector.rb +2 -0
  42. data/lib/puppet/parser/ast/tag.rb +26 -0
  43. data/lib/puppet/parser/interpreter.rb +89 -74
  44. data/lib/puppet/parser/lexer.rb +4 -3
  45. data/lib/puppet/parser/parser.rb +440 -378
  46. data/lib/puppet/parser/scope.rb +844 -887
  47. data/lib/puppet/server.rb +12 -1
  48. data/lib/puppet/server/authconfig.rb +166 -0
  49. data/lib/puppet/server/authstore.rb +8 -6
  50. data/lib/puppet/server/ca.rb +23 -26
  51. data/lib/puppet/server/filebucket.rb +24 -23
  52. data/lib/puppet/server/fileserver.rb +116 -47
  53. data/lib/puppet/server/master.rb +58 -19
  54. data/lib/puppet/server/pelement.rb +176 -0
  55. data/lib/puppet/server/rights.rb +78 -0
  56. data/lib/puppet/server/servlet.rb +19 -6
  57. data/lib/puppet/sslcertificates.rb +4 -2
  58. data/lib/puppet/sslcertificates/ca.rb +66 -34
  59. data/lib/puppet/storage.rb +20 -26
  60. data/lib/puppet/transaction.rb +49 -92
  61. data/lib/puppet/type.rb +142 -35
  62. data/lib/puppet/type/cron.rb +29 -14
  63. data/lib/puppet/type/exec.rb +92 -35
  64. data/lib/puppet/type/group.rb +29 -11
  65. data/lib/puppet/type/nameservice.rb +50 -1
  66. data/lib/puppet/type/nameservice/netinfo.rb +68 -1
  67. data/lib/puppet/type/nameservice/objectadd.rb +1 -0
  68. data/lib/puppet/type/package.rb +150 -109
  69. data/lib/puppet/type/package/apple.rb +27 -0
  70. data/lib/puppet/type/package/apt.rb +1 -0
  71. data/lib/puppet/type/package/darwinport.rb +97 -0
  72. data/lib/puppet/type/package/dpkg.rb +10 -2
  73. data/lib/puppet/type/package/freebsd.rb +19 -0
  74. data/lib/puppet/type/package/{bsd.rb → openbsd.rb} +36 -7
  75. data/lib/puppet/type/package/ports.rb +98 -0
  76. data/lib/puppet/type/package/rpm.rb +43 -7
  77. data/lib/puppet/type/package/sun.rb +53 -36
  78. data/lib/puppet/type/package/yum.rb +5 -16
  79. data/lib/puppet/type/parsedtype.rb +41 -29
  80. data/lib/puppet/type/parsedtype/host.rb +13 -5
  81. data/lib/puppet/type/parsedtype/mount.rb +250 -0
  82. data/lib/puppet/type/parsedtype/port.rb +8 -6
  83. data/lib/puppet/type/pfile.rb +284 -30
  84. data/lib/puppet/type/pfile/checksum.rb +96 -68
  85. data/lib/puppet/type/pfile/content.rb +16 -13
  86. data/lib/puppet/type/pfile/ensure.rb +64 -126
  87. data/lib/puppet/type/pfile/group.rb +12 -5
  88. data/lib/puppet/type/pfile/mode.rb +16 -4
  89. data/lib/puppet/type/pfile/source.rb +47 -73
  90. data/lib/puppet/type/pfile/target.rb +81 -0
  91. data/lib/puppet/type/pfile/uid.rb +10 -3
  92. data/lib/puppet/type/pfilebucket.rb +12 -3
  93. data/lib/puppet/type/schedule.rb +5 -1
  94. data/lib/puppet/type/service.rb +138 -66
  95. data/lib/puppet/type/service/debian.rb +9 -3
  96. data/lib/puppet/type/service/init.rb +51 -56
  97. data/lib/puppet/type/service/smf.rb +16 -6
  98. data/lib/puppet/type/state.rb +71 -32
  99. data/lib/puppet/type/symlink.rb +12 -7
  100. data/lib/puppet/type/tidy.rb +5 -1
  101. data/lib/puppet/type/user.rb +116 -20
  102. data/lib/puppet/type/yumrepo.rb +314 -0
  103. data/lib/puppet/util.rb +84 -14
  104. data/test/client/client.rb +41 -18
  105. data/test/client/master.rb +50 -4
  106. data/test/executables/puppetbin.rb +31 -4
  107. data/test/executables/puppetca.rb +18 -2
  108. data/test/language/ast.rb +201 -31
  109. data/test/language/interpreter.rb +8 -2
  110. data/test/{parser → language}/lexer.rb +1 -1
  111. data/test/language/node.rb +84 -0
  112. data/test/{parser → language}/parser.rb +1 -1
  113. data/test/language/scope.rb +101 -2
  114. data/test/language/snippets.rb +23 -2
  115. data/test/other/config.rb +99 -1
  116. data/test/other/filetype.rb +95 -0
  117. data/test/other/inifile.rb +114 -0
  118. data/test/other/log.rb +3 -2
  119. data/test/other/transactions.rb +55 -10
  120. data/test/puppet/utiltest.rb +25 -1
  121. data/test/puppettest.rb +140 -46
  122. data/test/server/authconfig.rb +56 -0
  123. data/test/server/bucket.rb +32 -18
  124. data/test/server/fileserver.rb +75 -30
  125. data/test/server/master.rb +27 -4
  126. data/test/server/pelement.rb +298 -0
  127. data/test/server/rights.rb +41 -0
  128. data/test/server/server.rb +2 -2
  129. data/test/tagging/tagging.rb +100 -1
  130. data/test/types/basic.rb +3 -3
  131. data/test/types/cron.rb +24 -1
  132. data/test/types/exec.rb +99 -1
  133. data/test/types/file.rb +298 -2
  134. data/test/types/filebucket.rb +4 -15
  135. data/test/types/filesources.rb +43 -14
  136. data/test/types/group.rb +1 -13
  137. data/test/types/mount.rb +277 -0
  138. data/test/types/package.rb +164 -33
  139. data/test/types/parameter.rb +107 -0
  140. data/test/types/port.rb +2 -1
  141. data/test/types/service.rb +37 -2
  142. data/test/types/state.rb +92 -0
  143. data/test/types/symlink.rb +30 -2
  144. data/test/types/tidy.rb +2 -14
  145. data/test/types/type.rb +35 -1
  146. data/test/types/user.rb +110 -1
  147. data/test/types/yumrepo.rb +95 -0
  148. metadata +316 -290
  149. data/test/types/filetype.rb +0 -160
@@ -9,7 +9,7 @@ require 'test/unit'
9
9
  require 'fileutils'
10
10
  require 'puppettest'
11
11
 
12
- # $Id: filebucket.rb 847 2006-01-23 22:38:39Z luke $
12
+ # $Id: filebucket.rb 1012 2006-03-12 02:56:23Z luke $
13
13
 
14
14
  class TestFileBucket < Test::Unit::TestCase
15
15
  include FileTesting
@@ -119,12 +119,12 @@ class TestFileBucket < Test::Unit::TestCase
119
119
 
120
120
  file = mktestfile()
121
121
  assert_nothing_raised {
122
- file[:backup] = ["filebucket", name]
122
+ file[:backup] = name
123
123
  }
124
124
 
125
125
  opath = tempfile()
126
126
  @@tmpfiles << opath
127
- system("cp /etc/passwd %s" % opath)
127
+ File.open(opath, "w") { |f| f.puts "yaytest" }
128
128
 
129
129
  origmd5 = File.open(file.name) { |f| newmd5 = Digest::MD5.hexdigest(f.read) }
130
130
 
@@ -133,16 +133,7 @@ class TestFileBucket < Test::Unit::TestCase
133
133
  # file[:backup] = true
134
134
  #}
135
135
 
136
- comp = newcomp("yaytest", file)
137
-
138
- trans = nil
139
- assert_nothing_raised {
140
- trans = comp.evaluate
141
- }
142
- events = nil
143
- assert_nothing_raised {
144
- events = trans.evaluate.collect { |e| e.event }
145
- }
136
+ assert_apply(file)
146
137
 
147
138
  # so, we've now replaced the file with the opath file
148
139
  assert_equal(
@@ -159,7 +150,5 @@ class TestFileBucket < Test::Unit::TestCase
159
150
  origmd5,
160
151
  File.open(file.name) { |f| newmd5 = Digest::MD5.hexdigest(f.read) }
161
152
  )
162
-
163
-
164
153
  end
165
154
  end
@@ -82,16 +82,8 @@ class TestFileSources < Test::Unit::TestCase
82
82
  :source => frompath
83
83
  )
84
84
  }
85
- comp = Puppet.type(:component).create(
86
- :name => "component"
87
- )
88
- comp.push tofile
89
- assert_nothing_raised {
90
- trans = comp.evaluate
91
- }
92
- assert_nothing_raised {
93
- trans.evaluate
94
- }
85
+
86
+ assert_apply(tofile)
95
87
 
96
88
  assert(FileTest.exists?(topath))
97
89
  from = File.open(frompath) { |o| o.read }
@@ -333,19 +325,19 @@ class TestFileSources < Test::Unit::TestCase
333
325
  list = nil
334
326
  rpath = "/root%s" % tmpfile
335
327
  assert_nothing_raised {
336
- list = client.call("fileserver.list", rpath, false, false)
328
+ list = client.call("fileserver.list", rpath, :skip, false, false)
337
329
  }
338
330
 
339
331
  assert_equal("/\tfile", list)
340
332
 
341
333
  assert_nothing_raised {
342
- list = client.call("fileserver.describe", rpath)
334
+ list = client.call("fileserver.describe", rpath, :skip)
343
335
  }
344
336
 
345
337
  assert_match(/^\d+\tfile\t\d+\t\d+\t.+$/, list)
346
338
 
347
339
  assert_nothing_raised {
348
- list = client.call("fileserver.retrieve", rpath)
340
+ list = client.call("fileserver.retrieve", rpath, :skip)
349
341
  }
350
342
 
351
343
  contents = File.read(tmpfile)
@@ -607,6 +599,43 @@ class TestFileSources < Test::Unit::TestCase
607
599
  assert_events([], file)
608
600
  assert_events([], file)
609
601
  end
602
+
603
+ def test_sourcewithlinks
604
+ source = tempfile()
605
+ link = tempfile()
606
+ dest = tempfile()
607
+
608
+ File.open(source, "w") { |f| f.puts "yay" }
609
+ File.symlink(source, link)
610
+
611
+ file = nil
612
+ assert_nothing_raised {
613
+ file = Puppet.type(:file).create(
614
+ :name => dest,
615
+ :source => link
616
+ )
617
+ }
618
+
619
+ # Default to skipping links
620
+ assert_events([], file)
621
+ assert(! FileTest.exists?(dest), "Created link")
622
+
623
+ # Now follow the links
624
+ file[:links] = :follow
625
+ assert_events([:file_created], file)
626
+ assert(FileTest.file?(dest), "Destination is not a file")
627
+
628
+ # Now copy the links
629
+ assert_raise(Puppet::FileServerError) {
630
+ file[:links] = :manage
631
+ comp = newcomp(file)
632
+ trans = comp.evaluate
633
+ trans.evaluate
634
+ }
635
+ #assert(FileTest.symlink?(dest), "Destination is not a symlink")
636
+ #assert_equal(File.readlink(link), File.readlink(dest),
637
+ # "Link did not copy correctly")
638
+ end
610
639
  end
611
640
 
612
- # $Id: filesources.rb 884 2006-02-08 17:11:54Z luke $
641
+ # $Id: filesources.rb 984 2006-03-06 18:07:41Z luke $
@@ -4,7 +4,7 @@ if __FILE__ == $0
4
4
  $puppetbase = "../../../../language/trunk"
5
5
  end
6
6
 
7
- # $Id: group.rb 966 2006-03-02 17:12:26Z luke $
7
+ # $Id: group.rb 1113 2006-04-17 16:15:33Z luke $
8
8
 
9
9
  require 'etc'
10
10
  require 'puppet/type'
@@ -234,18 +234,6 @@ class TestGroup < Test::Unit::TestCase
234
234
  assert_equal(Process.gid, user.is(:gid), "Retrieved UID does not match")
235
235
  end
236
236
 
237
- def test_ensurevals
238
- gobj = nil
239
- assert_nothing_raised {
240
- gobj = Puppet.type(:group).create(
241
- :name => name,
242
- :ensure => :exists
243
- )
244
- }
245
-
246
- assert_equal(false, gobj.state(:ensure))
247
- end
248
-
249
237
  if Process.uid == 0
250
238
  def test_mkgroup
251
239
  gobj = nil
@@ -0,0 +1,277 @@
1
+ # Test host job creation, modification, and destruction
2
+
3
+ if __FILE__ == $0
4
+ $:.unshift '..'
5
+ $:.unshift '../../lib'
6
+ $puppetbase = "../.."
7
+ end
8
+
9
+ require 'puppettest'
10
+ require 'puppet'
11
+ require 'puppet/type/parsedtype/mount'
12
+ require 'test/unit'
13
+ require 'facter'
14
+
15
+ class TestMounts < Test::Unit::TestCase
16
+ include TestPuppet
17
+ def setup
18
+ super
19
+ @mounttype = Puppet.type(:mount)
20
+ @oldfiletype = @mounttype.filetype
21
+ end
22
+
23
+ def teardown
24
+ @mounttype.filetype = @oldfiletype
25
+ Puppet.type(:file).clear
26
+ super
27
+ end
28
+
29
+ # Here we just create a fake host type that answers to all of the methods
30
+ # but does not modify our actual system.
31
+ def mkfaketype
32
+ pfile = tempfile()
33
+ old = @mounttype.filetype
34
+ @mounttype.filetype = Puppet::FileType.filetype(:ram)
35
+
36
+ cleanup do
37
+ @mounttype.filetype = old
38
+ @mounttype.fileobj = nil
39
+ end
40
+
41
+ # Reset this, just in case
42
+ @mounttype.fileobj = nil
43
+ end
44
+
45
+ def mkmount
46
+ mount = nil
47
+
48
+ if defined? @pcount
49
+ @pcount += 1
50
+ else
51
+ @pcount = 1
52
+ end
53
+ args = {
54
+ :path => "/fspuppet%s" % @pcount,
55
+ :device => "/dev/dsk%s" % @pcount,
56
+ }
57
+
58
+ Puppet.type(:mount).fields.each do |field|
59
+ unless args.include? field
60
+ args[field] = "fake%s" % @pcount
61
+ end
62
+ end
63
+
64
+ assert_nothing_raised {
65
+ mount = Puppet.type(:mount).create(args)
66
+ }
67
+
68
+ return mount
69
+ end
70
+
71
+ def test_simplemount
72
+ mkfaketype
73
+ host = nil
74
+ assert_nothing_raised {
75
+ assert_nil(Puppet.type(:mount).retrieve)
76
+ }
77
+
78
+ mount = mkmount
79
+
80
+ assert_nothing_raised {
81
+ Puppet.type(:mount).store
82
+ }
83
+
84
+ assert_nothing_raised {
85
+ assert(
86
+ Puppet.type(:mount).to_file.include?(
87
+ Puppet.type(:mount).fileobj.read
88
+ ),
89
+ "File does not include all of our objects"
90
+ )
91
+ }
92
+ end
93
+
94
+ unless Facter["operatingsystem"].value == "Darwin"
95
+ def test_mountsparse
96
+ assert_nothing_raised {
97
+ @mounttype.retrieve
98
+ }
99
+
100
+ # Now just make we've got some mounts we know will be there
101
+ root = @mounttype["/"]
102
+ assert(root, "Could not retrieve root mount")
103
+ end
104
+
105
+ def test_rootfs
106
+ fs = nil
107
+ assert_nothing_raised {
108
+ Puppet.type(:mount).retrieve
109
+ }
110
+
111
+ assert_nothing_raised {
112
+ fs = Puppet.type(:mount)["/"]
113
+ }
114
+ assert(fs, "Could not retrieve root fs")
115
+
116
+ assert_nothing_raised {
117
+ assert(fs.mounted?, "Root is considered not mounted")
118
+ }
119
+ end
120
+ end
121
+
122
+ # Make sure it reads and writes correctly.
123
+ def test_readwrite
124
+ assert_nothing_raised {
125
+ Puppet::Type.type(:mount).retrieve
126
+ }
127
+
128
+ oldtype = Puppet::Type.type(:mount).filetype
129
+
130
+ # Now switch to storing in ram
131
+ mkfaketype
132
+
133
+ fs = mkmount
134
+
135
+ assert(Puppet::Type.type(:mount).filetype != oldtype)
136
+
137
+ assert_events([:mount_created], fs)
138
+
139
+ text = Puppet::Type.type(:mount).fileobj.read
140
+
141
+ assert(text =~ /#{fs[:path]}/, "Text did not include new fs")
142
+
143
+ fs[:ensure] = :absent
144
+
145
+ assert_events([:mount_removed], fs)
146
+ text = Puppet::Type.type(:mount).fileobj.read
147
+
148
+ assert(text !~ /#{fs[:path]}/, "Text still includes new fs")
149
+
150
+ fs[:ensure] = :present
151
+
152
+ assert_events([:mount_created], fs)
153
+
154
+ text = Puppet::Type.type(:mount).fileobj.read
155
+
156
+ assert(text =~ /#{fs[:path]}/, "Text did not include new fs")
157
+
158
+ fs[:options] = "rw,noauto"
159
+
160
+ assert_events([:mount_changed], fs)
161
+ end
162
+
163
+ if Process.uid == 0
164
+ def test_mountfs
165
+ fs = nil
166
+ case Facter["hostname"].value
167
+ when "culain": fs = "/ubuntu"
168
+ when "atalanta": fs = "/mnt"
169
+ when "figurehead": fs = "/cg4/net/depts"
170
+ else
171
+ $stderr.puts "No mount for mount testing; skipping"
172
+ return
173
+ end
174
+
175
+ assert_nothing_raised {
176
+ Puppet.type(:mount).retrieve
177
+ }
178
+
179
+ oldtext = Puppet::Type.type(:mount).fileobj.read
180
+
181
+ ftype = Puppet::Type.type(:mount).filetype
182
+
183
+ # Make sure the original gets reinstalled.
184
+ if ftype == Puppet::FileType.filetype(:netinfo)
185
+ cleanup do
186
+ IO.popen("niload -r /mounts .", "w") do |file|
187
+ file.puts oldtext
188
+ end
189
+ end
190
+ else
191
+ cleanup do
192
+ Puppet::Type.type(:mount).fileobj.write(oldtext)
193
+ end
194
+ end
195
+
196
+ obj = Puppet.type(:mount)[fs]
197
+
198
+ assert(obj, "Could not retrieve %s object" % fs)
199
+
200
+ current = nil
201
+
202
+ assert_nothing_raised {
203
+ current = obj.mounted?
204
+ }
205
+
206
+ if current
207
+ # Make sure the original gets reinstalled.
208
+ cleanup do
209
+ unless obj.mounted?
210
+ obj.mount
211
+ end
212
+ end
213
+ end
214
+
215
+ unless current
216
+ assert_nothing_raised {
217
+ obj.mount
218
+ }
219
+ end
220
+
221
+ # Now copy all of the states' "is" values to the "should" values
222
+ obj.each do |state|
223
+ state.should = state.is
224
+ end
225
+
226
+ # Verify we can remove the mount
227
+ assert_nothing_raised {
228
+ obj[:ensure] = :absent
229
+ }
230
+
231
+ assert_events([:mount_removed], obj)
232
+ assert_events([], obj)
233
+
234
+ # And verify it's gone
235
+ assert(!obj.mounted?, "Object is mounted after being removed")
236
+
237
+ text = Puppet.type(:mount).fileobj.read
238
+
239
+ assert(text !~ /#{fs}/,
240
+ "Fstab still contains %s" % fs)
241
+
242
+ assert_nothing_raised {
243
+ obj[:ensure] = :present
244
+ }
245
+
246
+ assert_events([:mount_created], obj)
247
+ assert_events([], obj)
248
+
249
+ text = Puppet::Type.type(:mount).fileobj.read
250
+ assert(text =~ /#{fs}/, "Fstab does not contain %s" % fs)
251
+
252
+ assert(! obj.mounted?, "Object is mounted incorrectly")
253
+
254
+ assert_nothing_raised {
255
+ obj[:ensure] = :mounted
256
+ }
257
+
258
+ assert_events([:mount_mounted], obj)
259
+ assert_events([], obj)
260
+
261
+ text = Puppet::Type.type(:mount).fileobj.read
262
+ assert(text =~ /#{fs}/,
263
+ "Fstab does not contain %s" % fs)
264
+
265
+ obj.retrieve
266
+ assert(obj.mounted?, "Object is not mounted")
267
+
268
+ unless current
269
+ assert_nothing_raised {
270
+ obj.unmount
271
+ }
272
+ end
273
+ end
274
+ end
275
+ end
276
+
277
+ # $Id: mount.rb 1093 2006-04-06 06:43:43Z luke $
@@ -43,7 +43,9 @@ class TestPackages < Test::Unit::TestCase
43
43
  pkgs = %w{SMCossh}
44
44
  when "Debian": pkgs = %w{ssh openssl}
45
45
  when "Fedora": pkgs = %w{openssh}
46
- when "OpenBSD": pkgs = %{vim}
46
+ when "OpenBSD": pkgs = %w{vim}
47
+ when "FreeBSD": pkgs = %w{sudo}
48
+ when "Darwin": pkgs = %w{gettext}
47
49
  else
48
50
  Puppet.notice "No test package for %s" % $platform
49
51
  return []
@@ -52,22 +54,29 @@ class TestPackages < Test::Unit::TestCase
52
54
  return pkgs
53
55
  end
54
56
 
55
- def mkpkgs
56
- tstpkgs().each { |pkg|
57
- if pkg.is_a?(Array)
58
- hash = {:name => pkg[0], :source => pkg[1]}
59
- hash[:ensure] = "present"
60
-
61
- unless File.exists?(hash[:source])
62
- Puppet.info "No package file %s for %s; skipping some package tests" %
63
- [hash[:source], Facter["operatingsystem"].value]
64
- end
65
- yield Puppet.type(:package).create(hash)
66
- else
67
- yield Puppet.type(:package).create(
68
- :name => pkg, :ensure => "latest"
69
- )
57
+ def modpkg(pkg)
58
+ case $platform
59
+ when "Solaris":
60
+ pkg[:adminfile] = "/usr/local/pkg/admin_file"
61
+ end
62
+ end
63
+
64
+ def mkpkgs(list = nil)
65
+ list ||= tstpkgs()
66
+ list.each { |pkg, source|
67
+ hash = {:name => pkg, :ensure => "latest"}
68
+ if source
69
+ source = source[0] if source.is_a? Array
70
+ hash[:source] = source
71
+ end
72
+ if Facter["operatingsystem"].value == "Darwin"
73
+ hash[:type] = "darwinport"
70
74
  end
75
+ obj = Puppet.type(:package).create(hash)
76
+ assert(pkg, "Could not create package")
77
+ modpkg(obj)
78
+
79
+ yield obj
71
80
  }
72
81
  end
73
82
 
@@ -77,18 +86,32 @@ class TestPackages < Test::Unit::TestCase
77
86
  when "Solaris":
78
87
  arch = Facter["hardwareisa"].value + Facter["operatingsystemrelease"].value
79
88
  case arch
89
+ when "i3865.10":
90
+ retval = {"SMCrdesk" => [
91
+ "/usr/local/pkg/rdesktop-1.3.1-sol10-intel-local",
92
+ "/usr/local/pkg/rdesktop-1.4.1-sol10-x86-local"
93
+ ]}
80
94
  when "sparc5.8":
81
- retval = [["SMCarc", "/usr/local/pkg/arc-5.21e-sol8-sparc-local"]]
95
+ retval = {"SMCarc" => "/usr/local/pkg/arc-5.21e-sol8-sparc-local"}
82
96
  when "i3865.8":
83
- retval = [["SMCarc", "/usr/local/pkg/arc-5.21e-sol8-intel-local"]]
97
+ retval = {"SMCarc" => "/usr/local/pkg/arc-5.21e-sol8-intel-local"}
84
98
  end
85
99
  when "OpenBSD":
86
- retval = [["aalib", "ftp://ftp.usa.openbsd.org/pub/OpenBSD/3.8/packages/i386/aalib-1.2-no_x11.tgz"]]
100
+ retval = {"aalib" => "ftp://ftp.usa.openbsd.org/pub/OpenBSD/3.8/packages/i386/aalib-1.2-no_x11.tgz"}
87
101
  when "Debian":
88
- retval = %w{zec}
102
+ retval = {"zec" => nil}
89
103
  #when "RedHat": type = :rpm
90
104
  when "Fedora":
91
- retval = %w{wv}
105
+ retval = {"wv" => nil}
106
+ when "CentOS":
107
+ retval = {"enhost" => [
108
+ "/home/luke/rpm/RPMS/noarch/enhost-1.0.1-1.noarch.rpm",
109
+ "/home/luke/rpm/RPMS/noarch/enhost-1.0.2-1.noarch.rpm"
110
+ ]}
111
+ when "Darwin":
112
+ retval = {"aop" => nil}
113
+ when "FreeBSD":
114
+ retval = {"yahtzee" => nil}
92
115
  else
93
116
  Puppet.notice "No test packages for %s" % $platform
94
117
  end
@@ -110,13 +133,7 @@ class TestPackages < Test::Unit::TestCase
110
133
  end
111
134
 
112
135
  def test_retrievepkg
113
- installedpkgs().each { |pkg|
114
- obj = nil
115
- assert_nothing_raised {
116
- obj = Puppet.type(:package).create(
117
- :name => pkg
118
- )
119
- }
136
+ mkpkgs(installedpkgs()) { |obj|
120
137
 
121
138
  assert(obj, "could not create package")
122
139
 
@@ -124,6 +141,7 @@ class TestPackages < Test::Unit::TestCase
124
141
  obj.retrieve
125
142
  }
126
143
 
144
+ # Version is a parameter, not a state.
127
145
  assert(obj[:version], "Could not retrieve package version")
128
146
  }
129
147
  end
@@ -136,6 +154,8 @@ class TestPackages < Test::Unit::TestCase
136
154
  )
137
155
  }
138
156
 
157
+ assert(obj, "Failed to create fake package")
158
+
139
159
  assert_nothing_raised {
140
160
  obj.retrieve
141
161
  }
@@ -145,22 +165,38 @@ class TestPackages < Test::Unit::TestCase
145
165
  end
146
166
 
147
167
  def test_specifypkgtype
168
+ pkg = nil
148
169
  assert_nothing_raised {
149
170
  pkg = Puppet.type(:package).create(
150
171
  :name => "mypkg",
151
172
  :type => "yum"
152
173
  )
153
174
  }
175
+ assert(pkg, "Did not create package")
176
+ assert_equal(:yum, pkg[:type])
154
177
  end
155
178
 
156
179
  def test_latestpkg
157
- tstpkgs { |pkg|
180
+ mkpkgs { |pkg|
181
+ next unless pkg.respond_to? :latest
158
182
  assert_nothing_raised {
159
183
  assert(pkg.latest, "Package did not return value for 'latest'")
160
184
  }
161
185
  }
162
186
  end
163
187
 
188
+ # Make sure our package type supports listing.
189
+ def test_listing
190
+ pkgtype = Puppet::Type.type(:package)
191
+
192
+ # Heh
193
+ defaulttype = pkgtype.pkgtype(pkgtype.default)
194
+
195
+ assert_nothing_raised("Could not list packages") do
196
+ defaulttype.list
197
+ end
198
+ end
199
+
164
200
  unless Process.uid == 0
165
201
  $stderr.puts "Run as root to perform package installation tests"
166
202
  else
@@ -181,12 +217,15 @@ class TestPackages < Test::Unit::TestCase
181
217
 
182
218
  assert_events([:package_created], comp, "package")
183
219
 
220
+ pkg.retrieve
221
+
222
+ assert(pkg.insync?, "Package is not in sync")
223
+
184
224
  # then uninstall it
185
225
  assert_nothing_raised {
186
226
  pkg[:ensure] = "absent"
187
227
  }
188
228
 
189
-
190
229
  pkg.retrieve
191
230
 
192
231
  assert(! pkg.insync?, "Package is in sync")
@@ -194,8 +233,6 @@ class TestPackages < Test::Unit::TestCase
194
233
  assert_events([:package_removed], comp, "package")
195
234
 
196
235
  # and now set install to 'latest' and verify it installs
197
- # FIXME this isn't really a very good test -- we should install
198
- # a low version, and then upgrade using this. But, eh.
199
236
  if pkg.respond_to?(:latest)
200
237
  assert_nothing_raised {
201
238
  pkg[:ensure] = "latest"
@@ -218,8 +255,102 @@ class TestPackages < Test::Unit::TestCase
218
255
  end
219
256
  }
220
257
  end
258
+
259
+ def test_upgradepkg
260
+ tstpkgs.each do |name, sources|
261
+ unless sources and sources.is_a? Array
262
+ $stderr.puts "Skipping pkg upgrade test for %s" % name
263
+ next
264
+ end
265
+ first, second = sources
266
+
267
+ unless FileTest.exists?(first) and FileTest.exists?(second)
268
+ $stderr.puts "Could not find upgrade test pkgs; skipping"
269
+ return
270
+ end
271
+
272
+ pkg = nil
273
+ assert_nothing_raised {
274
+ pkg = Puppet.type(:package).create(
275
+ :name => name,
276
+ :ensure => :latest,
277
+ :source => first
278
+ )
279
+ }
280
+
281
+ assert(pkg, "Failed to create package %s" % name)
282
+
283
+ modpkg(pkg)
284
+
285
+ assert(pkg.latest, "Could not retrieve latest value")
286
+
287
+ assert_events([:package_created], pkg)
288
+
289
+ assert_nothing_raised {
290
+ pkg.retrieve
291
+ }
292
+ assert(pkg.insync?, "Package is not in sync")
293
+ pkg.clear
294
+ assert_nothing_raised {
295
+ pkg[:source] = second
296
+ }
297
+ assert_events([:package_changed], pkg)
298
+
299
+ assert_nothing_raised {
300
+ pkg.retrieve
301
+ }
302
+ assert(pkg.insync?, "Package is not in sync")
303
+ assert_nothing_raised {
304
+ pkg[:ensure] = :absent
305
+ }
306
+ assert_events([:package_removed], pkg)
307
+
308
+ assert_nothing_raised {
309
+ pkg.retrieve
310
+ }
311
+ assert(pkg.insync?, "Package is not in sync")
312
+ end
313
+ end
314
+
315
+ # Stupid darwin, not supporting package uninstallation
316
+ if Facter["operatingsystem"].value == "Darwin" and
317
+ FileTest.exists? "/Users/luke/Documents/Puppet/pkgtesting.pkg"
318
+ def test_darwinpkgs
319
+ pkg = nil
320
+ assert_nothing_raised {
321
+ pkg = Puppet::Type.type(:package).create(
322
+ :name => "pkgtesting",
323
+ :source => "/Users/luke/Documents/Puppet/pkgtesting.pkg",
324
+ :ensure => :present
325
+ )
326
+ }
327
+
328
+ assert_nothing_raised {
329
+ pkg.retrieve
330
+ }
331
+
332
+ if pkg.insync?
333
+ Puppet.notice "Test package is already installed; please remove it"
334
+ next
335
+ end
336
+
337
+ # The file installed, and the receipt
338
+ @@tmpfiles << "/tmp/file"
339
+ @@tmpfiles << "/Library/Receipts/pkgtesting.pkg"
340
+
341
+ assert_events([:package_created], pkg, "package")
342
+
343
+ assert_nothing_raised {
344
+ pkg.retrieve
345
+ }
346
+
347
+ assert(pkg.insync?, "Package is not insync")
348
+
349
+ assert(FileTest.exists?("/tmp/pkgtesting/file"), "File did not get created")
350
+ end
351
+ end
221
352
  end
222
353
  end
223
354
  end
224
355
 
225
- # $Id: package.rb 937 2006-02-24 20:00:30Z luke $
356
+ # $Id: package.rb 1128 2006-04-21 03:06:54Z luke $