puppet 0.9.2

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 (182) hide show
  1. data/CHANGELOG +0 -0
  2. data/COPYING +340 -0
  3. data/LICENSE +17 -0
  4. data/README +24 -0
  5. data/Rakefile +294 -0
  6. data/TODO +4 -0
  7. data/bin/cf2puppet +186 -0
  8. data/bin/puppet +176 -0
  9. data/bin/puppetca +213 -0
  10. data/bin/puppetd +246 -0
  11. data/bin/puppetdoc +184 -0
  12. data/bin/puppetmasterd +258 -0
  13. data/examples/code/allatonce +13 -0
  14. data/examples/code/assignments +11 -0
  15. data/examples/code/classing +35 -0
  16. data/examples/code/components +73 -0
  17. data/examples/code/execs +16 -0
  18. data/examples/code/failers/badclassnoparam +10 -0
  19. data/examples/code/failers/badclassparam +10 -0
  20. data/examples/code/failers/badcompnoparam +9 -0
  21. data/examples/code/failers/badcompparam +9 -0
  22. data/examples/code/failers/badtypeparam +3 -0
  23. data/examples/code/file.bl +11 -0
  24. data/examples/code/filedefaults +10 -0
  25. data/examples/code/fileparsing +116 -0
  26. data/examples/code/filerecursion +15 -0
  27. data/examples/code/functions +3 -0
  28. data/examples/code/groups +7 -0
  29. data/examples/code/head +30 -0
  30. data/examples/code/importing +8 -0
  31. data/examples/code/nodes +20 -0
  32. data/examples/code/one +8 -0
  33. data/examples/code/relationships +34 -0
  34. data/examples/code/selectors +28 -0
  35. data/examples/code/simpletests +11 -0
  36. data/examples/code/snippets/argumentdefaults +14 -0
  37. data/examples/code/snippets/casestatement +39 -0
  38. data/examples/code/snippets/classheirarchy.pp +15 -0
  39. data/examples/code/snippets/classincludes.pp +17 -0
  40. data/examples/code/snippets/classpathtest +11 -0
  41. data/examples/code/snippets/dirchmod +19 -0
  42. data/examples/code/snippets/failmissingexecpath.pp +13 -0
  43. data/examples/code/snippets/falsevalues.pp +3 -0
  44. data/examples/code/snippets/filecreate +11 -0
  45. data/examples/code/snippets/implicititeration +15 -0
  46. data/examples/code/snippets/multipleinstances +7 -0
  47. data/examples/code/snippets/namevartest +9 -0
  48. data/examples/code/snippets/scopetest +13 -0
  49. data/examples/code/snippets/selectorvalues.pp +22 -0
  50. data/examples/code/snippets/simpledefaults +5 -0
  51. data/examples/code/snippets/simpleselector +38 -0
  52. data/examples/code/svncommit +13 -0
  53. data/examples/root/bin/sleeper +69 -0
  54. data/examples/root/etc/configfile +0 -0
  55. data/examples/root/etc/debian-passwd +29 -0
  56. data/examples/root/etc/debian-syslog.conf +71 -0
  57. data/examples/root/etc/init.d/sleeper +65 -0
  58. data/examples/root/etc/otherfile +0 -0
  59. data/examples/root/etc/puppet/fileserver.conf +3 -0
  60. data/examples/root/etc/puppet/puppetmasterd.conf +10 -0
  61. data/ext/module:puppet +195 -0
  62. data/install.rb +270 -0
  63. data/lib/puppet.rb +249 -0
  64. data/lib/puppet/base64.rb +19 -0
  65. data/lib/puppet/client.rb +519 -0
  66. data/lib/puppet/config.rb +49 -0
  67. data/lib/puppet/daemon.rb +208 -0
  68. data/lib/puppet/element.rb +71 -0
  69. data/lib/puppet/event.rb +259 -0
  70. data/lib/puppet/log.rb +321 -0
  71. data/lib/puppet/metric.rb +250 -0
  72. data/lib/puppet/parsedfile.rb +38 -0
  73. data/lib/puppet/parser/ast.rb +1560 -0
  74. data/lib/puppet/parser/interpreter.rb +150 -0
  75. data/lib/puppet/parser/lexer.rb +226 -0
  76. data/lib/puppet/parser/parser.rb +1354 -0
  77. data/lib/puppet/parser/scope.rb +755 -0
  78. data/lib/puppet/server.rb +170 -0
  79. data/lib/puppet/server/authstore.rb +227 -0
  80. data/lib/puppet/server/ca.rb +140 -0
  81. data/lib/puppet/server/filebucket.rb +147 -0
  82. data/lib/puppet/server/fileserver.rb +477 -0
  83. data/lib/puppet/server/logger.rb +43 -0
  84. data/lib/puppet/server/master.rb +103 -0
  85. data/lib/puppet/server/servlet.rb +247 -0
  86. data/lib/puppet/sslcertificates.rb +737 -0
  87. data/lib/puppet/statechange.rb +150 -0
  88. data/lib/puppet/storage.rb +95 -0
  89. data/lib/puppet/transaction.rb +179 -0
  90. data/lib/puppet/transportable.rb +151 -0
  91. data/lib/puppet/type.rb +1354 -0
  92. data/lib/puppet/type/component.rb +141 -0
  93. data/lib/puppet/type/cron.rb +543 -0
  94. data/lib/puppet/type/exec.rb +316 -0
  95. data/lib/puppet/type/group.rb +152 -0
  96. data/lib/puppet/type/nameservice.rb +3 -0
  97. data/lib/puppet/type/nameservice/netinfo.rb +173 -0
  98. data/lib/puppet/type/nameservice/objectadd.rb +146 -0
  99. data/lib/puppet/type/nameservice/posix.rb +200 -0
  100. data/lib/puppet/type/package.rb +420 -0
  101. data/lib/puppet/type/package/apt.rb +70 -0
  102. data/lib/puppet/type/package/dpkg.rb +108 -0
  103. data/lib/puppet/type/package/rpm.rb +81 -0
  104. data/lib/puppet/type/package/sun.rb +117 -0
  105. data/lib/puppet/type/package/yum.rb +58 -0
  106. data/lib/puppet/type/pfile.rb +569 -0
  107. data/lib/puppet/type/pfile/checksum.rb +219 -0
  108. data/lib/puppet/type/pfile/create.rb +108 -0
  109. data/lib/puppet/type/pfile/group.rb +129 -0
  110. data/lib/puppet/type/pfile/mode.rb +131 -0
  111. data/lib/puppet/type/pfile/source.rb +264 -0
  112. data/lib/puppet/type/pfile/type.rb +31 -0
  113. data/lib/puppet/type/pfile/uid.rb +166 -0
  114. data/lib/puppet/type/pfilebucket.rb +80 -0
  115. data/lib/puppet/type/pprocess.rb +97 -0
  116. data/lib/puppet/type/service.rb +347 -0
  117. data/lib/puppet/type/service/base.rb +17 -0
  118. data/lib/puppet/type/service/debian.rb +50 -0
  119. data/lib/puppet/type/service/init.rb +145 -0
  120. data/lib/puppet/type/service/smf.rb +29 -0
  121. data/lib/puppet/type/state.rb +182 -0
  122. data/lib/puppet/type/symlink.rb +183 -0
  123. data/lib/puppet/type/tidy.rb +183 -0
  124. data/lib/puppet/type/typegen.rb +149 -0
  125. data/lib/puppet/type/typegen/filerecord.rb +243 -0
  126. data/lib/puppet/type/typegen/filetype.rb +316 -0
  127. data/lib/puppet/type/user.rb +290 -0
  128. data/lib/puppet/util.rb +138 -0
  129. data/test/certmgr/certmgr.rb +265 -0
  130. data/test/client/client.rb +203 -0
  131. data/test/executables/puppetbin.rb +53 -0
  132. data/test/executables/puppetca.rb +79 -0
  133. data/test/executables/puppetd.rb +71 -0
  134. data/test/executables/puppetmasterd.rb +153 -0
  135. data/test/executables/puppetmodule.rb +60 -0
  136. data/test/language/ast.rb +412 -0
  137. data/test/language/interpreter.rb +71 -0
  138. data/test/language/scope.rb +412 -0
  139. data/test/language/snippets.rb +445 -0
  140. data/test/other/events.rb +111 -0
  141. data/test/other/log.rb +195 -0
  142. data/test/other/metrics.rb +92 -0
  143. data/test/other/overrides.rb +115 -0
  144. data/test/other/parsedfile.rb +31 -0
  145. data/test/other/relationships.rb +113 -0
  146. data/test/other/state.rb +106 -0
  147. data/test/other/storage.rb +39 -0
  148. data/test/other/transactions.rb +235 -0
  149. data/test/parser/lexer.rb +120 -0
  150. data/test/parser/parser.rb +180 -0
  151. data/test/puppet/conffiles.rb +104 -0
  152. data/test/puppet/defaults.rb +100 -0
  153. data/test/puppet/error.rb +23 -0
  154. data/test/puppet/utiltest.rb +120 -0
  155. data/test/puppettest.rb +774 -0
  156. data/test/server/authstore.rb +209 -0
  157. data/test/server/bucket.rb +227 -0
  158. data/test/server/ca.rb +201 -0
  159. data/test/server/fileserver.rb +710 -0
  160. data/test/server/logger.rb +175 -0
  161. data/test/server/master.rb +150 -0
  162. data/test/server/server.rb +130 -0
  163. data/test/tagging/tagging.rb +80 -0
  164. data/test/test +51 -0
  165. data/test/types/basic.rb +119 -0
  166. data/test/types/component.rb +272 -0
  167. data/test/types/cron.rb +261 -0
  168. data/test/types/exec.rb +273 -0
  169. data/test/types/file.rb +616 -0
  170. data/test/types/filebucket.rb +167 -0
  171. data/test/types/fileignoresource.rb +287 -0
  172. data/test/types/filesources.rb +587 -0
  173. data/test/types/filetype.rb +162 -0
  174. data/test/types/group.rb +271 -0
  175. data/test/types/package.rb +205 -0
  176. data/test/types/query.rb +101 -0
  177. data/test/types/service.rb +100 -0
  178. data/test/types/symlink.rb +93 -0
  179. data/test/types/tidy.rb +124 -0
  180. data/test/types/type.rb +135 -0
  181. data/test/types/user.rb +371 -0
  182. metadata +243 -0
@@ -0,0 +1,106 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $puppetbase = "../../../../language/trunk"
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'puppettest'
9
+ require 'puppet/storage'
10
+ require 'test/unit'
11
+
12
+ # $Id: state.rb 724 2005-10-22 22:27:20Z luke $
13
+
14
+ class StorageTestingClass
15
+ end
16
+
17
+ class TestStorage < Test::Unit::TestCase
18
+ include TestPuppet
19
+ def disabled_setup
20
+ Puppet[:loglevel] = :debug if __FILE__ == $0
21
+ Puppet[:checksumfile] = "/var/tmp/puppetteststate"
22
+
23
+ @oldconf = Puppet[:puppetconf]
24
+ Puppet[:puppetconf] = "/tmp/storagetesting"
25
+ @oldvar = Puppet[:puppetvar]
26
+ Puppet[:puppetvar] = "/tmp/storagetesting"
27
+
28
+ @@tmpfiles << "/tmp/storagetesting"
29
+ end
30
+
31
+ def teardown
32
+ #system("rm -f %s" % Puppet[:checksumfile])
33
+ Puppet::Storage.clear
34
+
35
+ #Puppet[:puppetconf] = @oldconf
36
+ #Puppet[:puppetvar] = @oldvar
37
+ super
38
+ end
39
+
40
+ def test_simple
41
+ state = nil
42
+ assert_nothing_raised {
43
+ Puppet::Storage.load
44
+ }
45
+ assert_nothing_raised {
46
+ state = Puppet::Storage.state(Puppet::Type)
47
+ }
48
+ assert(state)
49
+ state["/etc/passwd"] = ["md5","9ebebe0c02445c40b9dc6871b64ee416"]
50
+ assert_nothing_raised {
51
+ Puppet::Storage.store
52
+ }
53
+
54
+ # clear the memory, so we're sure we're hitting the state file
55
+ assert_nothing_raised {
56
+ Puppet::Storage.clear
57
+ Puppet::Storage.init
58
+ }
59
+ assert_nothing_raised {
60
+ Puppet::Storage.load
61
+ }
62
+ assert_equal(
63
+ ["md5","9ebebe0c02445c40b9dc6871b64ee416"],
64
+ Puppet::Storage.state(Puppet::Type)["/etc/passwd"]
65
+ )
66
+ end
67
+
68
+ def test_instance
69
+ file = nil
70
+ state = nil
71
+ assert_nothing_raised {
72
+ file = Puppet::Type::PFile.create(
73
+ :path => "/etc/passwd"
74
+ )
75
+ }
76
+ assert_nothing_raised {
77
+ Puppet::Storage.load
78
+ }
79
+ assert_nothing_raised {
80
+ state = Puppet::Storage.state(file)
81
+ }
82
+ assert(state)
83
+ end
84
+
85
+ def test_update
86
+ state = Puppet::Storage.state(StorageTestingClass)
87
+ state["testing"] = "yayness"
88
+ Puppet::Storage.store
89
+ assert(FileTest.exists?(Puppet[:checksumfile]))
90
+ end
91
+
92
+ def test_hashstorage
93
+ state = Puppet::Storage.state(StorageTestingClass)
94
+ hash = {
95
+ :yay => "boo",
96
+ :rah => "foo"
97
+ }
98
+ state["testing"] = hash
99
+ Puppet::Storage.store
100
+ Puppet::Storage.clear
101
+ Puppet::Storage.init
102
+ Puppet::Storage.load
103
+ state = Puppet::Storage.state(StorageTestingClass)
104
+ assert_equal(hash, state["testing"])
105
+ end
106
+ end
@@ -0,0 +1,39 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $puppetbase = "../.."
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'puppettest'
9
+ require 'test/unit'
10
+
11
+ class TestParsedFile < Test::Unit::TestCase
12
+ include TestPuppet
13
+
14
+ def test_storeandretrieve
15
+ hash = {:a => :b, :c => :d}
16
+
17
+ state = nil
18
+ assert_nothing_raised {
19
+ state = Puppet::Storage.state(hash)
20
+ }
21
+
22
+ assert(!state.include?("name"))
23
+
24
+ assert_nothing_raised {
25
+ state["name"] = hash
26
+ }
27
+
28
+ assert_nothing_raised {
29
+ Puppet::Storage.store
30
+ }
31
+ assert_nothing_raised {
32
+ state = Puppet::Storage.state(hash)
33
+ }
34
+
35
+ assert_equal(state["name"], hash)
36
+ end
37
+ end
38
+
39
+ # $Id: storage.rb 742 2005-11-16 17:12:11Z luke $
@@ -0,0 +1,235 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '..'
3
+ $:.unshift '../../lib'
4
+ $puppetbase = "../.."
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'puppettest'
9
+ require 'test/unit'
10
+
11
+ # $Id: transactions.rb 747 2005-11-22 03:54:30Z luke $
12
+
13
+ class TestTransactions < Test::Unit::TestCase
14
+ include FileTesting
15
+ def ingroup(gid)
16
+ require 'etc'
17
+ begin
18
+ group = Etc.getgrgid(gid)
19
+ rescue => detail
20
+ puts "Could not retrieve info for group %s: %s" % [gid, detail]
21
+ return nil
22
+ end
23
+
24
+ return @groups.include?(group.name)
25
+ end
26
+
27
+ def setup
28
+ super
29
+ @groups = %x{groups}.chomp.split(/ /)
30
+ unless @groups.length > 1
31
+ p @groups
32
+ raise "You must be a member of more than one group to test this"
33
+ end
34
+ end
35
+
36
+ def teardown
37
+ Puppet::Type::Service.each { |serv|
38
+ serv[:running] = false
39
+ serv.sync
40
+ }
41
+ #print "\n\n" if Puppet[:debug]
42
+ super
43
+ end
44
+
45
+ def newfile(hash = {})
46
+ tmpfile = tempfile()
47
+ File.open(tmpfile, "w") { |f| f.puts rand(100) }
48
+
49
+ # XXX now, because os x apparently somehow allows me to make a file
50
+ # owned by a group i'm not a member of, i have to verify that
51
+ # the file i just created is owned by one of my groups
52
+ # grrr
53
+ unless ingroup(File.stat(tmpfile).gid)
54
+ Puppet.info "Somehow created file in non-member group %s; fixing" %
55
+ File.stat(tmpfile).gid
56
+
57
+ require 'etc'
58
+ firstgr = @groups[0]
59
+ unless firstgr.is_a?(Integer)
60
+ str = Etc.getgrnam(firstgr)
61
+ firstgr = str.gid
62
+ end
63
+ File.chown(nil, firstgr, tmpfile)
64
+ end
65
+
66
+ @@tmpfiles.push tmpfile
67
+ hash[:name] = tmpfile
68
+ assert_nothing_raised() {
69
+ return Puppet::Type::PFile.create(hash)
70
+ }
71
+ end
72
+
73
+ def newservice
74
+ assert_nothing_raised() {
75
+ return Puppet::Type::Service.create(
76
+ :name => "sleeper",
77
+ :type => "init",
78
+ :path => File.join($puppetbase,"examples/root/etc/init.d"),
79
+ :hasstatus => true,
80
+ :check => [:running]
81
+ )
82
+ }
83
+ end
84
+
85
+ def newexec(file)
86
+ assert_nothing_raised() {
87
+ return Puppet::Type::Exec.create(
88
+ :name => "touch %s" % file,
89
+ :path => "/bin:/usr/bin:/sbin:/usr/sbin",
90
+ :returns => 0
91
+ )
92
+ }
93
+ end
94
+
95
+ # modify a file and then roll the modifications back
96
+ def test_filerollback
97
+ transaction = nil
98
+ file = newfile()
99
+
100
+ states = {}
101
+ check = [:group,:mode]
102
+ file[:check] = check
103
+
104
+ assert_nothing_raised() {
105
+ file.retrieve
106
+ }
107
+
108
+ assert_nothing_raised() {
109
+ check.each { |state|
110
+ assert(file[state])
111
+ states[state] = file[state]
112
+ }
113
+ }
114
+
115
+
116
+ component = newcomp("file",file)
117
+ require 'etc'
118
+ groupname = Etc.getgrgid(File.stat(file.name).gid).name
119
+ assert_nothing_raised() {
120
+ # Find a group that it's not set to
121
+ group = @groups.find { |group| group != groupname }
122
+ unless group
123
+ raise "Could not find suitable group"
124
+ end
125
+ file[:group] = group
126
+
127
+ file[:mode] = "755"
128
+ }
129
+ trans = assert_events(component, [:inode_changed, :inode_changed], "file")
130
+
131
+ assert_rollback_events(trans, [:inode_changed, :inode_changed], "file")
132
+
133
+ assert_nothing_raised() {
134
+ file.retrieve
135
+ }
136
+ states.each { |state,value|
137
+ assert_equal(
138
+ value,file.is(state), "File %s remained %s" % [state, file.is(state)]
139
+ )
140
+ }
141
+ end
142
+
143
+ # start a service, and then roll the modification back
144
+ def test_servicetrans
145
+ transaction = nil
146
+ service = newservice()
147
+
148
+ component = newcomp("service",service)
149
+
150
+ assert_nothing_raised() {
151
+ service[:running] = 1
152
+ }
153
+ trans = assert_events(component, [:service_started], "file")
154
+
155
+ assert_rollback_events(trans, [:service_stopped], "file")
156
+ end
157
+
158
+ # test that services are correctly restarted and that work is done
159
+ # in the right order
160
+ def test_refreshing
161
+ transaction = nil
162
+ file = newfile()
163
+ execfile = File.join(tmpdir(), "exectestingness")
164
+ exec = newexec(execfile)
165
+ states = {}
166
+ check = [:group,:mode]
167
+ file[:check] = check
168
+
169
+ @@tmpfiles << execfile
170
+
171
+ component = newcomp("both",file,exec)
172
+
173
+ # 'subscribe' expects an array of arrays
174
+ exec[:subscribe] = [[file.class.name,file.name]]
175
+ exec[:refreshonly] = true
176
+
177
+ assert_nothing_raised() {
178
+ file.retrieve
179
+ exec.retrieve
180
+ }
181
+
182
+ check.each { |state|
183
+ states[state] = file[state]
184
+ }
185
+ assert_nothing_raised() {
186
+ file[:mode] = "755"
187
+ }
188
+
189
+ trans = assert_events(component,
190
+ [:inode_changed], "testboth")
191
+
192
+ assert(FileTest.exists?(execfile), "Execfile does not exist")
193
+ File.unlink(execfile)
194
+ assert_nothing_raised() {
195
+ file[:group] = @groups[1]
196
+ }
197
+
198
+ trans = assert_events(component,
199
+ [:inode_changed], "testboth")
200
+ assert(FileTest.exists?(execfile), "Execfile does not exist")
201
+ end
202
+
203
+ def test_zrefreshAcrossTwoComponents
204
+ transaction = nil
205
+ file = newfile()
206
+ execfile = File.join(tmpdir(), "exectestingness2")
207
+ @@tmpfiles << execfile
208
+ exec = newexec(execfile)
209
+ states = {}
210
+ check = [:group,:mode]
211
+ file[:check] = check
212
+
213
+ fcomp = newcomp("file",file)
214
+ ecomp = newcomp("exec",exec)
215
+
216
+ component = newcomp("both",fcomp,ecomp)
217
+
218
+ # 'subscribe' expects an array of arrays
219
+ #component[:require] = [[file.class.name,file.name]]
220
+ ecomp[:subscribe] = [[fcomp.class.name,fcomp.name]]
221
+ exec[:refreshonly] = true
222
+
223
+ trans = assert_events(component, [], "subscribe1")
224
+
225
+ assert_nothing_raised() {
226
+ file[:group] = @groups[1]
227
+ file[:mode] = "755"
228
+ }
229
+
230
+ trans = assert_events(component, [:inode_changed, :inode_changed],
231
+ "subscribe2")
232
+
233
+ end
234
+
235
+ end
@@ -0,0 +1,120 @@
1
+ if __FILE__ == $0
2
+ $:.unshift '../../lib'
3
+ $:.unshift '..'
4
+ $puppetbase = "../.."
5
+ end
6
+
7
+ require 'puppet'
8
+ require 'puppet/parser/lexer'
9
+ require 'test/unit'
10
+ require 'puppettest.rb'
11
+
12
+ #%q{service("telnet") = \{
13
+ # port => "23",
14
+ # protocol => "tcp",
15
+ # name => "telnet",
16
+ #\}
17
+ #} => [[:NAME, "service"], [:LPAREN, "("], [:DQUOTE, "\""], [:NAME, "telnet"], [:DQUOTE, "\""], [:RPAREN, ")"], [:EQUALS, "="], [:lbrace, "{"], [:NAME, "port"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "23"], [:DQUOTE, "\""], [:COMMA, ","], [:NAME, "protocol"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "tcp"], [:DQUOTE, "\""], [:COMMA, ","], [:NAME, "name"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "telnet"], [:DQUOTE, "\""], [:COMMA, ","], [:RBRACE, "}"]]
18
+
19
+ class TestLexer < Test::Unit::TestCase
20
+ include TestPuppet
21
+ def setup
22
+ super
23
+ @lexer = Puppet::Parser::Lexer.new()
24
+ end
25
+
26
+ def test_simple_lex
27
+ strings = {
28
+ %q{\\} => [[:BACKSLASH,"\\"],[false,false]],
29
+ %q{simplest scanner test} => [[:NAME,"simplest"],[:NAME,"scanner"],[:NAME,"test"],[false,false]],
30
+ %q{returned scanner test
31
+ } => [[:NAME,"returned"],[:NAME,"scanner"],[:NAME,"test"],[false,false]]
32
+ }
33
+ strings.each { |str,ary|
34
+ @lexer.string = str
35
+ assert_equal(
36
+ ary,
37
+ @lexer.fullscan()
38
+ )
39
+ }
40
+ end
41
+
42
+ def test_quoted_strings
43
+ strings = {
44
+ %q{a simple "scanner" test
45
+ } => [[:NAME,"a"],[:NAME,"simple"],[:QTEXT,"scanner"],[:NAME,"test"],[false,false]],
46
+ %q{a harder "scanner test"
47
+ } => [[:NAME,"a"],[:NAME,"harder"],[:QTEXT,"scanner test"],[false,false]],
48
+ %q{a hardest "scanner \"test\""
49
+ } => [[:NAME,"a"],[:NAME,"hardest"],[:QTEXT,'scanner "test"'],[false,false]],
50
+ %q{function("call")} => [[:NAME,"function"],[:LPAREN,"("],[:QTEXT,'call'],[:RPAREN,")"],[false,false]]
51
+ }
52
+ strings.each { |str,array|
53
+ @lexer.string = str
54
+ assert_equal(
55
+ array,
56
+ @lexer.fullscan()
57
+ )
58
+ }
59
+ end
60
+
61
+ def test_errors
62
+ strings = %w{
63
+ ^
64
+ @
65
+ }
66
+ strings.each { |str|
67
+ @lexer.string = str
68
+ assert_raise(RuntimeError) {
69
+ @lexer.fullscan()
70
+ }
71
+ }
72
+ end
73
+
74
+ def test_more_error
75
+ assert_raise(TypeError) {
76
+ @lexer.fullscan()
77
+ }
78
+ end
79
+
80
+ def test_files
81
+ textfiles() { |file|
82
+ @lexer.file = file
83
+ assert_nothing_raised() {
84
+ @lexer.fullscan()
85
+ }
86
+ Puppet::Type.allclear
87
+ }
88
+ end
89
+
90
+ def test_strings
91
+ names = %w{this is a bunch of names}
92
+ types = %w{Many Different Words A Word}
93
+ words = %w{differently Cased words A a}
94
+
95
+ names.each { |t|
96
+ @lexer.string = t
97
+ assert_equal(
98
+ [[:NAME,t],[false,false]],
99
+ @lexer.fullscan
100
+ )
101
+ }
102
+ types.each { |t|
103
+ @lexer.string = t
104
+ assert_equal(
105
+ [[:TYPE,t],[false,false]],
106
+ @lexer.fullscan
107
+ )
108
+ }
109
+ end
110
+
111
+ def test_emptystring
112
+ bit = '$var = ""'
113
+
114
+ assert_nothing_raised {
115
+ @lexer.string = bit
116
+ }
117
+ end
118
+ end
119
+
120
+ # $Id: lexer.rb 724 2005-10-22 22:27:20Z luke $