Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.ssh_unittest.py @ 8a3c9e8a

History | View | Annotate | Download (4.1 kB)

1 75a5f456 Michael Hanselmann
#!/usr/bin/python
2 75a5f456 Michael Hanselmann
#
3 75a5f456 Michael Hanselmann
4 75a5f456 Michael Hanselmann
# Copyright (C) 2006, 2007, 2008 Google Inc.
5 75a5f456 Michael Hanselmann
#
6 75a5f456 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 75a5f456 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 75a5f456 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 75a5f456 Michael Hanselmann
# (at your option) any later version.
10 75a5f456 Michael Hanselmann
#
11 75a5f456 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 75a5f456 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 75a5f456 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 75a5f456 Michael Hanselmann
# General Public License for more details.
15 75a5f456 Michael Hanselmann
#
16 75a5f456 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 75a5f456 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 75a5f456 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 75a5f456 Michael Hanselmann
# 02110-1301, USA.
20 75a5f456 Michael Hanselmann
21 75a5f456 Michael Hanselmann
22 75a5f456 Michael Hanselmann
"""Script for unittesting the ssh module"""
23 75a5f456 Michael Hanselmann
24 75a5f456 Michael Hanselmann
import os
25 75a5f456 Michael Hanselmann
import tempfile
26 75a5f456 Michael Hanselmann
import unittest
27 8a3c9e8a Michael Hanselmann
import shutil
28 75a5f456 Michael Hanselmann
29 75a5f456 Michael Hanselmann
import testutils
30 75a5f456 Michael Hanselmann
import mocks
31 75a5f456 Michael Hanselmann
32 75a5f456 Michael Hanselmann
from ganeti import constants
33 75a5f456 Michael Hanselmann
from ganeti import utils
34 75a5f456 Michael Hanselmann
from ganeti import ssh
35 8a3c9e8a Michael Hanselmann
from ganeti import errors
36 75a5f456 Michael Hanselmann
37 75a5f456 Michael Hanselmann
38 75a5f456 Michael Hanselmann
class TestKnownHosts(testutils.GanetiTestCase):
39 75a5f456 Michael Hanselmann
  """Test case for function writing the known_hosts file"""
40 75a5f456 Michael Hanselmann
41 75a5f456 Michael Hanselmann
  def setUp(self):
42 51596eb2 Iustin Pop
    testutils.GanetiTestCase.setUp(self)
43 51596eb2 Iustin Pop
    self.tmpfile = self._CreateTempFile()
44 75a5f456 Michael Hanselmann
45 75a5f456 Michael Hanselmann
  def test(self):
46 75a5f456 Michael Hanselmann
    cfg = mocks.FakeConfig()
47 51596eb2 Iustin Pop
    ssh.WriteKnownHostsFile(cfg, self.tmpfile)
48 51596eb2 Iustin Pop
    self.assertFileContent(self.tmpfile,
49 7688d0d3 Michael Hanselmann
        "%s ssh-rsa %s\n" % (cfg.GetClusterName(),
50 75a5f456 Michael Hanselmann
                             mocks.FAKE_CLUSTER_KEY))
51 75a5f456 Michael Hanselmann
52 33993ab8 René Nussbaumer
  def testFormatParamikoFingerprintCorrect(self):
53 33993ab8 René Nussbaumer
    self.assertEqual(ssh.FormatParamikoFingerprint("C0Ffee"), "c0:ff:ee")
54 33993ab8 René Nussbaumer
55 33993ab8 René Nussbaumer
  def testFormatParamikoFingerprintNotDividableByTwo(self):
56 33993ab8 René Nussbaumer
    self.assertRaises(AssertionError, ssh.FormatParamikoFingerprint, "C0Ffe")
57 33993ab8 René Nussbaumer
58 75a5f456 Michael Hanselmann
59 8a3c9e8a Michael Hanselmann
class TestGetUserFiles(unittest.TestCase):
60 8a3c9e8a Michael Hanselmann
  def setUp(self):
61 8a3c9e8a Michael Hanselmann
    self.tmpdir = tempfile.mkdtemp()
62 8a3c9e8a Michael Hanselmann
63 8a3c9e8a Michael Hanselmann
  def tearDown(self):
64 8a3c9e8a Michael Hanselmann
    shutil.rmtree(self.tmpdir)
65 8a3c9e8a Michael Hanselmann
66 8a3c9e8a Michael Hanselmann
  @staticmethod
67 8a3c9e8a Michael Hanselmann
  def _GetNoHomedir(_):
68 8a3c9e8a Michael Hanselmann
    return None
69 8a3c9e8a Michael Hanselmann
70 8a3c9e8a Michael Hanselmann
  def _GetTempHomedir(self, _):
71 8a3c9e8a Michael Hanselmann
    return self.tmpdir
72 8a3c9e8a Michael Hanselmann
73 8a3c9e8a Michael Hanselmann
  def testNonExistantUser(self):
74 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
75 8a3c9e8a Michael Hanselmann
      self.assertRaises(errors.OpExecError, ssh.GetUserFiles, "example",
76 8a3c9e8a Michael Hanselmann
                        kind=kind, _homedir_fn=self._GetNoHomedir)
77 8a3c9e8a Michael Hanselmann
78 8a3c9e8a Michael Hanselmann
  def testUnknownKind(self):
79 8a3c9e8a Michael Hanselmann
    kind = "something-else"
80 8a3c9e8a Michael Hanselmann
    assert kind not in constants.SSHK_ALL
81 8a3c9e8a Michael Hanselmann
    self.assertRaises(errors.ProgrammerError, ssh.GetUserFiles, "example4645",
82 8a3c9e8a Michael Hanselmann
                      kind=kind, _homedir_fn=self._GetTempHomedir)
83 8a3c9e8a Michael Hanselmann
84 8a3c9e8a Michael Hanselmann
    self.assertEqual(os.listdir(self.tmpdir), [])
85 8a3c9e8a Michael Hanselmann
86 8a3c9e8a Michael Hanselmann
  def testNoSshDirectory(self):
87 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
88 8a3c9e8a Michael Hanselmann
      self.assertRaises(errors.OpExecError, ssh.GetUserFiles, "example29694",
89 8a3c9e8a Michael Hanselmann
                        kind=kind, _homedir_fn=self._GetTempHomedir)
90 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [])
91 8a3c9e8a Michael Hanselmann
92 8a3c9e8a Michael Hanselmann
  def testSshIsFile(self):
93 8a3c9e8a Michael Hanselmann
    utils.WriteFile(os.path.join(self.tmpdir, ".ssh"), data="")
94 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
95 8a3c9e8a Michael Hanselmann
      self.assertRaises(errors.OpExecError, ssh.GetUserFiles, "example26237",
96 8a3c9e8a Michael Hanselmann
                        kind=kind, _homedir_fn=self._GetTempHomedir)
97 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [".ssh"])
98 8a3c9e8a Michael Hanselmann
99 8a3c9e8a Michael Hanselmann
  def testMakeSshDirectory(self):
100 8a3c9e8a Michael Hanselmann
    sshdir = os.path.join(self.tmpdir, ".ssh")
101 8a3c9e8a Michael Hanselmann
102 8a3c9e8a Michael Hanselmann
    self.assertEqual(os.listdir(self.tmpdir), [])
103 8a3c9e8a Michael Hanselmann
104 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
105 8a3c9e8a Michael Hanselmann
      ssh.GetUserFiles("example20745", mkdir=True, kind=kind,
106 8a3c9e8a Michael Hanselmann
                       _homedir_fn=self._GetTempHomedir)
107 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [".ssh"])
108 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.stat(sshdir).st_mode & 0777, 0700)
109 8a3c9e8a Michael Hanselmann
110 8a3c9e8a Michael Hanselmann
  def testFilenames(self):
111 8a3c9e8a Michael Hanselmann
    sshdir = os.path.join(self.tmpdir, ".ssh")
112 8a3c9e8a Michael Hanselmann
113 8a3c9e8a Michael Hanselmann
    os.mkdir(sshdir)
114 8a3c9e8a Michael Hanselmann
115 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
116 8a3c9e8a Michael Hanselmann
      result = ssh.GetUserFiles("example15103", mkdir=False, kind=kind,
117 8a3c9e8a Michael Hanselmann
                                _homedir_fn=self._GetTempHomedir)
118 8a3c9e8a Michael Hanselmann
      self.assertEqual(result, [
119 8a3c9e8a Michael Hanselmann
        os.path.join(self.tmpdir, ".ssh", "id_%s" % kind),
120 8a3c9e8a Michael Hanselmann
        os.path.join(self.tmpdir, ".ssh", "id_%s.pub" % kind),
121 8a3c9e8a Michael Hanselmann
        os.path.join(self.tmpdir, ".ssh", "authorized_keys"),
122 8a3c9e8a Michael Hanselmann
        ])
123 8a3c9e8a Michael Hanselmann
124 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [".ssh"])
125 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(sshdir), [])
126 8a3c9e8a Michael Hanselmann
127 8a3c9e8a Michael Hanselmann
128 8a3c9e8a Michael Hanselmann
if __name__ == "__main__":
129 25231ec5 Michael Hanselmann
  testutils.GanetiTestProgram()