root / test / ganeti.client.gnt_instance_unittest.py @ 7181fba0
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() |