root / test / ganeti.impexpd_unittest.py @ 18215385
History | View | Annotate | Download (3.9 kB)
1 | bb44b1ae | Michael Hanselmann | #!/usr/bin/python
|
---|---|---|---|
2 | bb44b1ae | Michael Hanselmann | #
|
3 | bb44b1ae | Michael Hanselmann | |
4 | bb44b1ae | Michael Hanselmann | # Copyright (C) 2010 Google Inc.
|
5 | bb44b1ae | Michael Hanselmann | #
|
6 | bb44b1ae | Michael Hanselmann | # This program is free software; you can redistribute it and/or modify
|
7 | bb44b1ae | Michael Hanselmann | # it under the terms of the GNU General Public License as published by
|
8 | bb44b1ae | Michael Hanselmann | # the Free Software Foundation; either version 2 of the License, or
|
9 | bb44b1ae | Michael Hanselmann | # (at your option) any later version.
|
10 | bb44b1ae | Michael Hanselmann | #
|
11 | bb44b1ae | Michael Hanselmann | # This program is distributed in the hope that it will be useful, but
|
12 | bb44b1ae | Michael Hanselmann | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | bb44b1ae | Michael Hanselmann | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | bb44b1ae | Michael Hanselmann | # General Public License for more details.
|
15 | bb44b1ae | Michael Hanselmann | #
|
16 | bb44b1ae | Michael Hanselmann | # You should have received a copy of the GNU General Public License
|
17 | bb44b1ae | Michael Hanselmann | # along with this program; if not, write to the Free Software
|
18 | bb44b1ae | Michael Hanselmann | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
19 | bb44b1ae | Michael Hanselmann | # 02110-1301, USA.
|
20 | bb44b1ae | Michael Hanselmann | |
21 | bb44b1ae | Michael Hanselmann | |
22 | bb44b1ae | Michael Hanselmann | """Script for testing ganeti.impexpd"""
|
23 | bb44b1ae | Michael Hanselmann | |
24 | bb44b1ae | Michael Hanselmann | import os |
25 | bb44b1ae | Michael Hanselmann | import sys |
26 | bb44b1ae | Michael Hanselmann | import re |
27 | bb44b1ae | Michael Hanselmann | import unittest |
28 | bb44b1ae | Michael Hanselmann | |
29 | bb44b1ae | Michael Hanselmann | from ganeti import constants |
30 | bb44b1ae | Michael Hanselmann | from ganeti import objects |
31 | bb44b1ae | Michael Hanselmann | from ganeti import compat |
32 | bb44b1ae | Michael Hanselmann | from ganeti import utils |
33 | bb44b1ae | Michael Hanselmann | from ganeti import errors |
34 | bb44b1ae | Michael Hanselmann | from ganeti import impexpd |
35 | bb44b1ae | Michael Hanselmann | |
36 | bb44b1ae | Michael Hanselmann | import testutils |
37 | bb44b1ae | Michael Hanselmann | |
38 | bb44b1ae | Michael Hanselmann | |
39 | bb44b1ae | Michael Hanselmann | class CmdBuilderConfig(objects.ConfigObject): |
40 | bb44b1ae | Michael Hanselmann | __slots__ = [ |
41 | bb44b1ae | Michael Hanselmann | "bind",
|
42 | bb44b1ae | Michael Hanselmann | "key",
|
43 | bb44b1ae | Michael Hanselmann | "cert",
|
44 | bb44b1ae | Michael Hanselmann | "ca",
|
45 | bb44b1ae | Michael Hanselmann | "host",
|
46 | bb44b1ae | Michael Hanselmann | "port",
|
47 | bb44b1ae | Michael Hanselmann | "compress",
|
48 | bb44b1ae | Michael Hanselmann | "connect_timeout",
|
49 | bb44b1ae | Michael Hanselmann | "connect_retries",
|
50 | bb44b1ae | Michael Hanselmann | "cmd_prefix",
|
51 | bb44b1ae | Michael Hanselmann | "cmd_suffix",
|
52 | bb44b1ae | Michael Hanselmann | ] |
53 | bb44b1ae | Michael Hanselmann | |
54 | bb44b1ae | Michael Hanselmann | |
55 | bb44b1ae | Michael Hanselmann | def CheckCmdWord(cmd, word): |
56 | bb44b1ae | Michael Hanselmann | wre = re.compile(r"\b%s\b" % re.escape(word))
|
57 | bb44b1ae | Michael Hanselmann | return compat.any(wre.search(i) for i in cmd) |
58 | bb44b1ae | Michael Hanselmann | |
59 | bb44b1ae | Michael Hanselmann | |
60 | bb44b1ae | Michael Hanselmann | class TestCommandBuilder(unittest.TestCase): |
61 | bb44b1ae | Michael Hanselmann | def test(self): |
62 | bb44b1ae | Michael Hanselmann | for mode in [constants.IEM_IMPORT, constants.IEM_EXPORT]: |
63 | bb44b1ae | Michael Hanselmann | if mode == constants.IEM_IMPORT:
|
64 | bb44b1ae | Michael Hanselmann | comprcmd = "gunzip"
|
65 | bb44b1ae | Michael Hanselmann | elif mode == constants.IEM_EXPORT:
|
66 | bb44b1ae | Michael Hanselmann | comprcmd = "gzip"
|
67 | bb44b1ae | Michael Hanselmann | |
68 | bb44b1ae | Michael Hanselmann | for compress in [constants.IEC_NONE, constants.IEC_GZIP]: |
69 | bb44b1ae | Michael Hanselmann | for host in ["localhost", "1.2.3.4", "192.0.2.99"]: |
70 | bb44b1ae | Michael Hanselmann | for port in [0, 1, 1234, 7856, 45452]: |
71 | bb44b1ae | Michael Hanselmann | for cmd_prefix in [None, "PrefixCommandGoesHere|", |
72 | bb44b1ae | Michael Hanselmann | "dd if=/dev/hda bs=1048576 |"]:
|
73 | bb44b1ae | Michael Hanselmann | for cmd_suffix in [None, "< /some/file/name", |
74 | bb44b1ae | Michael Hanselmann | "| dd of=/dev/null"]:
|
75 | bb44b1ae | Michael Hanselmann | opts = CmdBuilderConfig(host=host, port=port, compress=compress, |
76 | bb44b1ae | Michael Hanselmann | cmd_prefix=cmd_prefix, |
77 | bb44b1ae | Michael Hanselmann | cmd_suffix=cmd_suffix) |
78 | bb44b1ae | Michael Hanselmann | |
79 | bb44b1ae | Michael Hanselmann | builder = impexpd.CommandBuilder(mode, opts, 1)
|
80 | bb44b1ae | Michael Hanselmann | |
81 | bb44b1ae | Michael Hanselmann | # Check complete command
|
82 | bb44b1ae | Michael Hanselmann | cmd = builder.GetCommand() |
83 | bb44b1ae | Michael Hanselmann | self.assert_(isinstance(cmd, list)) |
84 | bb44b1ae | Michael Hanselmann | |
85 | bb44b1ae | Michael Hanselmann | if compress == constants.IEC_GZIP:
|
86 | bb44b1ae | Michael Hanselmann | self.assert_(CheckCmdWord(cmd, comprcmd))
|
87 | bb44b1ae | Michael Hanselmann | |
88 | bb44b1ae | Michael Hanselmann | if cmd_prefix is not None: |
89 | bb44b1ae | Michael Hanselmann | self.assert_(cmd_prefix in i for i in cmd) |
90 | bb44b1ae | Michael Hanselmann | |
91 | bb44b1ae | Michael Hanselmann | if cmd_suffix is not None: |
92 | bb44b1ae | Michael Hanselmann | self.assert_(cmd_suffix in i for i in cmd) |
93 | bb44b1ae | Michael Hanselmann | |
94 | bb44b1ae | Michael Hanselmann | # Check socat command
|
95 | bb44b1ae | Michael Hanselmann | socat_cmd = builder._GetSocatCommand() |
96 | bb44b1ae | Michael Hanselmann | |
97 | bb44b1ae | Michael Hanselmann | if mode == constants.IEM_IMPORT:
|
98 | bb44b1ae | Michael Hanselmann | ssl_addr = socat_cmd[-2].split(",") |
99 | bb44b1ae | Michael Hanselmann | self.assert_(("OPENSSL-LISTEN:%s" % port) in ssl_addr) |
100 | bb44b1ae | Michael Hanselmann | elif mode == constants.IEM_EXPORT:
|
101 | bb44b1ae | Michael Hanselmann | ssl_addr = socat_cmd[-1].split(",") |
102 | bb44b1ae | Michael Hanselmann | self.assert_(("OPENSSL:%s:%s" % (host, port)) in ssl_addr) |
103 | bb44b1ae | Michael Hanselmann | |
104 | bb44b1ae | Michael Hanselmann | self.assert_("verify=1" in ssl_addr) |
105 | bb44b1ae | Michael Hanselmann | |
106 | bb44b1ae | Michael Hanselmann | def testCommaError(self): |
107 | bb44b1ae | Michael Hanselmann | opts = CmdBuilderConfig(host="localhost", port=1234, |
108 | bb44b1ae | Michael Hanselmann | ca="/some/path/with,a/,comma")
|
109 | bb44b1ae | Michael Hanselmann | |
110 | bb44b1ae | Michael Hanselmann | for mode in [constants.IEM_IMPORT, constants.IEM_EXPORT]: |
111 | bb44b1ae | Michael Hanselmann | builder = impexpd.CommandBuilder(mode, opts, 1)
|
112 | bb44b1ae | Michael Hanselmann | self.assertRaises(errors.GenericError, builder.GetCommand)
|
113 | bb44b1ae | Michael Hanselmann | |
114 | bb44b1ae | Michael Hanselmann | def testModeError(self): |
115 | bb44b1ae | Michael Hanselmann | mode = "foobarbaz"
|
116 | bb44b1ae | Michael Hanselmann | |
117 | bb44b1ae | Michael Hanselmann | assert mode not in [constants.IEM_IMPORT, constants.IEM_EXPORT] |
118 | bb44b1ae | Michael Hanselmann | |
119 | bb44b1ae | Michael Hanselmann | opts = CmdBuilderConfig(host="localhost", port=1234) |
120 | bb44b1ae | Michael Hanselmann | builder = impexpd.CommandBuilder(mode, opts, 1)
|
121 | bb44b1ae | Michael Hanselmann | self.assertRaises(errors.GenericError, builder.GetCommand)
|
122 | bb44b1ae | Michael Hanselmann | |
123 | bb44b1ae | Michael Hanselmann | |
124 | bb44b1ae | Michael Hanselmann | if __name__ == "__main__": |
125 | bb44b1ae | Michael Hanselmann | testutils.GanetiTestProgram() |