root / test / ganeti.tools.prepare_node_join_unittest.py @ 1a2eb2dc
History | View | Annotate | Download (10.3 kB)
1 | d12b9f66 | Michael Hanselmann | #!/usr/bin/python
|
---|---|---|---|
2 | d12b9f66 | Michael Hanselmann | #
|
3 | d12b9f66 | Michael Hanselmann | |
4 | d12b9f66 | Michael Hanselmann | # Copyright (C) 2012 Google Inc.
|
5 | d12b9f66 | Michael Hanselmann | #
|
6 | d12b9f66 | Michael Hanselmann | # This program is free software; you can redistribute it and/or modify
|
7 | d12b9f66 | Michael Hanselmann | # it under the terms of the GNU General Public License as published by
|
8 | d12b9f66 | Michael Hanselmann | # the Free Software Foundation; either version 2 of the License, or
|
9 | d12b9f66 | Michael Hanselmann | # (at your option) any later version.
|
10 | d12b9f66 | Michael Hanselmann | #
|
11 | d12b9f66 | Michael Hanselmann | # This program is distributed in the hope that it will be useful, but
|
12 | d12b9f66 | Michael Hanselmann | # WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | d12b9f66 | Michael Hanselmann | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | d12b9f66 | Michael Hanselmann | # General Public License for more details.
|
15 | d12b9f66 | Michael Hanselmann | #
|
16 | d12b9f66 | Michael Hanselmann | # You should have received a copy of the GNU General Public License
|
17 | d12b9f66 | Michael Hanselmann | # along with this program; if not, write to the Free Software
|
18 | d12b9f66 | Michael Hanselmann | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
19 | d12b9f66 | Michael Hanselmann | # 02110-1301, USA.
|
20 | d12b9f66 | Michael Hanselmann | |
21 | d12b9f66 | Michael Hanselmann | |
22 | d12b9f66 | Michael Hanselmann | """Script for testing ganeti.tools.prepare_node_join"""
|
23 | d12b9f66 | Michael Hanselmann | |
24 | d12b9f66 | Michael Hanselmann | import unittest |
25 | d12b9f66 | Michael Hanselmann | import shutil |
26 | d12b9f66 | Michael Hanselmann | import tempfile |
27 | d12b9f66 | Michael Hanselmann | import os.path |
28 | d12b9f66 | Michael Hanselmann | import OpenSSL |
29 | d12b9f66 | Michael Hanselmann | |
30 | d12b9f66 | Michael Hanselmann | from ganeti import errors |
31 | d12b9f66 | Michael Hanselmann | from ganeti import constants |
32 | d12b9f66 | Michael Hanselmann | from ganeti import serializer |
33 | d12b9f66 | Michael Hanselmann | from ganeti import pathutils |
34 | d12b9f66 | Michael Hanselmann | from ganeti import compat |
35 | d12b9f66 | Michael Hanselmann | from ganeti import utils |
36 | d12b9f66 | Michael Hanselmann | from ganeti.tools import prepare_node_join |
37 | d12b9f66 | Michael Hanselmann | |
38 | d12b9f66 | Michael Hanselmann | import testutils |
39 | d12b9f66 | Michael Hanselmann | |
40 | d12b9f66 | Michael Hanselmann | |
41 | d12b9f66 | Michael Hanselmann | _JoinError = prepare_node_join.JoinError |
42 | d12b9f66 | Michael Hanselmann | |
43 | d12b9f66 | Michael Hanselmann | |
44 | d12b9f66 | Michael Hanselmann | class TestLoadData(unittest.TestCase): |
45 | d12b9f66 | Michael Hanselmann | def testNoJson(self): |
46 | d12b9f66 | Michael Hanselmann | self.assertRaises(errors.ParseError, prepare_node_join.LoadData, "") |
47 | d12b9f66 | Michael Hanselmann | self.assertRaises(errors.ParseError, prepare_node_join.LoadData, "}") |
48 | d12b9f66 | Michael Hanselmann | |
49 | d12b9f66 | Michael Hanselmann | def testInvalidDataStructure(self): |
50 | d12b9f66 | Michael Hanselmann | raw = serializer.DumpJson({ |
51 | d12b9f66 | Michael Hanselmann | "some other thing": False, |
52 | d12b9f66 | Michael Hanselmann | }) |
53 | d12b9f66 | Michael Hanselmann | self.assertRaises(errors.ParseError, prepare_node_join.LoadData, raw)
|
54 | d12b9f66 | Michael Hanselmann | |
55 | d12b9f66 | Michael Hanselmann | raw = serializer.DumpJson([]) |
56 | d12b9f66 | Michael Hanselmann | self.assertRaises(errors.ParseError, prepare_node_join.LoadData, raw)
|
57 | d12b9f66 | Michael Hanselmann | |
58 | d12b9f66 | Michael Hanselmann | def testValidData(self): |
59 | d12b9f66 | Michael Hanselmann | raw = serializer.DumpJson({}) |
60 | d12b9f66 | Michael Hanselmann | self.assertEqual(prepare_node_join.LoadData(raw), {})
|
61 | d12b9f66 | Michael Hanselmann | |
62 | d12b9f66 | Michael Hanselmann | |
63 | d12b9f66 | Michael Hanselmann | class TestVerifyCertificate(testutils.GanetiTestCase): |
64 | d12b9f66 | Michael Hanselmann | def setUp(self): |
65 | d12b9f66 | Michael Hanselmann | testutils.GanetiTestCase.setUp(self)
|
66 | d12b9f66 | Michael Hanselmann | self.tmpdir = tempfile.mkdtemp()
|
67 | d12b9f66 | Michael Hanselmann | |
68 | d12b9f66 | Michael Hanselmann | def tearDown(self): |
69 | d12b9f66 | Michael Hanselmann | testutils.GanetiTestCase.tearDown(self)
|
70 | d12b9f66 | Michael Hanselmann | shutil.rmtree(self.tmpdir)
|
71 | d12b9f66 | Michael Hanselmann | |
72 | d12b9f66 | Michael Hanselmann | def testNoCert(self): |
73 | d12b9f66 | Michael Hanselmann | prepare_node_join.VerifyCertificate({}, _verify_fn=NotImplemented)
|
74 | d12b9f66 | Michael Hanselmann | |
75 | d12b9f66 | Michael Hanselmann | def testMismatchingKey(self): |
76 | d12b9f66 | Michael Hanselmann | other_cert = self._TestDataFilename("cert1.pem") |
77 | d12b9f66 | Michael Hanselmann | node_cert = self._TestDataFilename("cert2.pem") |
78 | d12b9f66 | Michael Hanselmann | |
79 | d12b9f66 | Michael Hanselmann | self.assertRaises(_JoinError, prepare_node_join._VerifyCertificate,
|
80 | d12b9f66 | Michael Hanselmann | utils.ReadFile(other_cert), _noded_cert_file=node_cert) |
81 | d12b9f66 | Michael Hanselmann | |
82 | d12b9f66 | Michael Hanselmann | def testGivenPrivateKey(self): |
83 | d12b9f66 | Michael Hanselmann | cert_filename = self._TestDataFilename("cert2.pem") |
84 | d12b9f66 | Michael Hanselmann | cert_pem = utils.ReadFile(cert_filename) |
85 | d12b9f66 | Michael Hanselmann | |
86 | d12b9f66 | Michael Hanselmann | self.assertRaises(_JoinError, prepare_node_join._VerifyCertificate,
|
87 | d12b9f66 | Michael Hanselmann | cert_pem, _noded_cert_file=cert_filename) |
88 | d12b9f66 | Michael Hanselmann | |
89 | d12b9f66 | Michael Hanselmann | def testMatchingKey(self): |
90 | d12b9f66 | Michael Hanselmann | cert_filename = self._TestDataFilename("cert2.pem") |
91 | d12b9f66 | Michael Hanselmann | |
92 | d12b9f66 | Michael Hanselmann | # Extract certificate
|
93 | d12b9f66 | Michael Hanselmann | cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, |
94 | d12b9f66 | Michael Hanselmann | utils.ReadFile(cert_filename)) |
95 | d12b9f66 | Michael Hanselmann | cert_pem = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, |
96 | d12b9f66 | Michael Hanselmann | cert) |
97 | d12b9f66 | Michael Hanselmann | |
98 | d12b9f66 | Michael Hanselmann | prepare_node_join._VerifyCertificate(cert_pem, |
99 | d12b9f66 | Michael Hanselmann | _noded_cert_file=cert_filename) |
100 | d12b9f66 | Michael Hanselmann | |
101 | d12b9f66 | Michael Hanselmann | def testMissingFile(self): |
102 | d12b9f66 | Michael Hanselmann | cert = self._TestDataFilename("cert1.pem") |
103 | d12b9f66 | Michael Hanselmann | nodecert = utils.PathJoin(self.tmpdir, "does-not-exist") |
104 | d12b9f66 | Michael Hanselmann | prepare_node_join._VerifyCertificate(utils.ReadFile(cert), |
105 | d12b9f66 | Michael Hanselmann | _noded_cert_file=nodecert) |
106 | d12b9f66 | Michael Hanselmann | |
107 | d12b9f66 | Michael Hanselmann | def testInvalidCertificate(self): |
108 | d12b9f66 | Michael Hanselmann | self.assertRaises(errors.X509CertError,
|
109 | d12b9f66 | Michael Hanselmann | prepare_node_join._VerifyCertificate, |
110 | d12b9f66 | Michael Hanselmann | "Something that's not a certificate",
|
111 | d12b9f66 | Michael Hanselmann | _noded_cert_file=NotImplemented)
|
112 | d12b9f66 | Michael Hanselmann | |
113 | d12b9f66 | Michael Hanselmann | def testNoPrivateKey(self): |
114 | d12b9f66 | Michael Hanselmann | cert = self._TestDataFilename("cert1.pem") |
115 | d12b9f66 | Michael Hanselmann | self.assertRaises(errors.X509CertError,
|
116 | d12b9f66 | Michael Hanselmann | prepare_node_join._VerifyCertificate, |
117 | d12b9f66 | Michael Hanselmann | utils.ReadFile(cert), _noded_cert_file=cert) |
118 | d12b9f66 | Michael Hanselmann | |
119 | d12b9f66 | Michael Hanselmann | |
120 | d12b9f66 | Michael Hanselmann | class TestVerifyClusterName(unittest.TestCase): |
121 | d12b9f66 | Michael Hanselmann | def setUp(self): |
122 | d12b9f66 | Michael Hanselmann | unittest.TestCase.setUp(self)
|
123 | d12b9f66 | Michael Hanselmann | self.tmpdir = tempfile.mkdtemp()
|
124 | d12b9f66 | Michael Hanselmann | |
125 | d12b9f66 | Michael Hanselmann | def tearDown(self): |
126 | d12b9f66 | Michael Hanselmann | unittest.TestCase.tearDown(self)
|
127 | d12b9f66 | Michael Hanselmann | shutil.rmtree(self.tmpdir)
|
128 | d12b9f66 | Michael Hanselmann | |
129 | d12b9f66 | Michael Hanselmann | def testNoName(self): |
130 | d12b9f66 | Michael Hanselmann | self.assertRaises(_JoinError, prepare_node_join.VerifyClusterName,
|
131 | d12b9f66 | Michael Hanselmann | {}, _verify_fn=NotImplemented)
|
132 | d12b9f66 | Michael Hanselmann | |
133 | d12b9f66 | Michael Hanselmann | def testMissingFile(self): |
134 | d12b9f66 | Michael Hanselmann | tmpfile = utils.PathJoin(self.tmpdir, "does-not-exist") |
135 | d12b9f66 | Michael Hanselmann | prepare_node_join._VerifyClusterName(NotImplemented,
|
136 | d12b9f66 | Michael Hanselmann | _ss_cluster_name_file=tmpfile) |
137 | d12b9f66 | Michael Hanselmann | |
138 | d12b9f66 | Michael Hanselmann | def testMatchingName(self): |
139 | d12b9f66 | Michael Hanselmann | tmpfile = utils.PathJoin(self.tmpdir, "cluster_name") |
140 | d12b9f66 | Michael Hanselmann | |
141 | d12b9f66 | Michael Hanselmann | for content in ["cluster.example.com", "cluster.example.com\n\n"]: |
142 | d12b9f66 | Michael Hanselmann | utils.WriteFile(tmpfile, data=content) |
143 | d12b9f66 | Michael Hanselmann | prepare_node_join._VerifyClusterName("cluster.example.com",
|
144 | d12b9f66 | Michael Hanselmann | _ss_cluster_name_file=tmpfile) |
145 | d12b9f66 | Michael Hanselmann | |
146 | d12b9f66 | Michael Hanselmann | def testNameMismatch(self): |
147 | d12b9f66 | Michael Hanselmann | tmpfile = utils.PathJoin(self.tmpdir, "cluster_name") |
148 | d12b9f66 | Michael Hanselmann | |
149 | d12b9f66 | Michael Hanselmann | for content in ["something.example.com", "foobar\n\ncluster.example.com"]: |
150 | d12b9f66 | Michael Hanselmann | utils.WriteFile(tmpfile, data=content) |
151 | d12b9f66 | Michael Hanselmann | self.assertRaises(_JoinError, prepare_node_join._VerifyClusterName,
|
152 | d12b9f66 | Michael Hanselmann | "cluster.example.com", _ss_cluster_name_file=tmpfile)
|
153 | d12b9f66 | Michael Hanselmann | |
154 | d12b9f66 | Michael Hanselmann | |
155 | d12b9f66 | Michael Hanselmann | class TestUpdateSshDaemon(unittest.TestCase): |
156 | d12b9f66 | Michael Hanselmann | def setUp(self): |
157 | d12b9f66 | Michael Hanselmann | unittest.TestCase.setUp(self)
|
158 | d12b9f66 | Michael Hanselmann | self.tmpdir = tempfile.mkdtemp()
|
159 | d12b9f66 | Michael Hanselmann | |
160 | d12b9f66 | Michael Hanselmann | self.keyfiles = {
|
161 | d12b9f66 | Michael Hanselmann | constants.SSHK_RSA: |
162 | 340ae7da | Michael Hanselmann | (utils.PathJoin(self.tmpdir, "rsa.private"), |
163 | 340ae7da | Michael Hanselmann | utils.PathJoin(self.tmpdir, "rsa.public")), |
164 | d12b9f66 | Michael Hanselmann | constants.SSHK_DSA: |
165 | 340ae7da | Michael Hanselmann | (utils.PathJoin(self.tmpdir, "dsa.private"), |
166 | 340ae7da | Michael Hanselmann | utils.PathJoin(self.tmpdir, "dsa.public")), |
167 | d12b9f66 | Michael Hanselmann | } |
168 | d12b9f66 | Michael Hanselmann | |
169 | d12b9f66 | Michael Hanselmann | def tearDown(self): |
170 | d12b9f66 | Michael Hanselmann | unittest.TestCase.tearDown(self)
|
171 | d12b9f66 | Michael Hanselmann | shutil.rmtree(self.tmpdir)
|
172 | d12b9f66 | Michael Hanselmann | |
173 | d12b9f66 | Michael Hanselmann | def testNoKeys(self): |
174 | d12b9f66 | Michael Hanselmann | data_empty_keys = { |
175 | d12b9f66 | Michael Hanselmann | constants.SSHS_SSH_HOST_KEY: [], |
176 | d12b9f66 | Michael Hanselmann | } |
177 | d12b9f66 | Michael Hanselmann | |
178 | d12b9f66 | Michael Hanselmann | for data in [{}, data_empty_keys]: |
179 | d12b9f66 | Michael Hanselmann | for dry_run in [False, True]: |
180 | d12b9f66 | Michael Hanselmann | prepare_node_join.UpdateSshDaemon(data, dry_run, |
181 | d12b9f66 | Michael Hanselmann | _runcmd_fn=NotImplemented,
|
182 | d12b9f66 | Michael Hanselmann | _keyfiles=NotImplemented)
|
183 | d12b9f66 | Michael Hanselmann | self.assertEqual(os.listdir(self.tmpdir), []) |
184 | d12b9f66 | Michael Hanselmann | |
185 | d12b9f66 | Michael Hanselmann | def _TestDryRun(self, data): |
186 | d12b9f66 | Michael Hanselmann | prepare_node_join.UpdateSshDaemon(data, True, _runcmd_fn=NotImplemented, |
187 | d12b9f66 | Michael Hanselmann | _keyfiles=self.keyfiles)
|
188 | d12b9f66 | Michael Hanselmann | self.assertEqual(os.listdir(self.tmpdir), []) |
189 | d12b9f66 | Michael Hanselmann | |
190 | d12b9f66 | Michael Hanselmann | def testDryRunRsa(self): |
191 | d12b9f66 | Michael Hanselmann | self._TestDryRun({
|
192 | d12b9f66 | Michael Hanselmann | constants.SSHS_SSH_HOST_KEY: [ |
193 | 340ae7da | Michael Hanselmann | (constants.SSHK_RSA, "rsapriv", "rsapub"), |
194 | d12b9f66 | Michael Hanselmann | ], |
195 | d12b9f66 | Michael Hanselmann | }) |
196 | d12b9f66 | Michael Hanselmann | |
197 | d12b9f66 | Michael Hanselmann | def testDryRunDsa(self): |
198 | d12b9f66 | Michael Hanselmann | self._TestDryRun({
|
199 | d12b9f66 | Michael Hanselmann | constants.SSHS_SSH_HOST_KEY: [ |
200 | 340ae7da | Michael Hanselmann | (constants.SSHK_DSA, "dsapriv", "dsapub"), |
201 | d12b9f66 | Michael Hanselmann | ], |
202 | d12b9f66 | Michael Hanselmann | }) |
203 | d12b9f66 | Michael Hanselmann | |
204 | d12b9f66 | Michael Hanselmann | def _RunCmd(self, fail, cmd, interactive=NotImplemented): |
205 | d12b9f66 | Michael Hanselmann | self.assertTrue(interactive)
|
206 | d12b9f66 | Michael Hanselmann | self.assertEqual(cmd, [pathutils.DAEMON_UTIL, "reload-ssh-keys"]) |
207 | d12b9f66 | Michael Hanselmann | if fail:
|
208 | d12b9f66 | Michael Hanselmann | exit_code = constants.EXIT_FAILURE |
209 | d12b9f66 | Michael Hanselmann | else:
|
210 | d12b9f66 | Michael Hanselmann | exit_code = constants.EXIT_SUCCESS |
211 | d12b9f66 | Michael Hanselmann | return utils.RunResult(exit_code, None, "stdout", "stderr", |
212 | d12b9f66 | Michael Hanselmann | utils.ShellQuoteArgs(cmd), |
213 | d12b9f66 | Michael Hanselmann | NotImplemented, NotImplemented) |
214 | d12b9f66 | Michael Hanselmann | |
215 | d12b9f66 | Michael Hanselmann | def _TestUpdate(self, failcmd): |
216 | d12b9f66 | Michael Hanselmann | data = { |
217 | d12b9f66 | Michael Hanselmann | constants.SSHS_SSH_HOST_KEY: [ |
218 | 340ae7da | Michael Hanselmann | (constants.SSHK_DSA, "dsapriv", "dsapub"), |
219 | 340ae7da | Michael Hanselmann | (constants.SSHK_RSA, "rsapriv", "rsapub"), |
220 | d12b9f66 | Michael Hanselmann | ], |
221 | d12b9f66 | Michael Hanselmann | } |
222 | d12b9f66 | Michael Hanselmann | runcmd_fn = compat.partial(self._RunCmd, failcmd)
|
223 | d12b9f66 | Michael Hanselmann | if failcmd:
|
224 | d12b9f66 | Michael Hanselmann | self.assertRaises(_JoinError, prepare_node_join.UpdateSshDaemon,
|
225 | d12b9f66 | Michael Hanselmann | data, False, _runcmd_fn=runcmd_fn,
|
226 | d12b9f66 | Michael Hanselmann | _keyfiles=self.keyfiles)
|
227 | d12b9f66 | Michael Hanselmann | else:
|
228 | d12b9f66 | Michael Hanselmann | prepare_node_join.UpdateSshDaemon(data, False, _runcmd_fn=runcmd_fn,
|
229 | d12b9f66 | Michael Hanselmann | _keyfiles=self.keyfiles)
|
230 | d12b9f66 | Michael Hanselmann | self.assertEqual(sorted(os.listdir(self.tmpdir)), sorted([ |
231 | 340ae7da | Michael Hanselmann | "rsa.public", "rsa.private", |
232 | 340ae7da | Michael Hanselmann | "dsa.public", "dsa.private", |
233 | d12b9f66 | Michael Hanselmann | ])) |
234 | d12b9f66 | Michael Hanselmann | self.assertEqual(utils.ReadFile(utils.PathJoin(self.tmpdir, "rsa.public")), |
235 | d12b9f66 | Michael Hanselmann | "rsapub")
|
236 | d12b9f66 | Michael Hanselmann | self.assertEqual(utils.ReadFile(utils.PathJoin(self.tmpdir, "rsa.private")), |
237 | d12b9f66 | Michael Hanselmann | "rsapriv")
|
238 | d12b9f66 | Michael Hanselmann | self.assertEqual(utils.ReadFile(utils.PathJoin(self.tmpdir, "dsa.public")), |
239 | d12b9f66 | Michael Hanselmann | "dsapub")
|
240 | d12b9f66 | Michael Hanselmann | self.assertEqual(utils.ReadFile(utils.PathJoin(self.tmpdir, "dsa.private")), |
241 | d12b9f66 | Michael Hanselmann | "dsapriv")
|
242 | d12b9f66 | Michael Hanselmann | |
243 | d12b9f66 | Michael Hanselmann | def testSuccess(self): |
244 | d12b9f66 | Michael Hanselmann | self._TestUpdate(False) |
245 | d12b9f66 | Michael Hanselmann | |
246 | d12b9f66 | Michael Hanselmann | def testFailure(self): |
247 | d12b9f66 | Michael Hanselmann | self._TestUpdate(True) |
248 | d12b9f66 | Michael Hanselmann | |
249 | d12b9f66 | Michael Hanselmann | |
250 | d12b9f66 | Michael Hanselmann | class TestUpdateSshRoot(unittest.TestCase): |
251 | d12b9f66 | Michael Hanselmann | def setUp(self): |
252 | d12b9f66 | Michael Hanselmann | unittest.TestCase.setUp(self)
|
253 | d12b9f66 | Michael Hanselmann | self.tmpdir = tempfile.mkdtemp()
|
254 | d12b9f66 | Michael Hanselmann | self.sshdir = utils.PathJoin(self.tmpdir, ".ssh") |
255 | d12b9f66 | Michael Hanselmann | |
256 | d12b9f66 | Michael Hanselmann | def tearDown(self): |
257 | d12b9f66 | Michael Hanselmann | unittest.TestCase.tearDown(self)
|
258 | d12b9f66 | Michael Hanselmann | shutil.rmtree(self.tmpdir)
|
259 | d12b9f66 | Michael Hanselmann | |
260 | d12b9f66 | Michael Hanselmann | def _GetHomeDir(self, user): |
261 | d12b9f66 | Michael Hanselmann | self.assertEqual(user, constants.SSH_LOGIN_USER)
|
262 | d12b9f66 | Michael Hanselmann | return self.tmpdir |
263 | d12b9f66 | Michael Hanselmann | |
264 | d12b9f66 | Michael Hanselmann | def testNoKeys(self): |
265 | d12b9f66 | Michael Hanselmann | data_empty_keys = { |
266 | d12b9f66 | Michael Hanselmann | constants.SSHS_SSH_ROOT_KEY: [], |
267 | d12b9f66 | Michael Hanselmann | } |
268 | d12b9f66 | Michael Hanselmann | |
269 | d12b9f66 | Michael Hanselmann | for data in [{}, data_empty_keys]: |
270 | d12b9f66 | Michael Hanselmann | for dry_run in [False, True]: |
271 | d12b9f66 | Michael Hanselmann | prepare_node_join.UpdateSshRoot(data, dry_run, |
272 | d12b9f66 | Michael Hanselmann | _homedir_fn=NotImplemented)
|
273 | d12b9f66 | Michael Hanselmann | self.assertEqual(os.listdir(self.tmpdir), []) |
274 | d12b9f66 | Michael Hanselmann | |
275 | d12b9f66 | Michael Hanselmann | def testDryRun(self): |
276 | d12b9f66 | Michael Hanselmann | data = { |
277 | d12b9f66 | Michael Hanselmann | constants.SSHS_SSH_ROOT_KEY: [ |
278 | d12b9f66 | Michael Hanselmann | (constants.SSHK_RSA, "aaa", "bbb"), |
279 | d12b9f66 | Michael Hanselmann | ] |
280 | d12b9f66 | Michael Hanselmann | } |
281 | d12b9f66 | Michael Hanselmann | |
282 | d12b9f66 | Michael Hanselmann | prepare_node_join.UpdateSshRoot(data, True,
|
283 | d12b9f66 | Michael Hanselmann | _homedir_fn=self._GetHomeDir)
|
284 | d12b9f66 | Michael Hanselmann | self.assertEqual(os.listdir(self.tmpdir), [".ssh"]) |
285 | d12b9f66 | Michael Hanselmann | self.assertEqual(os.listdir(self.sshdir), []) |
286 | d12b9f66 | Michael Hanselmann | |
287 | d12b9f66 | Michael Hanselmann | def testUpdate(self): |
288 | d12b9f66 | Michael Hanselmann | data = { |
289 | d12b9f66 | Michael Hanselmann | constants.SSHS_SSH_ROOT_KEY: [ |
290 | 340ae7da | Michael Hanselmann | (constants.SSHK_DSA, "privatedsa", "ssh-dss pubdsa"), |
291 | d12b9f66 | Michael Hanselmann | ] |
292 | d12b9f66 | Michael Hanselmann | } |
293 | d12b9f66 | Michael Hanselmann | |
294 | d12b9f66 | Michael Hanselmann | prepare_node_join.UpdateSshRoot(data, False,
|
295 | d12b9f66 | Michael Hanselmann | _homedir_fn=self._GetHomeDir)
|
296 | d12b9f66 | Michael Hanselmann | self.assertEqual(os.listdir(self.tmpdir), [".ssh"]) |
297 | d12b9f66 | Michael Hanselmann | self.assertEqual(sorted(os.listdir(self.sshdir)), |
298 | d12b9f66 | Michael Hanselmann | sorted(["authorized_keys", "id_dsa", "id_dsa.pub"])) |
299 | d12b9f66 | Michael Hanselmann | self.assertEqual(utils.ReadFile(utils.PathJoin(self.sshdir, "id_dsa")), |
300 | d12b9f66 | Michael Hanselmann | "privatedsa")
|
301 | d12b9f66 | Michael Hanselmann | self.assertEqual(utils.ReadFile(utils.PathJoin(self.sshdir, "id_dsa.pub")), |
302 | 910ef222 | Michael Hanselmann | "ssh-dss pubdsa")
|
303 | d12b9f66 | Michael Hanselmann | self.assertEqual(utils.ReadFile(utils.PathJoin(self.sshdir, |
304 | d12b9f66 | Michael Hanselmann | "authorized_keys")),
|
305 | d12b9f66 | Michael Hanselmann | "ssh-dss pubdsa\n")
|
306 | d12b9f66 | Michael Hanselmann | |
307 | d12b9f66 | Michael Hanselmann | |
308 | d12b9f66 | Michael Hanselmann | if __name__ == "__main__": |
309 | d12b9f66 | Michael Hanselmann | testutils.GanetiTestProgram() |