root / test / py / ganeti.storage_unittest.py @ 763ad5be
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 | 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 | 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 | 048eeb2b | Iustin Pop | lvmvg = storage.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() |