puppet 2.7.6 → 2.7.8
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.
- data/CHANGELOG +168 -0
- data/conf/auth.conf +5 -4
- data/conf/redhat/puppet.spec +16 -1
- data/conf/solaris/pkginfo +2 -2
- data/conf/suse/puppet.spec +9 -3
- data/ext/upload_facts.rb +120 -0
- data/install.rb +11 -16
- data/lib/puppet.rb +1 -1
- data/lib/puppet/application/agent.rb +0 -3
- data/lib/puppet/application/apply.rb +0 -3
- data/lib/puppet/application/queue.rb +21 -1
- data/lib/puppet/defaults.rb +6 -4
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/feature/base.rb +2 -1
- data/lib/puppet/file_bucket/dipper.rb +3 -2
- data/lib/puppet/file_serving/content.rb +1 -1
- data/lib/puppet/file_serving/metadata.rb +5 -2
- data/lib/puppet/indirector/facts/inventory_service.rb +20 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +3 -2
- data/lib/puppet/indirector/report/processor.rb +1 -1
- data/lib/puppet/network/handler/filebucket.rb +2 -0
- data/lib/puppet/network/handler/fileserver.rb +1 -1
- data/lib/puppet/network/handler/master.rb +1 -0
- data/lib/puppet/network/handler/report.rb +2 -0
- data/lib/puppet/network/handler/runner.rb +1 -0
- data/lib/puppet/network/handler/status.rb +2 -0
- data/lib/puppet/network/http/mongrel/rest.rb +8 -1
- data/lib/puppet/network/http_server.rb +3 -0
- data/lib/puppet/network/http_server/mongrel.rb +129 -0
- data/lib/puppet/network/rest_authconfig.rb +12 -4
- data/lib/puppet/parameter.rb +18 -0
- data/lib/puppet/parser/compiler.rb +1 -1
- data/lib/puppet/parser/grammar.ra +1 -1
- data/lib/puppet/parser/parser.rb +360 -350
- data/lib/puppet/property.rb +3 -3
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +6 -7
- data/lib/puppet/provider/file/windows.rb +9 -2
- data/lib/puppet/provider/group/aix.rb +8 -8
- data/lib/puppet/provider/group/groupadd.rb +1 -3
- data/lib/puppet/provider/group/ldap.rb +8 -10
- data/lib/puppet/provider/group/windows_adsi.rb +8 -2
- data/lib/puppet/provider/package/aix.rb +1 -1
- data/lib/puppet/provider/package/macports.rb +3 -3
- data/lib/puppet/provider/package/msi.rb +12 -5
- data/lib/puppet/provider/package/nim.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -3
- data/lib/puppet/provider/package/ports.rb +1 -1
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +560 -0
- data/lib/puppet/provider/service/base.rb +2 -2
- data/lib/puppet/provider/service/bsd.rb +4 -3
- data/lib/puppet/provider/service/daemontools.rb +25 -25
- data/lib/puppet/provider/service/debian.rb +6 -4
- data/lib/puppet/provider/service/freebsd.rb +1 -1
- data/lib/puppet/provider/service/gentoo.rb +4 -3
- data/lib/puppet/provider/service/init.rb +3 -8
- data/lib/puppet/provider/service/launchd.rb +129 -96
- data/lib/puppet/provider/service/redhat.rb +2 -3
- data/lib/puppet/provider/service/runit.rb +20 -20
- data/lib/puppet/provider/service/smf.rb +8 -7
- data/lib/puppet/provider/service/src.rb +5 -6
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/service/upstart.rb +3 -5
- data/lib/puppet/provider/service/windows.rb +7 -7
- data/lib/puppet/provider/sshkey/parsed.rb +2 -3
- data/lib/puppet/provider/user/aix.rb +21 -21
- data/lib/puppet/provider/user/hpux.rb +3 -1
- data/lib/puppet/provider/user/ldap.rb +7 -7
- data/lib/puppet/provider/user/user_role_add.rb +10 -6
- data/lib/puppet/provider/user/useradd.rb +3 -1
- data/lib/puppet/provider/user/windows_adsi.rb +4 -3
- data/lib/puppet/rb_tree_map.rb +388 -0
- data/lib/puppet/reference/configuration.rb +7 -7
- data/lib/puppet/reference/indirection.rb +5 -6
- data/lib/puppet/reference/metaparameter.rb +3 -1
- data/lib/puppet/reference/network.rb +8 -8
- data/lib/puppet/reference/providers.rb +17 -21
- data/lib/puppet/reference/type.rb +12 -9
- data/lib/puppet/resource.rb +2 -5
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/ssl/certificate_request.rb +70 -0
- data/lib/puppet/ssl/host.rb +6 -0
- data/lib/puppet/transaction.rb +158 -55
- data/lib/puppet/transaction/event_manager.rb +1 -1
- data/lib/puppet/type.rb +60 -30
- data/lib/puppet/type/augeas.rb +83 -49
- data/lib/puppet/type/computer.rb +1 -1
- data/lib/puppet/type/cron.rb +11 -11
- data/lib/puppet/type/exec.rb +28 -21
- data/lib/puppet/type/file.rb +17 -7
- data/lib/puppet/type/file/content.rb +2 -2
- data/lib/puppet/type/file/ensure.rb +15 -12
- data/lib/puppet/type/file/mode.rb +30 -5
- data/lib/puppet/type/file/source.rb +11 -10
- data/lib/puppet/type/file/target.rb +2 -2
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +4 -5
- data/lib/puppet/type/host.rb +1 -1
- data/lib/puppet/type/interface.rb +13 -10
- data/lib/puppet/type/k5login.rb +6 -6
- data/lib/puppet/type/macauthorization.rb +37 -36
- data/lib/puppet/type/maillist.rb +2 -2
- data/lib/puppet/type/mcx.rb +6 -6
- data/lib/puppet/type/mount.rb +3 -2
- data/lib/puppet/type/notify.rb +1 -1
- data/lib/puppet/type/package.rb +24 -23
- data/lib/puppet/type/router.rb +4 -1
- data/lib/puppet/type/schedule.rb +52 -44
- data/lib/puppet/type/scheduled_task.rb +222 -0
- data/lib/puppet/type/selmodule.rb +10 -6
- data/lib/puppet/type/service.rb +11 -11
- data/lib/puppet/type/ssh_authorized_key.rb +2 -5
- data/lib/puppet/type/sshkey.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/tidy.rb +10 -8
- data/lib/puppet/type/user.rb +61 -53
- data/lib/puppet/type/vlan.rb +4 -4
- data/lib/puppet/type/whit.rb +6 -2
- data/lib/puppet/type/yumrepo.rb +33 -31
- data/lib/puppet/type/zfs.rb +34 -32
- data/lib/puppet/type/zone.rb +21 -19
- data/lib/puppet/type/zpool.rb +3 -3
- data/lib/puppet/util.rb +24 -6
- data/lib/puppet/util/adsi.rb +12 -7
- data/lib/puppet/util/checksums.rb +1 -1
- data/lib/puppet/util/diff.rb +1 -1
- data/lib/puppet/util/nagios_maker.rb +2 -2
- data/lib/puppet/util/reference.rb +16 -17
- data/lib/puppet/util/settings/file_setting.rb +14 -2
- data/lib/puppet/util/windows/security.rb +96 -32
- data/spec/integration/file_serving/terminus_helper_spec.rb +1 -1
- data/spec/integration/indirector/direct_file_server_spec.rb +9 -15
- data/spec/integration/indirector/file_content/file_server_spec.rb +1 -1
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -1
- data/spec/integration/provider/package_spec.rb +4 -0
- data/spec/integration/provider/service/init_spec.rb +8 -2
- data/spec/integration/reference/providers_spec.rb +1 -1
- data/spec/integration/ssl/certificate_request_spec.rb +1 -2
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -2
- data/spec/integration/ssl/host_spec.rb +1 -2
- data/spec/integration/transaction_spec.rb +25 -17
- data/spec/integration/type/exec_spec.rb +77 -0
- data/spec/integration/type/file_spec.rb +322 -2
- data/spec/integration/util/windows/security_spec.rb +393 -230
- data/spec/integration/util_spec.rb +16 -0
- data/spec/lib/puppet_spec/files.rb +3 -7
- data/spec/unit/application/apply_spec.rb +0 -9
- data/spec/unit/application/inspect_spec.rb +1 -0
- data/spec/unit/configurer/downloader_spec.rb +3 -3
- data/spec/unit/face/certificate_spec.rb +6 -2
- data/spec/unit/file_bucket/dipper_spec.rb +67 -10
- data/spec/unit/file_bucket/file_spec.rb +22 -28
- data/spec/unit/file_serving/content_spec.rb +1 -1
- data/spec/unit/file_serving/metadata_spec.rb +30 -3
- data/spec/unit/indirector/facts/inventory_service_spec.rb +22 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +21 -24
- data/spec/unit/indirector/node/store_configs_spec.rb +1 -0
- data/spec/unit/indirector/resource/ral_spec.rb +1 -1
- data/spec/unit/indirector/resource_type/parser_spec.rb +2 -2
- data/spec/unit/indirector/rest_spec.rb +1 -1
- data/spec/unit/network/handler/ca_spec.rb +1 -1
- data/spec/unit/network/http/mongrel/rest_spec.rb +54 -25
- data/spec/unit/parameter_spec.rb +36 -0
- data/spec/unit/parser/parser_spec.rb +4 -0
- data/spec/unit/property_spec.rb +2 -2
- data/spec/unit/provider/exec/windows_spec.rb +2 -8
- data/spec/unit/provider/file/posix_spec.rb +6 -0
- data/spec/unit/provider/file/windows_spec.rb +18 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +22 -6
- data/spec/unit/provider/mount/parsed_spec.rb +1 -1
- data/spec/unit/provider/package/msi_spec.rb +2 -2
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +1571 -0
- data/spec/unit/provider/service/launchd_spec.rb +143 -130
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -0
- data/spec/unit/provider/user/user_role_add_spec.rb +39 -9
- data/spec/unit/provider/user/useradd_spec.rb +1 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +8 -1
- data/spec/unit/rb_tree_map_spec.rb +572 -0
- data/spec/unit/resource/catalog_spec.rb +1 -1
- data/spec/unit/simple_graph_spec.rb +9 -9
- data/spec/unit/ssl/host_spec.rb +60 -12
- data/spec/unit/transaction/report_spec.rb +3 -3
- data/spec/unit/transaction_spec.rb +394 -11
- data/spec/unit/type/exec_spec.rb +35 -15
- data/spec/unit/type/file/content_spec.rb +11 -10
- data/spec/unit/type/file/mode_spec.rb +73 -19
- data/spec/unit/type/file/source_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +15 -0
- data/spec/unit/type/group_spec.rb +1 -1
- data/spec/unit/type/mount_spec.rb +5 -5
- data/spec/unit/type/resources_spec.rb +3 -3
- data/spec/unit/type/scheduled_task_spec.rb +102 -0
- data/spec/unit/type/ssh_authorized_key_spec.rb +2 -3
- data/spec/unit/type/user_spec.rb +2 -1
- data/spec/unit/type_spec.rb +48 -4
- data/spec/unit/util/adsi_spec.rb +18 -7
- data/spec/unit/util/checksums_spec.rb +20 -2
- data/spec/unit/util/execution_stub_spec.rb +10 -5
- data/spec/unit/util/logging_spec.rb +6 -6
- data/spec/unit/util/rdoc/parser_spec.rb +1 -1
- data/spec/unit/util/reference_spec.rb +29 -0
- data/spec/unit/util/settings/file_setting_spec.rb +8 -2
- data/spec/unit/util_spec.rb +115 -0
- data/test/other/transactions.rb +5 -11
- data/test/ral/type/exec.rb +1 -1
- metadata +24 -11
@@ -0,0 +1,572 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
require 'puppet/rb_tree_map'
|
6
|
+
|
7
|
+
describe Puppet::RbTreeMap do
|
8
|
+
describe "#push" do
|
9
|
+
it "should allow a new element to be added" do
|
10
|
+
subject[5] = 'foo'
|
11
|
+
subject.size.should == 1
|
12
|
+
|
13
|
+
subject[5].should == 'foo'
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should replace the old value if the key is in tree already" do
|
17
|
+
subject[0] = 10
|
18
|
+
subject[0] = 20
|
19
|
+
|
20
|
+
subject[0].should == 20
|
21
|
+
subject.size.should == 1
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should be able to add a large number of elements" do
|
25
|
+
(1..1000).each {|i| subject[i] = i.to_s}
|
26
|
+
|
27
|
+
subject.size.should == 1000
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should create a root node if the tree was empty" do
|
31
|
+
subject.instance_variable_get(:@root).should be_nil
|
32
|
+
|
33
|
+
subject[5] = 'foo'
|
34
|
+
|
35
|
+
subject.instance_variable_get(:@root).should be_a(Puppet::RbTreeMap::Node)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#size" do
|
40
|
+
it "should be 0 for en empty tree" do
|
41
|
+
subject.size.should == 0
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should correctly report the size for a non-empty tree" do
|
45
|
+
(1..10).each {|i| subject[i] = i.to_s}
|
46
|
+
|
47
|
+
subject.size.should == 10
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#has_key?" do
|
52
|
+
it "should be true if the tree contains the key" do
|
53
|
+
subject[1] = 2
|
54
|
+
|
55
|
+
subject.should be_has_key(1)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should be true if the tree contains the key and its value is nil" do
|
59
|
+
subject[0] = nil
|
60
|
+
|
61
|
+
subject.should be_has_key(0)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be false if the tree does not contain the key" do
|
65
|
+
subject[1] = 2
|
66
|
+
|
67
|
+
subject.should_not be_has_key(2)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should be false if the tree is empty" do
|
71
|
+
subject.should_not be_has_key(5)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#get" do
|
76
|
+
it "should return the value at the key" do
|
77
|
+
subject[1] = 2
|
78
|
+
subject[3] = 4
|
79
|
+
|
80
|
+
subject.get(1).should == 2
|
81
|
+
subject.get(3).should == 4
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return nil if the tree is empty" do
|
85
|
+
subject[1].should be_nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should return nil if the key is not in the tree" do
|
89
|
+
subject[1] = 2
|
90
|
+
|
91
|
+
subject[3].should be_nil
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should return nil if the value at the key is nil" do
|
95
|
+
subject[1] = nil
|
96
|
+
|
97
|
+
subject[1].should be_nil
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "#min_key" do
|
102
|
+
it "should return the smallest key in the tree" do
|
103
|
+
[4,8,12,3,6,2,-4,7].each do |i|
|
104
|
+
subject[i] = i.to_s
|
105
|
+
end
|
106
|
+
|
107
|
+
subject.min_key.should == -4
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should return nil if the tree is empty" do
|
111
|
+
subject.min_key.should be_nil
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "#max_key" do
|
116
|
+
it "should return the largest key in the tree" do
|
117
|
+
[4,8,12,3,6,2,-4,7].each do |i|
|
118
|
+
subject[i] = i.to_s
|
119
|
+
end
|
120
|
+
|
121
|
+
subject.max_key.should == 12
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should return nil if the tree is empty" do
|
125
|
+
subject.max_key.should be_nil
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "#delete" do
|
130
|
+
before :each do
|
131
|
+
subject[1] = '1'
|
132
|
+
subject[0] = '0'
|
133
|
+
subject[2] = '2'
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should return the value at the key deleted" do
|
137
|
+
subject.delete(0).should == '0'
|
138
|
+
subject.delete(1).should == '1'
|
139
|
+
subject.delete(2).should == '2'
|
140
|
+
subject.size.should == 0
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should be able to delete the last node" do
|
144
|
+
tree = described_class.new
|
145
|
+
tree[1] = '1'
|
146
|
+
|
147
|
+
tree.delete(1).should == '1'
|
148
|
+
tree.should be_empty
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should be able to delete the root node" do
|
152
|
+
subject.delete(1).should == '1'
|
153
|
+
|
154
|
+
subject.size.should == 2
|
155
|
+
|
156
|
+
subject.to_hash.should == {
|
157
|
+
:node => {
|
158
|
+
:key => 2,
|
159
|
+
:value => '2',
|
160
|
+
:color => :black,
|
161
|
+
},
|
162
|
+
:left => {
|
163
|
+
:node => {
|
164
|
+
:key => 0,
|
165
|
+
:value => '0',
|
166
|
+
:color => :red,
|
167
|
+
}
|
168
|
+
}
|
169
|
+
}
|
170
|
+
end
|
171
|
+
|
172
|
+
it "should be able to delete the left child" do
|
173
|
+
subject.delete(0).should == '0'
|
174
|
+
|
175
|
+
subject.size.should == 2
|
176
|
+
|
177
|
+
subject.to_hash.should == {
|
178
|
+
:node => {
|
179
|
+
:key => 2,
|
180
|
+
:value => '2',
|
181
|
+
:color => :black,
|
182
|
+
},
|
183
|
+
:left => {
|
184
|
+
:node => {
|
185
|
+
:key => 1,
|
186
|
+
:value => '1',
|
187
|
+
:color => :red,
|
188
|
+
}
|
189
|
+
}
|
190
|
+
}
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should be able to delete the right child" do
|
194
|
+
subject.delete(2).should == '2'
|
195
|
+
|
196
|
+
subject.size.should == 2
|
197
|
+
|
198
|
+
subject.to_hash.should == {
|
199
|
+
:node => {
|
200
|
+
:key => 1,
|
201
|
+
:value => '1',
|
202
|
+
:color => :black,
|
203
|
+
},
|
204
|
+
:left => {
|
205
|
+
:node => {
|
206
|
+
:key => 0,
|
207
|
+
:value => '0',
|
208
|
+
:color => :red,
|
209
|
+
}
|
210
|
+
}
|
211
|
+
}
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should be able to delete the left child if it is a subtree" do
|
215
|
+
(3..6).each {|i| subject[i] = i.to_s}
|
216
|
+
|
217
|
+
subject.delete(1).should == '1'
|
218
|
+
|
219
|
+
subject.to_hash.should == {
|
220
|
+
:node => {
|
221
|
+
:key => 5,
|
222
|
+
:value => '5',
|
223
|
+
:color => :black,
|
224
|
+
},
|
225
|
+
:left => {
|
226
|
+
:node => {
|
227
|
+
:key => 3,
|
228
|
+
:value => '3',
|
229
|
+
:color => :red,
|
230
|
+
},
|
231
|
+
:left => {
|
232
|
+
:node => {
|
233
|
+
:key => 2,
|
234
|
+
:value => '2',
|
235
|
+
:color => :black,
|
236
|
+
},
|
237
|
+
:left => {
|
238
|
+
:node => {
|
239
|
+
:key => 0,
|
240
|
+
:value => '0',
|
241
|
+
:color => :red,
|
242
|
+
},
|
243
|
+
},
|
244
|
+
},
|
245
|
+
:right => {
|
246
|
+
:node => {
|
247
|
+
:key => 4,
|
248
|
+
:value => '4',
|
249
|
+
:color => :black,
|
250
|
+
},
|
251
|
+
},
|
252
|
+
},
|
253
|
+
:right => {
|
254
|
+
:node => {
|
255
|
+
:key => 6,
|
256
|
+
:value => '6',
|
257
|
+
:color => :black,
|
258
|
+
},
|
259
|
+
},
|
260
|
+
}
|
261
|
+
end
|
262
|
+
|
263
|
+
it "should be able to delete the right child if it is a subtree" do
|
264
|
+
(3..6).each {|i| subject[i] = i.to_s}
|
265
|
+
|
266
|
+
subject.delete(5).should == '5'
|
267
|
+
|
268
|
+
subject.to_hash.should == {
|
269
|
+
:node => {
|
270
|
+
:key => 3,
|
271
|
+
:value => '3',
|
272
|
+
:color => :black,
|
273
|
+
},
|
274
|
+
:left => {
|
275
|
+
:node => {
|
276
|
+
:key => 1,
|
277
|
+
:value => '1',
|
278
|
+
:color => :red,
|
279
|
+
},
|
280
|
+
:left => {
|
281
|
+
:node => {
|
282
|
+
:key => 0,
|
283
|
+
:value => '0',
|
284
|
+
:color => :black,
|
285
|
+
},
|
286
|
+
},
|
287
|
+
:right => {
|
288
|
+
:node => {
|
289
|
+
:key => 2,
|
290
|
+
:value => '2',
|
291
|
+
:color => :black,
|
292
|
+
},
|
293
|
+
},
|
294
|
+
},
|
295
|
+
:right => {
|
296
|
+
:node => {
|
297
|
+
:key => 6,
|
298
|
+
:value => '6',
|
299
|
+
:color => :black,
|
300
|
+
},
|
301
|
+
:left => {
|
302
|
+
:node => {
|
303
|
+
:key => 4,
|
304
|
+
:value => '4',
|
305
|
+
:color => :red,
|
306
|
+
},
|
307
|
+
},
|
308
|
+
},
|
309
|
+
}
|
310
|
+
end
|
311
|
+
|
312
|
+
it "should return nil if the tree is empty" do
|
313
|
+
tree = described_class.new
|
314
|
+
|
315
|
+
tree.delete(14).should be_nil
|
316
|
+
|
317
|
+
tree.size.should == 0
|
318
|
+
end
|
319
|
+
|
320
|
+
it "should return nil if the key is not in the tree" do
|
321
|
+
(0..4).each {|i| subject[i] = i.to_s}
|
322
|
+
|
323
|
+
subject.delete(2.5).should be_nil
|
324
|
+
subject.size.should == 5
|
325
|
+
end
|
326
|
+
|
327
|
+
it "should return nil if the key is larger than the maximum key" do
|
328
|
+
subject.delete(100).should be_nil
|
329
|
+
subject.size.should == 3
|
330
|
+
end
|
331
|
+
|
332
|
+
it "should return nil if the key is smaller than the minimum key" do
|
333
|
+
subject.delete(-1).should be_nil
|
334
|
+
subject.size.should == 3
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
describe "#empty?" do
|
339
|
+
it "should return true if the tree is empty" do
|
340
|
+
subject.should be_empty
|
341
|
+
end
|
342
|
+
|
343
|
+
it "should return false if the tree is not empty" do
|
344
|
+
subject[5] = 10
|
345
|
+
|
346
|
+
subject.should_not be_empty
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
describe "#delete_min" do
|
351
|
+
it "should delete the smallest element of the tree" do
|
352
|
+
(1..15).each {|i| subject[i] = i.to_s}
|
353
|
+
|
354
|
+
subject.delete_min.should == '1'
|
355
|
+
subject.size.should == 14
|
356
|
+
end
|
357
|
+
|
358
|
+
it "should return nil if the tree is empty" do
|
359
|
+
subject.delete_min.should be_nil
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
describe "#delete_max" do
|
364
|
+
it "should delete the largest element of the tree" do
|
365
|
+
(1..15).each {|i| subject[i] = i.to_s}
|
366
|
+
|
367
|
+
subject.delete_max.should == '15'
|
368
|
+
subject.size.should == 14
|
369
|
+
end
|
370
|
+
|
371
|
+
it "should return nil if the tree is empty" do
|
372
|
+
subject.delete_max.should be_nil
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
describe "#each" do
|
377
|
+
it "should yield each pair in the tree in order if a block is provided" do
|
378
|
+
# Insert in reverse to demonstrate they aren't being yielded in insertion order
|
379
|
+
(1..5).to_a.reverse.each {|i| subject[i] = i.to_s}
|
380
|
+
|
381
|
+
nodes = []
|
382
|
+
subject.each do |key,value|
|
383
|
+
nodes << [key,value]
|
384
|
+
end
|
385
|
+
|
386
|
+
nodes.should == (1..5).map {|i| [i, i.to_s]}
|
387
|
+
end
|
388
|
+
|
389
|
+
it "should do nothing if the tree is empty" do
|
390
|
+
subject.each do |key,value|
|
391
|
+
raise "each on an empty tree incorrectly yielded #{key}, #{value}"
|
392
|
+
end
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
describe "#isred" do
|
397
|
+
it "should return true if the node is red" do
|
398
|
+
node = Puppet::RbTreeMap::Node.new(1,2)
|
399
|
+
node.color = :red
|
400
|
+
|
401
|
+
subject.send(:isred, node).should == true
|
402
|
+
end
|
403
|
+
|
404
|
+
it "should return false if the node is black" do
|
405
|
+
node = Puppet::RbTreeMap::Node.new(1,2)
|
406
|
+
node.color = :black
|
407
|
+
|
408
|
+
subject.send(:isred, node).should == false
|
409
|
+
end
|
410
|
+
|
411
|
+
it "should return false if the node is nil" do
|
412
|
+
subject.send(:isred, nil).should == false
|
413
|
+
end
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
describe Puppet::RbTreeMap::Node do
|
418
|
+
let(:tree) { Puppet::RbTreeMap.new }
|
419
|
+
let(:subject) { tree.instance_variable_get(:@root) }
|
420
|
+
|
421
|
+
before :each do
|
422
|
+
(1..3).each {|i| tree[i] = i.to_s}
|
423
|
+
end
|
424
|
+
|
425
|
+
describe "#red?" do
|
426
|
+
it "should return true if the node is red" do
|
427
|
+
subject.color = :red
|
428
|
+
|
429
|
+
subject.should be_red
|
430
|
+
end
|
431
|
+
|
432
|
+
it "should return false if the node is black" do
|
433
|
+
subject.color = :black
|
434
|
+
|
435
|
+
subject.should_not be_red
|
436
|
+
end
|
437
|
+
end
|
438
|
+
|
439
|
+
describe "#colorflip" do
|
440
|
+
it "should switch the color of the node and its children" do
|
441
|
+
subject.color.should == :black
|
442
|
+
subject.left.color.should == :black
|
443
|
+
subject.right.color.should == :black
|
444
|
+
|
445
|
+
subject.colorflip
|
446
|
+
|
447
|
+
subject.color.should == :red
|
448
|
+
subject.left.color.should == :red
|
449
|
+
subject.right.color.should == :red
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
describe "#rotate_left" do
|
454
|
+
it "should rotate the tree once to the left" do
|
455
|
+
(4..7).each {|i| tree[i] = i.to_s}
|
456
|
+
|
457
|
+
root = tree.instance_variable_get(:@root)
|
458
|
+
|
459
|
+
root.rotate_left
|
460
|
+
|
461
|
+
tree.to_hash.should == {
|
462
|
+
:node => {
|
463
|
+
:key => 6,
|
464
|
+
:value => '6',
|
465
|
+
:color => :black,
|
466
|
+
},
|
467
|
+
:left => {
|
468
|
+
:node => {
|
469
|
+
:key => 4,
|
470
|
+
:value => '4',
|
471
|
+
:color => :red,
|
472
|
+
},
|
473
|
+
:left => {
|
474
|
+
:node => {
|
475
|
+
:key => 2,
|
476
|
+
:value => '2',
|
477
|
+
:color => :black,
|
478
|
+
},
|
479
|
+
:left => {
|
480
|
+
:node => {
|
481
|
+
:key => 1,
|
482
|
+
:value => '1',
|
483
|
+
:color => :black,
|
484
|
+
},
|
485
|
+
},
|
486
|
+
:right => {
|
487
|
+
:node => {
|
488
|
+
:key => 3,
|
489
|
+
:value => '3',
|
490
|
+
:color => :black,
|
491
|
+
},
|
492
|
+
},
|
493
|
+
},
|
494
|
+
:right => {
|
495
|
+
:node => {
|
496
|
+
:key => 5,
|
497
|
+
:value => '5',
|
498
|
+
:color => :black,
|
499
|
+
},
|
500
|
+
},
|
501
|
+
},
|
502
|
+
:right => {
|
503
|
+
:node => {
|
504
|
+
:key => 7,
|
505
|
+
:value => '7',
|
506
|
+
:color => :black,
|
507
|
+
},
|
508
|
+
},
|
509
|
+
}
|
510
|
+
end
|
511
|
+
end
|
512
|
+
|
513
|
+
describe "#rotate_right" do
|
514
|
+
it "should rotate the tree once to the right" do
|
515
|
+
(4..7).each {|i| tree[i] = i.to_s}
|
516
|
+
|
517
|
+
root = tree.instance_variable_get(:@root)
|
518
|
+
|
519
|
+
root.rotate_right
|
520
|
+
|
521
|
+
tree.to_hash.should == {
|
522
|
+
:node => {
|
523
|
+
:key => 2,
|
524
|
+
:value => '2',
|
525
|
+
:color => :black,
|
526
|
+
},
|
527
|
+
:left => {
|
528
|
+
:node => {
|
529
|
+
:key => 1,
|
530
|
+
:value => '1',
|
531
|
+
:color => :black,
|
532
|
+
},
|
533
|
+
},
|
534
|
+
:right => {
|
535
|
+
:node => {
|
536
|
+
:key => 4,
|
537
|
+
:value => '4',
|
538
|
+
:color => :red,
|
539
|
+
},
|
540
|
+
:left => {
|
541
|
+
:node => {
|
542
|
+
:key => 3,
|
543
|
+
:value => '3',
|
544
|
+
:color => :black,
|
545
|
+
},
|
546
|
+
},
|
547
|
+
:right => {
|
548
|
+
:node => {
|
549
|
+
:key => 6,
|
550
|
+
:value => '6',
|
551
|
+
:color => :black,
|
552
|
+
},
|
553
|
+
:left => {
|
554
|
+
:node => {
|
555
|
+
:key => 5,
|
556
|
+
:value => '5',
|
557
|
+
:color => :black,
|
558
|
+
},
|
559
|
+
},
|
560
|
+
:right => {
|
561
|
+
:node => {
|
562
|
+
:key => 7,
|
563
|
+
:value => '7',
|
564
|
+
:color => :black,
|
565
|
+
},
|
566
|
+
},
|
567
|
+
},
|
568
|
+
},
|
569
|
+
}
|
570
|
+
end
|
571
|
+
end
|
572
|
+
end
|