Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.utils.lvm_unittest.py @ 14933c17

History | View | Annotate | Download (4 kB)

1 23d95cff Bernardo Dal Seno
#!/usr/bin/python
2 23d95cff Bernardo Dal Seno
#
3 23d95cff Bernardo Dal Seno
4 23d95cff Bernardo Dal Seno
# Copyright (C) 2013 Google Inc.
5 23d95cff Bernardo Dal Seno
#
6 23d95cff Bernardo Dal Seno
# This program is free software; you can redistribute it and/or modify
7 23d95cff Bernardo Dal Seno
# it under the terms of the GNU General Public License as published by
8 23d95cff Bernardo Dal Seno
# the Free Software Foundation; either version 2 of the License, or
9 23d95cff Bernardo Dal Seno
# (at your option) any later version.
10 23d95cff Bernardo Dal Seno
#
11 23d95cff Bernardo Dal Seno
# This program is distributed in the hope that it will be useful, but
12 23d95cff Bernardo Dal Seno
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 23d95cff Bernardo Dal Seno
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 23d95cff Bernardo Dal Seno
# General Public License for more details.
15 23d95cff Bernardo Dal Seno
#
16 23d95cff Bernardo Dal Seno
# You should have received a copy of the GNU General Public License
17 23d95cff Bernardo Dal Seno
# along with this program; if not, write to the Free Software
18 23d95cff Bernardo Dal Seno
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 23d95cff Bernardo Dal Seno
# 02110-1301, USA.
20 23d95cff Bernardo Dal Seno
21 23d95cff Bernardo Dal Seno
22 23d95cff Bernardo Dal Seno
"""Script for testing ganeti.utils.lvm"""
23 23d95cff Bernardo Dal Seno
24 23d95cff Bernardo Dal Seno
import unittest
25 23d95cff Bernardo Dal Seno
26 23d95cff Bernardo Dal Seno
from ganeti import constants
27 23d95cff Bernardo Dal Seno
from ganeti import utils
28 23d95cff Bernardo Dal Seno
from ganeti.objects import LvmPvInfo
29 23d95cff Bernardo Dal Seno
30 23d95cff Bernardo Dal Seno
import testutils
31 23d95cff Bernardo Dal Seno
32 23d95cff Bernardo Dal Seno
33 23d95cff Bernardo Dal Seno
class TestLvmExclusiveCheckNodePvs(unittest.TestCase):
34 23d95cff Bernardo Dal Seno
  """Test cases for LvmExclusiveCheckNodePvs()"""
35 23d95cff Bernardo Dal Seno
  _VG = "vg"
36 23d95cff Bernardo Dal Seno
  _SMALL_PV = LvmPvInfo(name="small", vg_name=_VG, size=100e3, free=40e3,
37 23d95cff Bernardo Dal Seno
                        attributes="a-")
38 23d95cff Bernardo Dal Seno
  _MED_PV = LvmPvInfo(name="medium", vg_name=_VG, size=400e3, free=40e3,
39 23d95cff Bernardo Dal Seno
                      attributes="a-")
40 23d95cff Bernardo Dal Seno
  _BIG_PV = LvmPvInfo(name="big", vg_name=_VG, size=1e6, free=400e3,
41 23d95cff Bernardo Dal Seno
                      attributes="a-")
42 23d95cff Bernardo Dal Seno
  # Allowance for rounding
43 23d95cff Bernardo Dal Seno
  _EPS = 1e-4
44 23d95cff Bernardo Dal Seno
45 23d95cff Bernardo Dal Seno
  def testOnePv(self):
46 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs([self._MED_PV])
47 23d95cff Bernardo Dal Seno
    self.assertFalse(errmsgs)
48 11064155 Bernardo Dal Seno
    self.assertEqual(small, self._MED_PV.size)
49 11064155 Bernardo Dal Seno
    self.assertEqual(big, self._MED_PV.size)
50 23d95cff Bernardo Dal Seno
51 23d95cff Bernardo Dal Seno
  def testEqualPvs(self):
52 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs(
53 11064155 Bernardo Dal Seno
      [self._MED_PV] * 2)
54 23d95cff Bernardo Dal Seno
    self.assertFalse(errmsgs)
55 11064155 Bernardo Dal Seno
    self.assertEqual(small, self._MED_PV.size)
56 11064155 Bernardo Dal Seno
    self.assertEqual(big, self._MED_PV.size)
57 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs(
58 11064155 Bernardo Dal Seno
      [self._SMALL_PV] * 3)
59 23d95cff Bernardo Dal Seno
    self.assertFalse(errmsgs)
60 11064155 Bernardo Dal Seno
    self.assertEqual(small, self._SMALL_PV.size)
61 11064155 Bernardo Dal Seno
    self.assertEqual(big, self._SMALL_PV.size)
62 23d95cff Bernardo Dal Seno
63 23d95cff Bernardo Dal Seno
  def testTooDifferentPvs(self):
64 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs(
65 11064155 Bernardo Dal Seno
      [self._MED_PV, self._BIG_PV])
66 23d95cff Bernardo Dal Seno
    self.assertEqual(len(errmsgs), 1)
67 11064155 Bernardo Dal Seno
    self.assertEqual(small, self._MED_PV.size)
68 11064155 Bernardo Dal Seno
    self.assertEqual(big, self._BIG_PV.size)
69 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs(
70 11064155 Bernardo Dal Seno
      [self._MED_PV, self._SMALL_PV])
71 23d95cff Bernardo Dal Seno
    self.assertEqual(len(errmsgs), 1)
72 11064155 Bernardo Dal Seno
    self.assertEqual(small, self._SMALL_PV.size)
73 11064155 Bernardo Dal Seno
    self.assertEqual(big, self._MED_PV.size)
74 23d95cff Bernardo Dal Seno
75 23d95cff Bernardo Dal Seno
  def testBoundarySizeCases(self):
76 23d95cff Bernardo Dal Seno
    medpv1 = self._MED_PV.Copy()
77 23d95cff Bernardo Dal Seno
    medpv2 = self._MED_PV.Copy()
78 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs(
79 11064155 Bernardo Dal Seno
      [medpv1, medpv2, self._MED_PV])
80 23d95cff Bernardo Dal Seno
    self.assertFalse(errmsgs)
81 11064155 Bernardo Dal Seno
    self.assertEqual(small, self._MED_PV.size)
82 11064155 Bernardo Dal Seno
    self.assertEqual(big, self._MED_PV.size)
83 23d95cff Bernardo Dal Seno
    # Just within the margins
84 23d95cff Bernardo Dal Seno
    medpv1.size = self._MED_PV.size * (1 - constants.PART_MARGIN + self._EPS)
85 23d95cff Bernardo Dal Seno
    medpv2.size = self._MED_PV.size * (1 + constants.PART_MARGIN - self._EPS)
86 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs(
87 11064155 Bernardo Dal Seno
      [medpv1, medpv2, self._MED_PV])
88 23d95cff Bernardo Dal Seno
    self.assertFalse(errmsgs)
89 11064155 Bernardo Dal Seno
    self.assertEqual(small, medpv1.size)
90 11064155 Bernardo Dal Seno
    self.assertEqual(big, medpv2.size)
91 23d95cff Bernardo Dal Seno
    # Just outside the margins
92 23d95cff Bernardo Dal Seno
    medpv1.size = self._MED_PV.size * (1 - constants.PART_MARGIN - self._EPS)
93 23d95cff Bernardo Dal Seno
    medpv2.size = self._MED_PV.size * (1 + constants.PART_MARGIN)
94 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs(
95 11064155 Bernardo Dal Seno
      [medpv1, medpv2, self._MED_PV])
96 23d95cff Bernardo Dal Seno
    self.assertTrue(errmsgs)
97 11064155 Bernardo Dal Seno
    self.assertEqual(small, medpv1.size)
98 11064155 Bernardo Dal Seno
    self.assertEqual(big, medpv2.size)
99 23d95cff Bernardo Dal Seno
    medpv1.size = self._MED_PV.size * (1 - constants.PART_MARGIN)
100 23d95cff Bernardo Dal Seno
    medpv2.size = self._MED_PV.size * (1 + constants.PART_MARGIN + self._EPS)
101 11064155 Bernardo Dal Seno
    (errmsgs, (small, big)) = utils.LvmExclusiveCheckNodePvs(
102 11064155 Bernardo Dal Seno
      [medpv1, medpv2, self._MED_PV])
103 23d95cff Bernardo Dal Seno
    self.assertTrue(errmsgs)
104 11064155 Bernardo Dal Seno
    self.assertEqual(small, medpv1.size)
105 11064155 Bernardo Dal Seno
    self.assertEqual(big, medpv2.size)
106 23d95cff Bernardo Dal Seno
107 23d95cff Bernardo Dal Seno
108 23d95cff Bernardo Dal Seno
if __name__ == "__main__":
109 23d95cff Bernardo Dal Seno
  testutils.GanetiTestProgram()