Revision 218f4c3d test/ganeti.config_unittest.py
b/test/ganeti.config_unittest.py | ||
---|---|---|
1 | 1 |
#!/usr/bin/python |
2 | 2 |
# |
3 | 3 |
|
4 |
# Copyright (C) 2006, 2007, 2010 Google Inc. |
|
4 |
# Copyright (C) 2006, 2007, 2010, 2011 Google Inc.
|
|
5 | 5 |
# |
6 | 6 |
# This program is free software; you can redistribute it and/or modify |
7 | 7 |
# it under the terms of the GNU General Public License as published by |
... | ... | |
28 | 28 |
import tempfile |
29 | 29 |
import os.path |
30 | 30 |
import socket |
31 |
import operator |
|
32 |
import itertools |
|
31 | 33 |
|
32 | 34 |
from ganeti import bootstrap |
33 | 35 |
from ganeti import config |
... | ... | |
36 | 38 |
from ganeti import objects |
37 | 39 |
from ganeti import utils |
38 | 40 |
from ganeti import netutils |
41 |
from ganeti import compat |
|
39 | 42 |
|
40 | 43 |
from ganeti.config import TemporaryReservationManager |
41 | 44 |
|
... | ... | |
239 | 242 |
cfg.AddNodeGroup(group, "my-job", check_uuid=False) # Does not raise. |
240 | 243 |
self.assertEqual(uuid, group.uuid) |
241 | 244 |
|
245 |
def testAssignGroupNodes(self): |
|
246 |
me = netutils.Hostname() |
|
247 |
cfg = self._get_object() |
|
248 |
|
|
249 |
# Create two groups |
|
250 |
grp1 = objects.NodeGroup(name="grp1", members=[], |
|
251 |
uuid="2f2fadf7-2a70-4a23-9ab5-2568c252032c") |
|
252 |
grp1_serial = 1 |
|
253 |
cfg.AddNodeGroup(grp1, "job") |
|
254 |
|
|
255 |
grp2 = objects.NodeGroup(name="grp2", members=[], |
|
256 |
uuid="798d0de3-680f-4a0e-b29a-0f54f693b3f1") |
|
257 |
grp2_serial = 1 |
|
258 |
cfg.AddNodeGroup(grp2, "job") |
|
259 |
self.assertEqual(set(map(operator.attrgetter("name"), |
|
260 |
cfg.GetAllNodeGroupsInfo().values())), |
|
261 |
set(["grp1", "grp2", constants.INITIAL_NODE_GROUP_NAME])) |
|
262 |
|
|
263 |
# No-op |
|
264 |
cluster_serial = cfg.GetClusterInfo().serial_no |
|
265 |
cfg.AssignGroupNodes([]) |
|
266 |
cluster_serial += 1 |
|
267 |
|
|
268 |
# Create two nodes |
|
269 |
node1 = objects.Node(name="node1", group=grp1.uuid, ndparams={}) |
|
270 |
node1_serial = 1 |
|
271 |
node2 = objects.Node(name="node2", group=grp2.uuid, ndparams={}) |
|
272 |
node2_serial = 1 |
|
273 |
cfg.AddNode(node1, "job") |
|
274 |
cfg.AddNode(node2, "job") |
|
275 |
cluster_serial += 2 |
|
276 |
self.assertEqual(set(cfg.GetNodeList()), set(["node1", "node2", me.name])) |
|
277 |
|
|
278 |
def _VerifySerials(): |
|
279 |
self.assertEqual(cfg.GetClusterInfo().serial_no, cluster_serial) |
|
280 |
self.assertEqual(node1.serial_no, node1_serial) |
|
281 |
self.assertEqual(node2.serial_no, node2_serial) |
|
282 |
self.assertEqual(grp1.serial_no, grp1_serial) |
|
283 |
self.assertEqual(grp2.serial_no, grp2_serial) |
|
284 |
|
|
285 |
_VerifySerials() |
|
286 |
|
|
287 |
self.assertEqual(set(grp1.members), set(["node1"])) |
|
288 |
self.assertEqual(set(grp2.members), set(["node2"])) |
|
289 |
|
|
290 |
# Check invalid nodes and groups |
|
291 |
self.assertRaises(errors.ConfigurationError, cfg.AssignGroupNodes, [ |
|
292 |
("unknown.node.example.com", grp2.uuid), |
|
293 |
]) |
|
294 |
self.assertRaises(errors.ConfigurationError, cfg.AssignGroupNodes, [ |
|
295 |
(node1.name, "unknown-uuid"), |
|
296 |
]) |
|
297 |
|
|
298 |
self.assertEqual(node1.group, grp1.uuid) |
|
299 |
self.assertEqual(node2.group, grp2.uuid) |
|
300 |
self.assertEqual(set(grp1.members), set(["node1"])) |
|
301 |
self.assertEqual(set(grp2.members), set(["node2"])) |
|
302 |
|
|
303 |
# Another no-op |
|
304 |
cfg.AssignGroupNodes([]) |
|
305 |
cluster_serial += 1 |
|
306 |
_VerifySerials() |
|
307 |
|
|
308 |
# Assign to the same group (should be a no-op) |
|
309 |
self.assertEqual(node2.group, grp2.uuid) |
|
310 |
cfg.AssignGroupNodes([ |
|
311 |
(node2.name, grp2.uuid), |
|
312 |
]) |
|
313 |
cluster_serial += 1 |
|
314 |
self.assertEqual(node2.group, grp2.uuid) |
|
315 |
_VerifySerials() |
|
316 |
self.assertEqual(set(grp1.members), set(["node1"])) |
|
317 |
self.assertEqual(set(grp2.members), set(["node2"])) |
|
318 |
|
|
319 |
# Assign node 2 to group 1 |
|
320 |
self.assertEqual(node2.group, grp2.uuid) |
|
321 |
cfg.AssignGroupNodes([ |
|
322 |
(node2.name, grp1.uuid), |
|
323 |
]) |
|
324 |
cluster_serial += 1 |
|
325 |
node2_serial += 1 |
|
326 |
grp1_serial += 1 |
|
327 |
grp2_serial += 1 |
|
328 |
self.assertEqual(node2.group, grp1.uuid) |
|
329 |
_VerifySerials() |
|
330 |
self.assertEqual(set(grp1.members), set(["node1", "node2"])) |
|
331 |
self.assertFalse(grp2.members) |
|
332 |
|
|
333 |
# And assign both nodes to group 2 |
|
334 |
self.assertEqual(node1.group, grp1.uuid) |
|
335 |
self.assertEqual(node2.group, grp1.uuid) |
|
336 |
self.assertNotEqual(grp1.uuid, grp2.uuid) |
|
337 |
cfg.AssignGroupNodes([ |
|
338 |
(node1.name, grp2.uuid), |
|
339 |
(node2.name, grp2.uuid), |
|
340 |
]) |
|
341 |
cluster_serial += 1 |
|
342 |
node1_serial += 1 |
|
343 |
node2_serial += 1 |
|
344 |
grp1_serial += 1 |
|
345 |
grp2_serial += 1 |
|
346 |
self.assertEqual(node1.group, grp2.uuid) |
|
347 |
self.assertEqual(node2.group, grp2.uuid) |
|
348 |
_VerifySerials() |
|
349 |
self.assertFalse(grp1.members) |
|
350 |
self.assertEqual(set(grp2.members), set(["node1", "node2"])) |
|
351 |
|
|
352 |
# Destructive tests |
|
353 |
orig_group = node2.group |
|
354 |
try: |
|
355 |
other_uuid = "68b3d087-6ea5-491c-b81f-0a47d90228c5" |
|
356 |
assert compat.all(node.group != other_uuid |
|
357 |
for node in cfg.GetAllNodesInfo().values()) |
|
358 |
node2.group = "68b3d087-6ea5-491c-b81f-0a47d90228c5" |
|
359 |
self.assertRaises(errors.ConfigurationError, cfg.AssignGroupNodes, [ |
|
360 |
("node2", grp2.uuid), |
|
361 |
]) |
|
362 |
_VerifySerials() |
|
363 |
finally: |
|
364 |
node2.group = orig_group |
|
365 |
|
|
242 | 366 |
|
243 | 367 |
class TestTRM(unittest.TestCase): |
244 | 368 |
EC_ID = 1 |
Also available in: Unified diff