Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.storage_unittest.py @ 1a2eb2dc

History | View | Annotate | Download (4.4 kB)

1 048eeb2b Iustin Pop
#!/usr/bin/python
2 048eeb2b Iustin Pop
#
3 048eeb2b Iustin Pop
4 048eeb2b Iustin Pop
# Copyright (C) 2012 Google Inc.
5 048eeb2b Iustin Pop
#
6 048eeb2b Iustin Pop
# This program is free software; you can redistribute it and/or modify
7 048eeb2b Iustin Pop
# it under the terms of the GNU General Public License as published by
8 048eeb2b Iustin Pop
# the Free Software Foundation; either version 2 of the License, or
9 048eeb2b Iustin Pop
# (at your option) any later version.
10 048eeb2b Iustin Pop
#
11 048eeb2b Iustin Pop
# This program is distributed in the hope that it will be useful, but
12 048eeb2b Iustin Pop
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 048eeb2b Iustin Pop
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 048eeb2b Iustin Pop
# General Public License for more details.
15 048eeb2b Iustin Pop
#
16 048eeb2b Iustin Pop
# You should have received a copy of the GNU General Public License
17 048eeb2b Iustin Pop
# along with this program; if not, write to the Free Software
18 048eeb2b Iustin Pop
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 048eeb2b Iustin Pop
# 02110-1301, USA.
20 048eeb2b Iustin Pop
21 048eeb2b Iustin Pop
22 048eeb2b Iustin Pop
"""Script for testing ganeti.storage"""
23 048eeb2b Iustin Pop
24 048eeb2b Iustin Pop
import re
25 048eeb2b Iustin Pop
import unittest
26 048eeb2b Iustin Pop
import random
27 048eeb2b Iustin Pop
28 048eeb2b Iustin Pop
from ganeti import constants
29 048eeb2b Iustin Pop
from ganeti import utils
30 048eeb2b Iustin Pop
from ganeti import compat
31 048eeb2b Iustin Pop
from ganeti import errors
32 048eeb2b Iustin Pop
from ganeti import storage
33 048eeb2b Iustin Pop
34 048eeb2b Iustin Pop
import testutils
35 048eeb2b Iustin Pop
36 048eeb2b Iustin Pop
37 048eeb2b Iustin Pop
class TestVGReduce(testutils.GanetiTestCase):
38 048eeb2b Iustin Pop
  VGNAME = "xenvg"
39 048eeb2b Iustin Pop
  LIST_CMD = storage.LvmVgStorage.LIST_COMMAND
40 048eeb2b Iustin Pop
  VGREDUCE_CMD = storage.LvmVgStorage.VGREDUCE_COMMAND
41 048eeb2b Iustin Pop
42 048eeb2b Iustin Pop
  def _runCmd(self, cmd, **kwargs):
43 048eeb2b Iustin Pop
    if not self.run_history:
44 048eeb2b Iustin Pop
      self.fail("Empty run results")
45 048eeb2b Iustin Pop
    exp_cmd, result = self.run_history.pop(0)
46 048eeb2b Iustin Pop
    self.assertEqual(cmd, exp_cmd)
47 048eeb2b Iustin Pop
    return result
48 048eeb2b Iustin Pop
49 048eeb2b Iustin Pop
  def testOldVersion(self):
50 048eeb2b Iustin Pop
    lvmvg = storage.LvmVgStorage()
51 048eeb2b Iustin Pop
    stdout = self._ReadTestData("vgreduce-removemissing-2.02.02.txt")
52 048eeb2b Iustin Pop
    vgs_fail = self._ReadTestData("vgs-missing-pvs-2.02.02.txt")
53 048eeb2b Iustin Pop
    self.run_history = [
54 048eeb2b Iustin Pop
      ([self.VGREDUCE_CMD, "--removemissing", self.VGNAME],
55 048eeb2b Iustin Pop
       utils.RunResult(0, None, stdout, "", "", None, None)),
56 048eeb2b Iustin Pop
      ([self.LIST_CMD, "--noheadings", "--nosuffix", self.VGNAME],
57 048eeb2b Iustin Pop
       utils.RunResult(0, None, "", "", "", None, None)),
58 048eeb2b Iustin Pop
      ]
59 048eeb2b Iustin Pop
    lvmvg._RemoveMissing(self.VGNAME, _runcmd_fn=self._runCmd)
60 048eeb2b Iustin Pop
    self.assertEqual(self.run_history, [])
61 048eeb2b Iustin Pop
    for ecode, out in [(1, ""), (0, vgs_fail)]:
62 048eeb2b Iustin Pop
      self.run_history = [
63 048eeb2b Iustin Pop
        ([self.VGREDUCE_CMD, "--removemissing", self.VGNAME],
64 048eeb2b Iustin Pop
         utils.RunResult(0, None, stdout, "", "", None, None)),
65 048eeb2b Iustin Pop
        ([self.LIST_CMD, "--noheadings", "--nosuffix", self.VGNAME],
66 048eeb2b Iustin Pop
         utils.RunResult(ecode, None, out, "", "", None, None)),
67 048eeb2b Iustin Pop
        ]
68 048eeb2b Iustin Pop
      self.assertRaises(errors.StorageError, lvmvg._RemoveMissing, self.VGNAME,
69 048eeb2b Iustin Pop
                        _runcmd_fn=self._runCmd)
70 048eeb2b Iustin Pop
      self.assertEqual(self.run_history, [])
71 048eeb2b Iustin Pop
72 048eeb2b Iustin Pop
  def testNewVersion(self):
73 048eeb2b Iustin Pop
    lvmvg = storage.LvmVgStorage()
74 048eeb2b Iustin Pop
    stdout1 = self._ReadTestData("vgreduce-removemissing-2.02.66-fail.txt")
75 048eeb2b Iustin Pop
    stdout2 = self._ReadTestData("vgreduce-removemissing-2.02.66-ok.txt")
76 048eeb2b Iustin Pop
    vgs_fail = self._ReadTestData("vgs-missing-pvs-2.02.66.txt")
77 048eeb2b Iustin Pop
    # first: require --fail, check that it's used
78 048eeb2b Iustin Pop
    self.run_history = [
79 048eeb2b Iustin Pop
      ([self.VGREDUCE_CMD, "--removemissing", self.VGNAME],
80 048eeb2b Iustin Pop
       utils.RunResult(0, None, stdout1, "", "", None, None)),
81 048eeb2b Iustin Pop
      ([self.VGREDUCE_CMD, "--removemissing", "--force", self.VGNAME],
82 048eeb2b Iustin Pop
       utils.RunResult(0, None, stdout2, "", "", None, None)),
83 048eeb2b Iustin Pop
      ([self.LIST_CMD, "--noheadings", "--nosuffix", self.VGNAME],
84 048eeb2b Iustin Pop
       utils.RunResult(0, None, "", "", "", None, None)),
85 048eeb2b Iustin Pop
      ]
86 048eeb2b Iustin Pop
    lvmvg._RemoveMissing(self.VGNAME, _runcmd_fn=self._runCmd)
87 048eeb2b Iustin Pop
    self.assertEqual(self.run_history, [])
88 048eeb2b Iustin Pop
    # second: make sure --fail is not used if not needed
89 048eeb2b Iustin Pop
    self.run_history = [
90 048eeb2b Iustin Pop
      ([self.VGREDUCE_CMD, "--removemissing", self.VGNAME],
91 048eeb2b Iustin Pop
       utils.RunResult(0, None, stdout2, "", "", None, None)),
92 048eeb2b Iustin Pop
      ([self.LIST_CMD, "--noheadings", "--nosuffix", self.VGNAME],
93 048eeb2b Iustin Pop
       utils.RunResult(0, None, "", "", "", None, None)),
94 048eeb2b Iustin Pop
      ]
95 048eeb2b Iustin Pop
    lvmvg._RemoveMissing(self.VGNAME, _runcmd_fn=self._runCmd)
96 048eeb2b Iustin Pop
    self.assertEqual(self.run_history, [])
97 048eeb2b Iustin Pop
    # third: make sure we error out if vgs doesn't find the volume
98 048eeb2b Iustin Pop
    for ecode, out in [(1, ""), (0, vgs_fail)]:
99 048eeb2b Iustin Pop
      self.run_history = [
100 048eeb2b Iustin Pop
        ([self.VGREDUCE_CMD, "--removemissing", self.VGNAME],
101 048eeb2b Iustin Pop
         utils.RunResult(0, None, stdout1, "", "", None, None)),
102 048eeb2b Iustin Pop
        ([self.VGREDUCE_CMD, "--removemissing", "--force", self.VGNAME],
103 048eeb2b Iustin Pop
         utils.RunResult(0, None, stdout2, "", "", None, None)),
104 048eeb2b Iustin Pop
        ([self.LIST_CMD, "--noheadings", "--nosuffix", self.VGNAME],
105 048eeb2b Iustin Pop
         utils.RunResult(ecode, None, out, "", "", None, None)),
106 048eeb2b Iustin Pop
        ]
107 048eeb2b Iustin Pop
      self.assertRaises(errors.StorageError, lvmvg._RemoveMissing, self.VGNAME,
108 048eeb2b Iustin Pop
                        _runcmd_fn=self._runCmd)
109 048eeb2b Iustin Pop
      self.assertEqual(self.run_history, [])
110 048eeb2b Iustin Pop
111 048eeb2b Iustin Pop
112 048eeb2b Iustin Pop
if __name__ == "__main__":
113 048eeb2b Iustin Pop
  testutils.GanetiTestProgram()