Statistics
| Branch: | Tag: | Revision:

root / test / import-export_unittest-helper @ 53dbf14c

History | View | Annotate | Download (2.5 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 2d76b580 Michael Hanselmann
RETRY_INTERVAL = 0.1
36 2d76b580 Michael Hanselmann
TIMEOUT = int(os.getenv("TIMEOUT", 10))
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 2d76b580 Michael Hanselmann
  if what == "listen-port":
94 2d76b580 Michael Hanselmann
    print WaitForListenPort(filename)
95 2d76b580 Michael Hanselmann
  elif what == "connected":
96 2d76b580 Michael Hanselmann
    WaitForConnected(filename)
97 2d76b580 Michael Hanselmann
  elif what == "gencert":
98 c6ccba7e Michael Hanselmann
    utils.GenerateSelfSignedSslCert(filename, validity=VALIDITY)
99 2d76b580 Michael Hanselmann
  else:
100 2d76b580 Michael Hanselmann
    raise Exception("Unknown command '%s'" % what)
101 2d76b580 Michael Hanselmann
102 2d76b580 Michael Hanselmann
103 2d76b580 Michael Hanselmann
if __name__ == "__main__":
104 2d76b580 Michael Hanselmann
  main()