Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.cmdlib.instance_storage_unittest.py @ 2fe1e043

History | View | Annotate | Download (3.7 kB)

1 d90f0cb4 Helga Velroyen
#!/usr/bin/python
2 d90f0cb4 Helga Velroyen
#
3 d90f0cb4 Helga Velroyen
4 d90f0cb4 Helga Velroyen
# Copyright (C) 2013 Google Inc.
5 d90f0cb4 Helga Velroyen
#
6 d90f0cb4 Helga Velroyen
# This program is free software; you can redistribute it and/or modify
7 d90f0cb4 Helga Velroyen
# it under the terms of the GNU General Public License as published by
8 d90f0cb4 Helga Velroyen
# the Free Software Foundation; either version 2 of the License, or
9 d90f0cb4 Helga Velroyen
# (at your option) any later version.
10 d90f0cb4 Helga Velroyen
#
11 d90f0cb4 Helga Velroyen
# This program is distributed in the hope that it will be useful, but
12 d90f0cb4 Helga Velroyen
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 d90f0cb4 Helga Velroyen
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 d90f0cb4 Helga Velroyen
# General Public License for more details.
15 d90f0cb4 Helga Velroyen
#
16 d90f0cb4 Helga Velroyen
# You should have received a copy of the GNU General Public License
17 d90f0cb4 Helga Velroyen
# along with this program; if not, write to the Free Software
18 d90f0cb4 Helga Velroyen
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 d90f0cb4 Helga Velroyen
# 02110-1301, USA.
20 d90f0cb4 Helga Velroyen
21 d90f0cb4 Helga Velroyen
22 d90f0cb4 Helga Velroyen
"""Script for unittesting the cmdlib module 'instance_storage'"""
23 d90f0cb4 Helga Velroyen
24 d90f0cb4 Helga Velroyen
25 d90f0cb4 Helga Velroyen
import unittest
26 d90f0cb4 Helga Velroyen
27 d90f0cb4 Helga Velroyen
from ganeti import constants
28 d90f0cb4 Helga Velroyen
from ganeti.cmdlib import instance_storage
29 d90f0cb4 Helga Velroyen
from ganeti import errors
30 d90f0cb4 Helga Velroyen
31 d90f0cb4 Helga Velroyen
import testutils
32 d90f0cb4 Helga Velroyen
import mock
33 d90f0cb4 Helga Velroyen
34 d90f0cb4 Helga Velroyen
35 d90f0cb4 Helga Velroyen
class TestCheckNodesFreeDiskOnVG(unittest.TestCase):
36 d90f0cb4 Helga Velroyen
37 d90f0cb4 Helga Velroyen
  def setUp(self):
38 d90f0cb4 Helga Velroyen
    self.node_uuid = "12345"
39 d90f0cb4 Helga Velroyen
    self.node_uuids = [self.node_uuid]
40 d90f0cb4 Helga Velroyen
41 d90f0cb4 Helga Velroyen
    self.node_info = mock.Mock()
42 d90f0cb4 Helga Velroyen
43 d90f0cb4 Helga Velroyen
    self.es = True
44 d90f0cb4 Helga Velroyen
    self.ndparams = {constants.ND_EXCLUSIVE_STORAGE: self.es}
45 d90f0cb4 Helga Velroyen
46 d90f0cb4 Helga Velroyen
    mock_rpc = mock.Mock()
47 d90f0cb4 Helga Velroyen
    mock_rpc.call_node_info = mock.Mock()
48 d90f0cb4 Helga Velroyen
49 d90f0cb4 Helga Velroyen
    mock_cfg = mock.Mock()
50 d90f0cb4 Helga Velroyen
    mock_cfg.GetNodeInfo = mock.Mock(return_value=self.node_info)
51 d90f0cb4 Helga Velroyen
    mock_cfg.GetNdParams = mock.Mock(return_value=self.ndparams)
52 d90f0cb4 Helga Velroyen
53 d90f0cb4 Helga Velroyen
    self.hvname = "myhv"
54 d90f0cb4 Helga Velroyen
    self.hvparams = mock.Mock()
55 d90f0cb4 Helga Velroyen
    self.clusterinfo = mock.Mock()
56 d90f0cb4 Helga Velroyen
    self.clusterinfo.hvparams = {self.hvname: self.hvparams}
57 d90f0cb4 Helga Velroyen
58 d90f0cb4 Helga Velroyen
    mock_cfg.GetHypervisorType = mock.Mock(return_value=self.hvname)
59 d90f0cb4 Helga Velroyen
    mock_cfg.GetClusterInfo = mock.Mock(return_value=self.clusterinfo)
60 d90f0cb4 Helga Velroyen
61 d90f0cb4 Helga Velroyen
    self.lu = mock.Mock()
62 d90f0cb4 Helga Velroyen
    self.lu.rpc = mock_rpc
63 d90f0cb4 Helga Velroyen
    self.lu.cfg = mock_cfg
64 d90f0cb4 Helga Velroyen
65 d90f0cb4 Helga Velroyen
    self.vg = "myvg"
66 d90f0cb4 Helga Velroyen
67 d90f0cb4 Helga Velroyen
    self.node_name = "mynode"
68 d90f0cb4 Helga Velroyen
    self.space_info = [{"type": constants.ST_LVM_VG,
69 d90f0cb4 Helga Velroyen
                        "name": self.vg,
70 d90f0cb4 Helga Velroyen
                        "storage_free": 125,
71 d90f0cb4 Helga Velroyen
                        "storage_size": 666}]
72 d90f0cb4 Helga Velroyen
73 d90f0cb4 Helga Velroyen
  def testPerformNodeInfoCall(self):
74 d90f0cb4 Helga Velroyen
    expected_hv_arg = [(self.hvname, self.hvparams)]
75 d90f0cb4 Helga Velroyen
    expected_storage_arg = {self.node_uuid:
76 d90f0cb4 Helga Velroyen
        [(constants.ST_LVM_VG, self.vg, [self.es])]}
77 d90f0cb4 Helga Velroyen
    instance_storage._PerformNodeInfoCall(self.lu, self.node_uuids, self.vg)
78 d90f0cb4 Helga Velroyen
    self.lu.rpc.call_node_info.assert_called_with(
79 d90f0cb4 Helga Velroyen
        self.node_uuids, expected_storage_arg, expected_hv_arg)
80 d90f0cb4 Helga Velroyen
81 d90f0cb4 Helga Velroyen
  def testCheckVgCapacityForNode(self):
82 d90f0cb4 Helga Velroyen
    requested = 123
83 d90f0cb4 Helga Velroyen
    node_info = (None, self.space_info, None)
84 d90f0cb4 Helga Velroyen
    instance_storage._CheckVgCapacityForNode(self.node_name, node_info,
85 d90f0cb4 Helga Velroyen
                                             self.vg, requested)
86 d90f0cb4 Helga Velroyen
87 d90f0cb4 Helga Velroyen
  def testCheckVgCapacityForNodeNotEnough(self):
88 d90f0cb4 Helga Velroyen
    requested = 250
89 d90f0cb4 Helga Velroyen
    node_info = (None, self.space_info, None)
90 d90f0cb4 Helga Velroyen
    self.assertRaises(
91 d90f0cb4 Helga Velroyen
        errors.OpPrereqError,
92 d90f0cb4 Helga Velroyen
        instance_storage._CheckVgCapacityForNode,
93 d90f0cb4 Helga Velroyen
        self.node_name, node_info, self.vg, requested)
94 d90f0cb4 Helga Velroyen
95 d90f0cb4 Helga Velroyen
  def testCheckVgCapacityForNodeNoStorageData(self):
96 d90f0cb4 Helga Velroyen
    node_info = (None, [], None)
97 d90f0cb4 Helga Velroyen
    self.assertRaises(
98 d90f0cb4 Helga Velroyen
        errors.OpPrereqError,
99 d90f0cb4 Helga Velroyen
        instance_storage._CheckVgCapacityForNode,
100 d90f0cb4 Helga Velroyen
        self.node_name, node_info, self.vg, NotImplemented)
101 d90f0cb4 Helga Velroyen
102 d90f0cb4 Helga Velroyen
  def testCheckVgCapacityForNodeBogusSize(self):
103 d90f0cb4 Helga Velroyen
    broken_space_info = [{"type": constants.ST_LVM_VG,
104 d90f0cb4 Helga Velroyen
                        "name": self.vg,
105 d90f0cb4 Helga Velroyen
                        "storage_free": "greenbunny",
106 d90f0cb4 Helga Velroyen
                        "storage_size": "redbunny"}]
107 d90f0cb4 Helga Velroyen
    node_info = (None, broken_space_info, None)
108 d90f0cb4 Helga Velroyen
    self.assertRaises(
109 d90f0cb4 Helga Velroyen
        errors.OpPrereqError,
110 d90f0cb4 Helga Velroyen
        instance_storage._CheckVgCapacityForNode,
111 d90f0cb4 Helga Velroyen
        self.node_name, node_info, self.vg, NotImplemented)
112 d90f0cb4 Helga Velroyen
113 d90f0cb4 Helga Velroyen
114 d90f0cb4 Helga Velroyen
if __name__ == "__main__":
115 d90f0cb4 Helga Velroyen
  testutils.GanetiTestProgram()