rhn_satellite 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. data/.rspec +1 -0
  2. data/Gemfile +14 -0
  3. data/Gemfile.lock +30 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +94 -0
  6. data/Rakefile +49 -0
  7. data/VERSION +1 -0
  8. data/lib/rhn_satellite.rb +25 -0
  9. data/lib/rhn_satellite/activation_key.rb +5 -0
  10. data/lib/rhn_satellite/api.rb +36 -0
  11. data/lib/rhn_satellite/channel.rb +5 -0
  12. data/lib/rhn_satellite/channel_access.rb +20 -0
  13. data/lib/rhn_satellite/channel_software.rb +20 -0
  14. data/lib/rhn_satellite/common/collection.rb +15 -0
  15. data/lib/rhn_satellite/common/debug.rb +35 -0
  16. data/lib/rhn_satellite/common/misc.rb +24 -0
  17. data/lib/rhn_satellite/connection/base.rb +25 -0
  18. data/lib/rhn_satellite/connection/handler.rb +116 -0
  19. data/lib/rhn_satellite/package.rb +15 -0
  20. data/lib/rhn_satellite/system.rb +83 -0
  21. data/lib/rhn_satellite/systemgroup.rb +34 -0
  22. data/rhn_satellite.gemspec +87 -0
  23. data/spec/spec.opts +6 -0
  24. data/spec/spec_helper.rb +12 -0
  25. data/spec/unit/rhn_satellite/activation_key_spec.rb +58 -0
  26. data/spec/unit/rhn_satellite/api_spec.rb +94 -0
  27. data/spec/unit/rhn_satellite/channel_access_spec.rb +61 -0
  28. data/spec/unit/rhn_satellite/channel_software_spec.rb +65 -0
  29. data/spec/unit/rhn_satellite/channel_spec.rb +58 -0
  30. data/spec/unit/rhn_satellite/common/debug_spec.rb +42 -0
  31. data/spec/unit/rhn_satellite/common/misc_spec.rb +33 -0
  32. data/spec/unit/rhn_satellite/connection/base_spec.rb +44 -0
  33. data/spec/unit/rhn_satellite/connection/handler_spec.rb +229 -0
  34. data/spec/unit/rhn_satellite/package_spec.rb +52 -0
  35. data/spec/unit/rhn_satellite/system_spec.rb +320 -0
  36. data/spec/unit/rhn_satellite/systemgroup_spec.rb +127 -0
  37. metadata +180 -0
@@ -0,0 +1,52 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../spec_helper'
3
+
4
+ describe RhnSatellite::Package do
5
+ before(:each) do
6
+ RhnSatellite::Package.reset
7
+ conn = Object.new
8
+ conn.stubs(:call)
9
+
10
+ XMLRPC::Client.stubs(:new2).returns(conn)
11
+
12
+ RhnSatellite::Package.username = 'user'
13
+ RhnSatellite::Package.password = 'pwd'
14
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("auth.login",'user','pwd').returns("token")
15
+ end
16
+
17
+ describe ".details" do
18
+ before(:each) do
19
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("auth.logout",'token')
20
+ end
21
+ it "should return details" do
22
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("package.getDetails",'token',1).returns({"name" => 'foo'})
23
+
24
+ RhnSatellite::Package.details(1).should eql({"name" => 'foo'})
25
+ end
26
+ it "should convert the id" do
27
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("package.getDetails",'token',1).returns({"name" => 'foo'})
28
+
29
+ RhnSatellite::Package.details('1').should eql({"name" => 'foo'})
30
+ end
31
+ end
32
+
33
+ describe ".exists?" do
34
+ it "should return true if we get a result" do
35
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("auth.logout",'token')
36
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("package.getDetails",'token',1).returns({"name" => 'foo'})
37
+
38
+ RhnSatellite::Package.exists?(1).should be_true
39
+ end
40
+ it "should return false if we don't get a result" do
41
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("auth.logout",'token')
42
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("package.getDetails",'token',1).returns(nil)
43
+
44
+ RhnSatellite::Package.exists?(1).should be_false
45
+ end
46
+ it "should return false if am exception is raised" do
47
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("package.getDetails",'token',1).raises(XMLRPC::FaultException.new(500,"blub"))
48
+
49
+ RhnSatellite::Package.exists?(1).should be_false
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,320 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../spec_helper'
3
+
4
+ describe RhnSatellite::System do
5
+ context "standard invocation" do
6
+ before(:each) do
7
+ RhnSatellite::Systemgroup.reset
8
+ conn = Object.new
9
+ conn.stubs(:call)
10
+
11
+ XMLRPC::Client.stubs(:new2).returns(conn)
12
+
13
+ RhnSatellite::System.username = 'user'
14
+ RhnSatellite::System.password = 'pwd'
15
+ RhnSatellite::Connection::Handler.any_instance.stubs(:make_call).with("auth.login",'user','pwd').returns("token")
16
+ RhnSatellite::Connection::Handler.any_instance.stubs(:make_call).with("auth.logout",'token')
17
+ end
18
+
19
+ describe ".all" do
20
+ it "logins and returns a bunch of systems" do
21
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listUserSystems',"token").returns(["123","234"])
22
+
23
+ RhnSatellite::System.all.should eql(["123","234"])
24
+ end
25
+
26
+ it "returns an empty array on an empty answer" do
27
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listUserSystems',"token").returns(nil)
28
+
29
+ RhnSatellite::System.all.should eql([])
30
+ end
31
+
32
+ it "iterates the items over the block" do
33
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listUserSystems',"token").returns(["123","234"])
34
+ RhnSatellite::System.all{|i| ["123","234"].include?(i).should be_true }.should eql(["123","234"])
35
+ end
36
+ end
37
+
38
+ describe ".get" do
39
+ context "with systems" do
40
+ before :each do
41
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listUserSystems',"token").returns([{'name' => "123"},{'name' => "234"}])
42
+ end
43
+ it "finds a system in all systems" do
44
+ RhnSatellite::System.get('123').should eql({'name' => '123'})
45
+ end
46
+
47
+ it "returns nil on an non-existant system" do
48
+ RhnSatellite::System.get('12333').should eql(nil)
49
+ end
50
+ end
51
+ context "without any systems" do
52
+ before :each do
53
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listUserSystems',"token").returns([])
54
+ end
55
+ it "returns nil" do
56
+ RhnSatellite::System.get('12333').should eql(nil)
57
+ end
58
+ end
59
+ end
60
+
61
+ describe ".relevant_erratas" do
62
+ it "logins and returns a bunch of activation keys" do
63
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getRelevantErrata',"token","1").returns(["errata1","errata2"])
64
+
65
+ RhnSatellite::System.relevant_erratas("1").should eql(["errata1","errata2"])
66
+ end
67
+
68
+ it "returns an empty array on an empty answer" do
69
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getRelevantErrata',"token","1").returns(nil)
70
+
71
+ RhnSatellite::System.relevant_erratas("1").should eql([])
72
+ end
73
+ end
74
+
75
+ describe ".latest_installable_packages" do
76
+ it "logins and returns a bunch of packages" do
77
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestInstallablePackages',"token","1").returns(["package1","package2"])
78
+
79
+ RhnSatellite::System.latest_installable_packages("1").should eql(["package1","package2"])
80
+ end
81
+
82
+ it "returns an empty array on an empty answer" do
83
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestInstallablePackages',"token","1").returns(nil)
84
+
85
+ RhnSatellite::System.latest_installable_packages("1").should eql([])
86
+ end
87
+ end
88
+
89
+ describe ".latest_available_packages" do
90
+ it "logins and returns a bunch of packages per system" do
91
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestAvailablePackages',"token",["1",'2']).returns([['sys1','sysname1',"package1","package2"], ['sys2','sysname2','package3']])
92
+
93
+ RhnSatellite::System.latest_available_packages(["1",'2']).should eql([['sys1','sysname1',"package1","package2"], ['sys2','sysname2','package3']])
94
+ end
95
+
96
+ it "returns an empty array on an empty answer" do
97
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestAvailablePackages',"token",["1",'2']).returns(nil)
98
+
99
+ RhnSatellite::System.latest_available_packages(["1",'2']).should eql([])
100
+ end
101
+ end
102
+
103
+ describe ".latest_upgradable_packages" do
104
+ it "logins and returns a bunch of packages" do
105
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestUpgradablePackages',"token","1").returns(["package1","package2"])
106
+
107
+ RhnSatellite::System.latest_upgradable_packages("1").should eql(["package1","package2"])
108
+ end
109
+
110
+ it "returns an empty array on an empty answer" do
111
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestUpgradablePackages',"token","1").returns(nil)
112
+
113
+ RhnSatellite::System.latest_upgradable_packages("1").should eql([])
114
+ end
115
+ end
116
+
117
+ describe ".uptodate?" do
118
+ it "returns true if no packages are upgradeable and no erratas are available" do
119
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getRelevantErrata',"token","1").returns(nil)
120
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestUpgradablePackages',"token","1").returns(nil)
121
+
122
+ RhnSatellite::System.uptodate?("1").should eql(true)
123
+ end
124
+
125
+ it "returns false if packages are upgradeable" do
126
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestUpgradablePackages',"token","1").returns(['package2'])
127
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getRelevantErrata',"token","1").never
128
+
129
+ RhnSatellite::System.uptodate?("1").should eql(false)
130
+ end
131
+
132
+ it "returns false if erratas are available" do
133
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getRelevantErrata',"token","1").returns(["errata2"])
134
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestUpgradablePackages',"token","1").returns(nil)
135
+
136
+ RhnSatellite::System.uptodate?("1").should eql(false)
137
+ end
138
+
139
+ it "returns false if erratas and packages are available" do
140
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getRelevantErrata',"token","1").never
141
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listLatestUpgradablePackages',"token","1").returns(['package2'])
142
+
143
+ RhnSatellite::System.uptodate?("1").should eql(false)
144
+ end
145
+ end
146
+
147
+ describe ".active_systems" do
148
+ it "logins and returns a bunch of activation keys" do
149
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listActiveSystems',"token").returns(["123","234"])
150
+
151
+ RhnSatellite::System.active_systems.should eql(["123","234"])
152
+ end
153
+
154
+ it "returns an empty array on an empty answer" do
155
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listActiveSystems',"token").returns(nil)
156
+
157
+ RhnSatellite::System.active_systems.should eql([])
158
+ end
159
+ end
160
+
161
+ describe ".active?" do
162
+ it "returns true if system is list of active systems" do
163
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listActiveSystems',"token").returns([{'name' => "123"},{'name' => "234"}])
164
+
165
+ RhnSatellite::System.active?("123").should eql(true)
166
+ end
167
+
168
+ it "returns false if not in list" do
169
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listActiveSystems',"token").returns([{'name' => "123"},{'name' => "234"}])
170
+
171
+ RhnSatellite::System.active?("1233").should eql(false)
172
+ end
173
+ it "returns false if list is empty" do
174
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listActiveSystems',"token").returns(nil)
175
+
176
+ RhnSatellite::System.active?("1233").should eql(false)
177
+ end
178
+ end
179
+
180
+ describe ".detail" do
181
+ it "logins and returns details of a system" do
182
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getDetails',"token",1).returns("foo")
183
+
184
+ RhnSatellite::System.details('1').should eql("foo")
185
+ end
186
+
187
+ it "returns nothing on an inexistant system" do
188
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getDetails',"token",1).returns(nil)
189
+
190
+ RhnSatellite::System.details("1").should eql(nil)
191
+ end
192
+ end
193
+
194
+ describe ".online?" do
195
+ it "should return true if the system is in the satellite and listed as active" do
196
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listUserSystems',"token").returns([{'name' => "123", 'id' => "1"},{'name' => "234", "id" => "2"}])
197
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getDetails',"token",1).returns({"osa_status" => 'online'})
198
+
199
+ RhnSatellite::System.online?('123').should be_true
200
+ end
201
+
202
+ it "should return false if the system is not active" do
203
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listUserSystems',"token").returns([{'name' => "123", 'id' => "1"},{'name' => "234", "id" => "2"}])
204
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getDetails',"token",1).returns({"osa_status" => 'offline'})
205
+
206
+ RhnSatellite::System.online?('123').should be_false
207
+ end
208
+
209
+ it "should return false if the system is not in the satellite" do
210
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listUserSystems',"token").returns([{'name' => "123", 'id' => "1"},{'name' => "234", "id" => "2"}])
211
+ RhnSatellite::System.online?('333123').should be_false
212
+ end
213
+ end
214
+
215
+ describe ".set_base_channel" do
216
+ it "should set the base channel" do
217
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.setBaseChannel','token',1,'channel').returns(1)
218
+
219
+ RhnSatellite::System.set_base_channel('1','channel').should eql(1)
220
+ end
221
+ end
222
+
223
+ describe ".subscribed_base_channel" do
224
+ it "should get the subscribed base channel" do
225
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.getSubscribedBaseChannel','token',1).returns({ 'label' => 'some_channel' })
226
+
227
+ RhnSatellite::System.subscribed_base_channel('1').should eql({ 'label' => 'some_channel' })
228
+ end
229
+ end
230
+ describe ".subscribable_base_channels" do
231
+ it "should get the subscribable base channels" do
232
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listSubscribableBaseChannels','token',1).returns([{ 'label' => 'some_channel' }])
233
+
234
+ RhnSatellite::System.subscribable_base_channels('1').should eql([{ 'label' => 'some_channel' }])
235
+ end
236
+ end
237
+
238
+ describe ".set_child_channels" do
239
+ it "should set the child channels" do
240
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.setChildChannels','token',1,['channel1','channel2']).returns(1)
241
+
242
+ RhnSatellite::System.set_child_channels('1',['channel1','channel2']).should eql(1)
243
+ end
244
+ end
245
+
246
+ describe ".subscribed_child_channels" do
247
+ it "lists all the subscribed child channels" do
248
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listSubscribedChildChannels','token',1).returns([{ 'label' => 'some_child_channel' }])
249
+
250
+ RhnSatellite::System.subscribed_child_channels('1').should eql([{ 'label' => 'some_child_channel' }])
251
+ end
252
+ end
253
+ describe ".subscribable_child_channels" do
254
+ it "should get the subscribable child channels" do
255
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.listSubscribableChildChannels','token',1).returns([{ 'label' => 'some_child_channel' }])
256
+
257
+ RhnSatellite::System.subscribable_child_channels('1').should eql([{ 'label' => 'some_child_channel' }])
258
+ end
259
+ end
260
+
261
+ describe ".schedule_apply_errata" do
262
+ it "should handle single ids correctly" do
263
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.scheduleApplyErrata','token',[1],[9]).returns(1)
264
+
265
+ RhnSatellite::System.schedule_apply_errata(1,9).should eql(1)
266
+ end
267
+ context "immeditalely" do
268
+ it "should schedule the list of errata immediately" do
269
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.scheduleApplyErrata','token',[1,2],[9,22]).returns(1)
270
+
271
+ RhnSatellite::System.schedule_apply_errata([1,2],[9,22]).should eql(1)
272
+ end
273
+ end
274
+ context "later" do
275
+ it "should schedule the list of errata to a later point" do
276
+ now = DateTime.now.to_s
277
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.scheduleApplyErrata','token',[1,2],[9,22],now).returns(1)
278
+
279
+ RhnSatellite::System.schedule_apply_errata([1,2],[9,22],now).should eql(1)
280
+ end
281
+ end
282
+
283
+ end
284
+ describe ".schedule_reboot" do
285
+ it "should schedule a reboot immediately by default" do
286
+ now = Time.now
287
+ Time.expects(:now).once.returns(now)
288
+ XMLRPC::DateTime.expects(:new).once.returns('foo')
289
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.scheduleReboot','token',1,'foo').returns(1)
290
+ RhnSatellite::System.schedule_reboot(1).should eql(1)
291
+ end
292
+
293
+ it "should schedule a reboot to a certain time" do
294
+ later = DateTime.now+600
295
+ XMLRPC::DateTime.expects(:new).once.returns('foo')
296
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.scheduleReboot','token',1,'foo').returns(1)
297
+ RhnSatellite::System.schedule_reboot(1,later).should eql(1)
298
+
299
+ end
300
+ end
301
+
302
+ describe ".schedule_package_install" do
303
+ it "should schedule a package install immediately by default" do
304
+ now = Time.now
305
+ Time.expects(:now).once.returns(now)
306
+ XMLRPC::DateTime.expects(:new).once.returns('foo')
307
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.schedulePackageInstall','token',1,[1,2],'foo').returns(1)
308
+ RhnSatellite::System.schedule_package_install(1,[1,2]).should eql(1)
309
+ end
310
+
311
+ it "should schedule a reboot to a certain time" do
312
+ later = DateTime.now+600
313
+ XMLRPC::DateTime.expects(:new).once.returns('foo')
314
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('system.schedulePackageInstall','token',1,[1,2],'foo').returns(1)
315
+ RhnSatellite::System.schedule_package_install(1,[1,2],later).should eql(1)
316
+
317
+ end
318
+ end
319
+ end
320
+ end
@@ -0,0 +1,127 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../spec_helper'
3
+
4
+ describe RhnSatellite::Systemgroup do
5
+ context "standard invocation" do
6
+ before(:each) do
7
+ RhnSatellite::Systemgroup.reset
8
+ conn = Object.new
9
+ conn.stubs(:call)
10
+
11
+ XMLRPC::Client.stubs(:new2).returns(conn)
12
+
13
+ RhnSatellite::Systemgroup.username = 'user'
14
+ RhnSatellite::Systemgroup.password = 'pwd'
15
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("auth.login",'user','pwd').returns("token")
16
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("auth.logout",'token')
17
+ end
18
+
19
+ describe ".all" do
20
+ it "logins and returns a bunch of systemgroups" do
21
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.listAllGroups',"token").returns(["123","234"])
22
+
23
+ RhnSatellite::Systemgroup.all.should eql(["123","234"])
24
+ end
25
+
26
+ it "returns an empty array on an empty answer" do
27
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.listAllGroups',"token").returns(nil)
28
+
29
+ RhnSatellite::Systemgroup.all.should eql([])
30
+ end
31
+
32
+ it "iterates the items over the block" do
33
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.listAllGroups',"token").returns(["123","234"])
34
+ RhnSatellite::Systemgroup.all{|i| ["123","234"].include?(i).should be_true }.should eql(["123","234"])
35
+ end
36
+ end
37
+ describe ".get" do
38
+ context "with systems" do
39
+ before :each do
40
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.listAllGroups',"token").returns([{'name' => "123"},{'name' => "234"}])
41
+ end
42
+ it "finds a system in all systems" do
43
+ RhnSatellite::Systemgroup.get('123').should eql({'name' => '123'})
44
+ end
45
+
46
+ it "returns nil on an non-existant system" do
47
+ RhnSatellite::Systemgroup.get('12333').should eql(nil)
48
+ end
49
+ end
50
+ context "without any systems" do
51
+ before :each do
52
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.listAllGroups',"token").returns([])
53
+ end
54
+ it "returns nil" do
55
+ RhnSatellite::Systemgroup.get('12333').should eql(nil)
56
+ end
57
+ end
58
+ end
59
+
60
+ describe ".delete" do
61
+ it "deletes on the api" do
62
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.delete',"token",'foogroup').returns(true)
63
+
64
+ RhnSatellite::Systemgroup.delete('foogroup').should eql(true)
65
+ end
66
+ end
67
+
68
+ describe ".create" do
69
+ it "creates on the api" do
70
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.create',"token",'foogroup','somedesc').returns("foogroup")
71
+
72
+ RhnSatellite::Systemgroup.create('foogroup','somedesc').should eql("foogroup")
73
+ end
74
+ end
75
+
76
+ describe ".remove_systems" do
77
+ it "removes systems from a group" do
78
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.addOrRemoveSystems',"token",'foogroup',['1','2'],false).returns(true)
79
+
80
+ RhnSatellite::Systemgroup.remove_systems('foogroup',['1','2']).should eql(true)
81
+ end
82
+ end
83
+
84
+ describe ".add_systems" do
85
+ it "adds systems to a group" do
86
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.addOrRemoveSystems',"token",'foogroup',['1','2'],true).returns(true)
87
+
88
+ RhnSatellite::Systemgroup.add_systems('foogroup',['1','2']).should eql(true)
89
+ end
90
+ end
91
+
92
+ [:systems, :systems_safe].each do |m|
93
+ describe ".#{m.to_s}" do
94
+ it "should list the systems" do
95
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.listSystems',"token",'foogroup').returns(["system2","system3"])
96
+
97
+ RhnSatellite::Systemgroup.send(m,'foogroup').should eql(['system2','system3'])
98
+ end
99
+ end
100
+ end
101
+
102
+ end
103
+ context "special invocation" do
104
+ before(:each) do
105
+ RhnSatellite::Systemgroup.reset
106
+ conn = Object.new
107
+ conn.stubs(:call)
108
+
109
+ XMLRPC::Client.stubs(:new2).returns(conn)
110
+
111
+ RhnSatellite::Systemgroup.username = 'user'
112
+ RhnSatellite::Systemgroup.password = 'pwd'
113
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with("auth.login",'user','pwd').returns("token")
114
+ RhnSatellite::Connection::Handler.any_instance.expects(:make_call).with('systemgroup.listSystems',"token",'emptygroup').raises XMLRPC::FaultException.new("500","foo")
115
+ end
116
+ describe ".systems" do
117
+ it "raises a XMLRPC::FaultException on an empty group" do
118
+ lambda { RhnSatellite::Systemgroup.systems('emptygroup') }.should raise_error(XMLRPC::FaultException,'foo')
119
+ end
120
+ end
121
+ describe ".systems_safe" do
122
+ it "returns an empty array on an empty group" do
123
+ RhnSatellite::Systemgroup.systems_safe('emptygroup').should eql([])
124
+ end
125
+ end
126
+ end
127
+ end