machine_manager_unittest.py revision f81680c018729fd4499e1e200d04b48c4b90127c
1#!/usr/bin/python
2
3# Copyright 2012 Google Inc. All Rights Reserved.
4
5"""Unittest for machine_manager."""
6import unittest
7
8import label
9import machine_manager
10
11
12class MyMachineManager(machine_manager.MachineManager):
13
14  def __init__(self, chromeos_root):
15    super(MyMachineManager, self).__init__(chromeos_root, 0)
16
17  def _TryToLockMachine(self, cros_machine):
18    self._machines.append(cros_machine)
19    cros_machine.checksum = ""
20
21  def AddMachine(self, machine_name):
22    with self._lock:
23      for m in self._all_machines:
24        assert m.name != machine_name, "Tried to double-add %s" % machine_name
25      cm = machine_manager.MockCrosMachine(machine_name, self.chromeos_root)
26      assert cm.machine_checksum, ("Could not find checksum for machine %s" %
27                                   machine_name)
28      self._all_machines.append(cm)
29
30CHROMEOS_ROOT = "/tmp/chromeos-root"
31MACHINE_NAMES = ["lumpy1", "lumpy2", "lumpy3", "daisy1", "daisy2"]
32LABEL_LUMPY = label.MockLabel("lumpy", "image", CHROMEOS_ROOT, "lumpy",
33                              ["lumpy1", "lumpy2", "lumpy3", "lumpy4"],
34                              "", "", "")
35LABEL_MIX = label.MockLabel("mix", "image", CHROMEOS_ROOT, "mix",
36                            ["daisy1", "daisy2", "lumpy3", "lumpy4"],
37                            "", "", "")
38
39
40class MachineManagerTest(unittest.TestCase):
41
42  def testAreAllMachineSame(self):
43    manager = MyMachineManager(CHROMEOS_ROOT)
44    for m in MACHINE_NAMES:
45      manager.AddMachine(m)
46    self.assertEqual(manager.AreAllMachineSame(LABEL_LUMPY), True)
47    self.assertEqual(manager.AreAllMachineSame(LABEL_MIX), False)
48
49  def testGetMachines(self):
50    manager = MyMachineManager(CHROMEOS_ROOT)
51    for m in MACHINE_NAMES:
52      manager.AddMachine(m)
53    names = [m.name for m in manager.GetMachines(LABEL_LUMPY)]
54    self.assertEqual(names, ["lumpy1", "lumpy2", "lumpy3"])
55
56  def testGetAvailableMachines(self):
57    manager = MyMachineManager(CHROMEOS_ROOT)
58    for m in MACHINE_NAMES:
59      manager.AddMachine(m)
60    for m in manager._all_machines:
61      if int(m.name[-1]) % 2:
62        manager._TryToLockMachine(m)
63    names = [m.name for m in manager.GetAvailableMachines(LABEL_LUMPY)]
64    self.assertEqual(names, ["lumpy1", "lumpy3"])
65
66if __name__ == "__main__":
67  unittest.main()
68