root / test / import-export_unittest-helper @ a464ce71
History | View | Annotate | Download (2.6 kB)
1 | 2d76b580 | Michael Hanselmann | #!/usr/bin/python |
---|---|---|---|
2 | 2d76b580 | Michael Hanselmann | # |
3 | 2d76b580 | Michael Hanselmann | |
4 | 2d76b580 | Michael Hanselmann | # Copyright (C) 2010 Google Inc. |
5 | 2d76b580 | Michael Hanselmann | # |
6 | 2d76b580 | Michael Hanselmann | # This program is free software; you can redistribute it and/or modify |
7 | 2d76b580 | Michael Hanselmann | # it under the terms of the GNU General Public License as published by |
8 | 2d76b580 | Michael Hanselmann | # the Free Software Foundation; either version 2 of the License, or |
9 | 2d76b580 | Michael Hanselmann | # (at your option) any later version. |
10 | 2d76b580 | Michael Hanselmann | # |
11 | 2d76b580 | Michael Hanselmann | # This program is distributed in the hope that it will be useful, but |
12 | 2d76b580 | Michael Hanselmann | # WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | 2d76b580 | Michael Hanselmann | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | 2d76b580 | Michael Hanselmann | # General Public License for more details. |
15 | 2d76b580 | Michael Hanselmann | # |
16 | 2d76b580 | Michael Hanselmann | # You should have received a copy of the GNU General Public License |
17 | 2d76b580 | Michael Hanselmann | # along with this program; if not, write to the Free Software |
18 | 2d76b580 | Michael Hanselmann | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
19 | 2d76b580 | Michael Hanselmann | # 02110-1301, USA. |
20 | 2d76b580 | Michael Hanselmann | |
21 | 2d76b580 | Michael Hanselmann | |
22 | 2d76b580 | Michael Hanselmann | """Helpers for testing import-export daemon""" |
23 | 2d76b580 | Michael Hanselmann | |
24 | 2d76b580 | Michael Hanselmann | import os |
25 | 2d76b580 | Michael Hanselmann | import sys |
26 | 2d76b580 | Michael Hanselmann | import errno |
27 | 53dbf14c | Michael Hanselmann | import time |
28 | 2d76b580 | Michael Hanselmann | |
29 | 2d76b580 | Michael Hanselmann | from ganeti import constants |
30 | 2d76b580 | Michael Hanselmann | from ganeti import utils |
31 | 2d76b580 | Michael Hanselmann | from ganeti import objects |
32 | 2d76b580 | Michael Hanselmann | from ganeti import serializer |
33 | 2d76b580 | Michael Hanselmann | |
34 | 2d76b580 | Michael Hanselmann | |
35 | ca9ec5aa | Michael Hanselmann | RETRY_INTERVAL = (0.1, 1.1, 1) |
36 | ca9ec5aa | Michael Hanselmann | TIMEOUT = int(os.getenv("TIMEOUT", 30)) |
37 | c6ccba7e | Michael Hanselmann | VALIDITY = int(os.getenv("VALIDITY", 1)) |
38 | 2d76b580 | Michael Hanselmann | |
39 | 2d76b580 | Michael Hanselmann | |
40 | 53dbf14c | Michael Hanselmann | def Log(msg, *args): |
41 | 53dbf14c | Michael Hanselmann | if args: |
42 | 53dbf14c | Michael Hanselmann | line = msg % args |
43 | 53dbf14c | Michael Hanselmann | else: |
44 | 53dbf14c | Michael Hanselmann | line = msg |
45 | 53dbf14c | Michael Hanselmann | |
46 | 53dbf14c | Michael Hanselmann | sys.stderr.write("%0.6f, pid %s: %s\n" % (time.time(), os.getpid(), line)) |
47 | 53dbf14c | Michael Hanselmann | sys.stderr.flush() |
48 | 53dbf14c | Michael Hanselmann | |
49 | 53dbf14c | Michael Hanselmann | |
50 | 2d76b580 | Michael Hanselmann | def _GetImportExportData(filename): |
51 | 2d76b580 | Michael Hanselmann | try: |
52 | 2d76b580 | Michael Hanselmann | data = utils.ReadFile(filename) |
53 | 2d76b580 | Michael Hanselmann | except EnvironmentError, err: |
54 | 53dbf14c | Michael Hanselmann | Log("%s = %s", filename, err) |
55 | 2d76b580 | Michael Hanselmann | if err.errno != errno.ENOENT: |
56 | 2d76b580 | Michael Hanselmann | raise |
57 | 2d76b580 | Michael Hanselmann | raise utils.RetryAgain() |
58 | 2d76b580 | Michael Hanselmann | |
59 | 53dbf14c | Michael Hanselmann | Log("%s = %s", filename, data.strip()) |
60 | 53dbf14c | Michael Hanselmann | |
61 | 2d76b580 | Michael Hanselmann | return objects.ImportExportStatus.FromDict(serializer.LoadJson(data)) |
62 | 2d76b580 | Michael Hanselmann | |
63 | 2d76b580 | Michael Hanselmann | |
64 | 2d76b580 | Michael Hanselmann | def _CheckConnected(filename): |
65 | 2d76b580 | Michael Hanselmann | if not _GetImportExportData(filename).connected: |
66 | 53dbf14c | Michael Hanselmann | Log("Not connected") |
67 | 53dbf14c | Michael Hanselmann | raise utils.RetryAgain() |
68 | 53dbf14c | Michael Hanselmann | |
69 | 53dbf14c | Michael Hanselmann | Log("Connected") |
70 | 53dbf14c | Michael Hanselmann | |
71 | 53dbf14c | Michael Hanselmann | |
72 | 53dbf14c | Michael Hanselmann | def _CheckListenPort(filename): |
73 | 53dbf14c | Michael Hanselmann | port = _GetImportExportData(filename).listen_port |
74 | 53dbf14c | Michael Hanselmann | if not port: |
75 | 53dbf14c | Michael Hanselmann | Log("No port") |
76 | 2d76b580 | Michael Hanselmann | raise utils.RetryAgain() |
77 | 53dbf14c | Michael Hanselmann | Log("Listening on %s", port) |
78 | 53dbf14c | Michael Hanselmann | return port |
79 | 2d76b580 | Michael Hanselmann | |
80 | 2d76b580 | Michael Hanselmann | |
81 | 2d76b580 | Michael Hanselmann | def WaitForListenPort(filename): |
82 | 53dbf14c | Michael Hanselmann | return utils.Retry(_CheckListenPort, RETRY_INTERVAL, TIMEOUT, |
83 | 53dbf14c | Michael Hanselmann | args=(filename, )) |
84 | 2d76b580 | Michael Hanselmann | |
85 | 2d76b580 | Michael Hanselmann | |
86 | 2d76b580 | Michael Hanselmann | def WaitForConnected(filename): |
87 | 2d76b580 | Michael Hanselmann | utils.Retry(_CheckConnected, RETRY_INTERVAL, TIMEOUT, args=(filename, )) |
88 | 2d76b580 | Michael Hanselmann | |
89 | 2d76b580 | Michael Hanselmann | |
90 | 2d76b580 | Michael Hanselmann | def main(): |
91 | 2d76b580 | Michael Hanselmann | (filename, what) = sys.argv[1:] |
92 | 2d76b580 | Michael Hanselmann | |
93 | d6547a1c | Michael Hanselmann | Log("Running helper for %s %s", filename, what) |
94 | d6547a1c | Michael Hanselmann | |
95 | 2d76b580 | Michael Hanselmann | if what == "listen-port": |
96 | 2d76b580 | Michael Hanselmann | print WaitForListenPort(filename) |
97 | 2d76b580 | Michael Hanselmann | elif what == "connected": |
98 | 2d76b580 | Michael Hanselmann | WaitForConnected(filename) |
99 | 2d76b580 | Michael Hanselmann | elif what == "gencert": |
100 | c6ccba7e | Michael Hanselmann | utils.GenerateSelfSignedSslCert(filename, validity=VALIDITY) |
101 | 2d76b580 | Michael Hanselmann | else: |
102 | 2d76b580 | Michael Hanselmann | raise Exception("Unknown command '%s'" % what) |
103 | 2d76b580 | Michael Hanselmann | |
104 | 2d76b580 | Michael Hanselmann | |
105 | 2d76b580 | Michael Hanselmann | if __name__ == "__main__": |
106 | 2d76b580 | Michael Hanselmann | main() |