Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.storage.container_unittest.py @ cd3b4ff4

History | View | Annotate | Download (4.5 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 c23bb217 Helga Velroyen
"""Script for testing ganeti.storage.container"""
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 8f096849 Helga Velroyen
from ganeti.storage import container
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 c23bb217 Helga Velroyen
  LIST_CMD = container.LvmVgStorage.LIST_COMMAND
40 c23bb217 Helga Velroyen
  VGREDUCE_CMD = container.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 c23bb217 Helga Velroyen
    lvmvg = container.LvmVgStorage()
51 00ef625c Michael Hanselmann
    stdout = testutils.ReadTestData("vgreduce-removemissing-2.02.02.txt")
52 00ef625c Michael Hanselmann
    vgs_fail = testutils.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 c23bb217 Helga Velroyen
    lvmvg = container.LvmVgStorage()
74 00ef625c Michael Hanselmann
    stdout1 = testutils.ReadTestData("vgreduce-removemissing-2.02.66-fail.txt")
75 00ef625c Michael Hanselmann
    stdout2 = testutils.ReadTestData("vgreduce-removemissing-2.02.66-ok.txt")
76 00ef625c Michael Hanselmann
    vgs_fail = testutils.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()