Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.client.gnt_instance_unittest.py @ 8572f1fe

History | View | Annotate | Download (4.7 kB)

1 25ce3ec4 Michael Hanselmann
#!/usr/bin/python
2 25ce3ec4 Michael Hanselmann
#
3 25ce3ec4 Michael Hanselmann
4 25ce3ec4 Michael Hanselmann
# Copyright (C) 2011 Google Inc.
5 25ce3ec4 Michael Hanselmann
#
6 25ce3ec4 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 25ce3ec4 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 25ce3ec4 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 25ce3ec4 Michael Hanselmann
# (at your option) any later version.
10 25ce3ec4 Michael Hanselmann
#
11 25ce3ec4 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 25ce3ec4 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 25ce3ec4 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 25ce3ec4 Michael Hanselmann
# General Public License for more details.
15 25ce3ec4 Michael Hanselmann
#
16 25ce3ec4 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 25ce3ec4 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 25ce3ec4 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 25ce3ec4 Michael Hanselmann
# 02110-1301, USA.
20 25ce3ec4 Michael Hanselmann
21 25ce3ec4 Michael Hanselmann
22 25ce3ec4 Michael Hanselmann
"""Script for testing ganeti.client.gnt_instance"""
23 25ce3ec4 Michael Hanselmann
24 25ce3ec4 Michael Hanselmann
import unittest
25 25ce3ec4 Michael Hanselmann
26 25ce3ec4 Michael Hanselmann
from ganeti import constants
27 25ce3ec4 Michael Hanselmann
from ganeti import utils
28 25ce3ec4 Michael Hanselmann
from ganeti import errors
29 25ce3ec4 Michael Hanselmann
from ganeti import objects
30 25ce3ec4 Michael Hanselmann
from ganeti.client import gnt_instance
31 25ce3ec4 Michael Hanselmann
32 25ce3ec4 Michael Hanselmann
import testutils
33 25ce3ec4 Michael Hanselmann
34 25ce3ec4 Michael Hanselmann
35 25ce3ec4 Michael Hanselmann
class TestConsole(unittest.TestCase):
36 25ce3ec4 Michael Hanselmann
  def setUp(self):
37 25ce3ec4 Michael Hanselmann
    self._output = []
38 25ce3ec4 Michael Hanselmann
    self._cmds = []
39 25ce3ec4 Michael Hanselmann
    self._next_cmd_exitcode = 0
40 25ce3ec4 Michael Hanselmann
41 abd42b0a Michael Hanselmann
  def _Test(self, console, show_command, cluster_name):
42 abd42b0a Michael Hanselmann
    return gnt_instance._DoConsole(console, show_command, cluster_name,
43 25ce3ec4 Michael Hanselmann
                                   feedback_fn=self._Feedback,
44 25ce3ec4 Michael Hanselmann
                                   _runcmd_fn=self._FakeRunCmd)
45 25ce3ec4 Michael Hanselmann
46 25ce3ec4 Michael Hanselmann
  def _Feedback(self, msg, *args):
47 25ce3ec4 Michael Hanselmann
    if args:
48 25ce3ec4 Michael Hanselmann
      msg = msg % args
49 25ce3ec4 Michael Hanselmann
    self._output.append(msg)
50 25ce3ec4 Michael Hanselmann
51 25ce3ec4 Michael Hanselmann
  def _FakeRunCmd(self, cmd, interactive=None):
52 25ce3ec4 Michael Hanselmann
    self.assertTrue(interactive)
53 25ce3ec4 Michael Hanselmann
    self.assertTrue(isinstance(cmd, list))
54 25ce3ec4 Michael Hanselmann
    self._cmds.append(cmd)
55 25ce3ec4 Michael Hanselmann
    return utils.RunResult(self._next_cmd_exitcode, None, "", "", "cmd",
56 a4ccecf6 Michael Hanselmann
                           utils.process._TIMEOUT_NONE, 5)
57 25ce3ec4 Michael Hanselmann
58 25ce3ec4 Michael Hanselmann
  def testMessage(self):
59 25ce3ec4 Michael Hanselmann
    cons = objects.InstanceConsole(instance="inst98.example.com",
60 25ce3ec4 Michael Hanselmann
                                   kind=constants.CONS_MESSAGE,
61 25ce3ec4 Michael Hanselmann
                                   message="Hello World")
62 25ce3ec4 Michael Hanselmann
    self.assertEqual(self._Test(cons, False, "cluster.example.com"),
63 25ce3ec4 Michael Hanselmann
                     constants.EXIT_SUCCESS)
64 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._cmds), 0)
65 25ce3ec4 Michael Hanselmann
    self.assertEqual(self._output, ["Hello World"])
66 25ce3ec4 Michael Hanselmann
67 25ce3ec4 Michael Hanselmann
  def testVnc(self):
68 25ce3ec4 Michael Hanselmann
    cons = objects.InstanceConsole(instance="inst1.example.com",
69 25ce3ec4 Michael Hanselmann
                                   kind=constants.CONS_VNC,
70 25ce3ec4 Michael Hanselmann
                                   host="node1.example.com",
71 25ce3ec4 Michael Hanselmann
                                   port=5901,
72 25ce3ec4 Michael Hanselmann
                                   display=1)
73 25ce3ec4 Michael Hanselmann
    self.assertEqual(self._Test(cons, False, "cluster.example.com"),
74 25ce3ec4 Michael Hanselmann
                     constants.EXIT_SUCCESS)
75 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._cmds), 0)
76 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._output), 1)
77 25ce3ec4 Michael Hanselmann
    self.assertTrue(" inst1.example.com " in self._output[0])
78 25ce3ec4 Michael Hanselmann
    self.assertTrue(" node1.example.com:5901 " in self._output[0])
79 25ce3ec4 Michael Hanselmann
    self.assertTrue("vnc://node1.example.com:5901/" in self._output[0])
80 25ce3ec4 Michael Hanselmann
81 25ce3ec4 Michael Hanselmann
  def testSshShow(self):
82 25ce3ec4 Michael Hanselmann
    cons = objects.InstanceConsole(instance="inst31.example.com",
83 25ce3ec4 Michael Hanselmann
                                   kind=constants.CONS_SSH,
84 25ce3ec4 Michael Hanselmann
                                   host="node93.example.com",
85 25ce3ec4 Michael Hanselmann
                                   user="user_abc",
86 25ce3ec4 Michael Hanselmann
                                   command="xm console x.y.z")
87 25ce3ec4 Michael Hanselmann
    self.assertEqual(self._Test(cons, True, "cluster.example.com"),
88 25ce3ec4 Michael Hanselmann
                     constants.EXIT_SUCCESS)
89 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._cmds), 0)
90 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._output), 1)
91 25ce3ec4 Michael Hanselmann
    self.assertTrue(" user_abc@node93.example.com " in self._output[0])
92 25ce3ec4 Michael Hanselmann
    self.assertTrue("'xm console x.y.z'" in self._output[0])
93 25ce3ec4 Michael Hanselmann
94 25ce3ec4 Michael Hanselmann
  def testSshRun(self):
95 25ce3ec4 Michael Hanselmann
    cons = objects.InstanceConsole(instance="inst31.example.com",
96 25ce3ec4 Michael Hanselmann
                                   kind=constants.CONS_SSH,
97 25ce3ec4 Michael Hanselmann
                                   host="node93.example.com",
98 25ce3ec4 Michael Hanselmann
                                   user="user_abc",
99 25ce3ec4 Michael Hanselmann
                                   command=["xm", "console", "x.y.z"])
100 25ce3ec4 Michael Hanselmann
    self.assertEqual(self._Test(cons, False, "cluster.example.com"),
101 25ce3ec4 Michael Hanselmann
                     constants.EXIT_SUCCESS)
102 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._cmds), 1)
103 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._output), 0)
104 25ce3ec4 Michael Hanselmann
105 25ce3ec4 Michael Hanselmann
    # This is very important to prevent escapes from the console
106 25ce3ec4 Michael Hanselmann
    self.assertTrue("-oEscapeChar=none" in self._cmds[0])
107 25ce3ec4 Michael Hanselmann
108 25ce3ec4 Michael Hanselmann
  def testSshRunFail(self):
109 25ce3ec4 Michael Hanselmann
    cons = objects.InstanceConsole(instance="inst31.example.com",
110 25ce3ec4 Michael Hanselmann
                                   kind=constants.CONS_SSH,
111 25ce3ec4 Michael Hanselmann
                                   host="node93.example.com",
112 25ce3ec4 Michael Hanselmann
                                   user="user_abc",
113 25ce3ec4 Michael Hanselmann
                                   command=["xm", "console", "x.y.z"])
114 25ce3ec4 Michael Hanselmann
115 25ce3ec4 Michael Hanselmann
    self._next_cmd_exitcode = 100
116 25ce3ec4 Michael Hanselmann
    self.assertRaises(errors.OpExecError, self._Test,
117 25ce3ec4 Michael Hanselmann
                      cons, False, "cluster.example.com")
118 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._cmds), 1)
119 25ce3ec4 Michael Hanselmann
    self.assertEqual(len(self._output), 0)
120 25ce3ec4 Michael Hanselmann
121 25ce3ec4 Michael Hanselmann
122 25ce3ec4 Michael Hanselmann
if __name__ == "__main__":
123 25ce3ec4 Michael Hanselmann
  testutils.GanetiTestProgram()