root / test / ganeti.impexpd_unittest.py @ 0559f745
History | View | Annotate | Download (5.2 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 | c08d76f5 | Michael Hanselmann | builder = impexpd.CommandBuilder(mode, opts, 1, 2, 3) |
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 | c08d76f5 | Michael Hanselmann | builder = impexpd.CommandBuilder(mode, opts, 1, 2, 3) |
112 | bb44b1ae | Michael Hanselmann | self.assertRaises(errors.GenericError, builder.GetCommand)
|
113 | bb44b1ae | Michael Hanselmann | |
114 | 0559f745 | Michael Hanselmann | def testOptionLengthError(self): |
115 | 0559f745 | Michael Hanselmann | testopts = [ |
116 | 0559f745 | Michael Hanselmann | CmdBuilderConfig(bind="0.0.0.0" + ("A" * impexpd.SOCAT_OPTION_MAXLEN), |
117 | 0559f745 | Michael Hanselmann | port=1234, ca="/tmp/ca"), |
118 | 0559f745 | Michael Hanselmann | CmdBuilderConfig(host="localhost", port=1234, |
119 | 0559f745 | Michael Hanselmann | ca="/tmp/ca" + ("B" * impexpd.SOCAT_OPTION_MAXLEN)), |
120 | 0559f745 | Michael Hanselmann | CmdBuilderConfig(host="localhost", port=1234, |
121 | 0559f745 | Michael Hanselmann | key="/tmp/key" + ("B" * impexpd.SOCAT_OPTION_MAXLEN)), |
122 | 0559f745 | Michael Hanselmann | ] |
123 | 0559f745 | Michael Hanselmann | |
124 | 0559f745 | Michael Hanselmann | for opts in testopts: |
125 | 0559f745 | Michael Hanselmann | for mode in [constants.IEM_IMPORT, constants.IEM_EXPORT]: |
126 | 0559f745 | Michael Hanselmann | builder = impexpd.CommandBuilder(mode, opts, 1, 2, 3) |
127 | 0559f745 | Michael Hanselmann | self.assertRaises(errors.GenericError, builder.GetCommand)
|
128 | 0559f745 | Michael Hanselmann | |
129 | 0559f745 | Michael Hanselmann | opts.host = "localhost" + ("A" * impexpd.SOCAT_OPTION_MAXLEN) |
130 | 0559f745 | Michael Hanselmann | builder = impexpd.CommandBuilder(constants.IEM_EXPORT, opts, 1, 2, 3) |
131 | 0559f745 | Michael Hanselmann | self.assertRaises(errors.GenericError, builder.GetCommand)
|
132 | 0559f745 | Michael Hanselmann | |
133 | bb44b1ae | Michael Hanselmann | def testModeError(self): |
134 | bb44b1ae | Michael Hanselmann | mode = "foobarbaz"
|
135 | bb44b1ae | Michael Hanselmann | |
136 | bb44b1ae | Michael Hanselmann | assert mode not in [constants.IEM_IMPORT, constants.IEM_EXPORT] |
137 | bb44b1ae | Michael Hanselmann | |
138 | bb44b1ae | Michael Hanselmann | opts = CmdBuilderConfig(host="localhost", port=1234) |
139 | c08d76f5 | Michael Hanselmann | builder = impexpd.CommandBuilder(mode, opts, 1, 2, 3) |
140 | bb44b1ae | Michael Hanselmann | self.assertRaises(errors.GenericError, builder.GetCommand)
|
141 | bb44b1ae | Michael Hanselmann | |
142 | bb44b1ae | Michael Hanselmann | |
143 | c08d76f5 | Michael Hanselmann | class TestCalcThroughput(unittest.TestCase): |
144 | c08d76f5 | Michael Hanselmann | def test(self): |
145 | c08d76f5 | Michael Hanselmann | self.assertEqual(impexpd._CalcThroughput([]), None) |
146 | c08d76f5 | Michael Hanselmann | self.assertEqual(impexpd._CalcThroughput([(0, 0)]), None) |
147 | c08d76f5 | Michael Hanselmann | |
148 | c08d76f5 | Michael Hanselmann | samples = [ |
149 | c08d76f5 | Michael Hanselmann | (0.0, 0.0), |
150 | c08d76f5 | Michael Hanselmann | (10.0, 100.0), |
151 | c08d76f5 | Michael Hanselmann | ] |
152 | c08d76f5 | Michael Hanselmann | self.assertAlmostEqual(impexpd._CalcThroughput(samples), 10.0, 3) |
153 | c08d76f5 | Michael Hanselmann | |
154 | c08d76f5 | Michael Hanselmann | samples = [ |
155 | c08d76f5 | Michael Hanselmann | (5.0, 7.0), |
156 | c08d76f5 | Michael Hanselmann | (10.0, 100.0), |
157 | c08d76f5 | Michael Hanselmann | (16.0, 181.0), |
158 | c08d76f5 | Michael Hanselmann | ] |
159 | c08d76f5 | Michael Hanselmann | self.assertAlmostEqual(impexpd._CalcThroughput(samples), 15.818, 3) |
160 | c08d76f5 | Michael Hanselmann | |
161 | c08d76f5 | Michael Hanselmann | |
162 | bb44b1ae | Michael Hanselmann | if __name__ == "__main__": |
163 | bb44b1ae | Michael Hanselmann | testutils.GanetiTestProgram() |