Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.ssh_unittest.py @ 14933c17

History | View | Annotate | Download (5.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 a9542a4f Thomas Thrainer
        "%s ssh-rsa %s\n%s ssh-dss %s\n" %
50 a9542a4f Thomas Thrainer
        (cfg.GetClusterName(), mocks.FAKE_CLUSTER_KEY,
51 a9542a4f Thomas Thrainer
         cfg.GetClusterName(), mocks.FAKE_CLUSTER_KEY))
52 75a5f456 Michael Hanselmann
53 75a5f456 Michael Hanselmann
54 8a3c9e8a Michael Hanselmann
class TestGetUserFiles(unittest.TestCase):
55 8a3c9e8a Michael Hanselmann
  def setUp(self):
56 8a3c9e8a Michael Hanselmann
    self.tmpdir = tempfile.mkdtemp()
57 8a3c9e8a Michael Hanselmann
58 8a3c9e8a Michael Hanselmann
  def tearDown(self):
59 8a3c9e8a Michael Hanselmann
    shutil.rmtree(self.tmpdir)
60 8a3c9e8a Michael Hanselmann
61 8a3c9e8a Michael Hanselmann
  @staticmethod
62 8a3c9e8a Michael Hanselmann
  def _GetNoHomedir(_):
63 8a3c9e8a Michael Hanselmann
    return None
64 8a3c9e8a Michael Hanselmann
65 8a3c9e8a Michael Hanselmann
  def _GetTempHomedir(self, _):
66 8a3c9e8a Michael Hanselmann
    return self.tmpdir
67 8a3c9e8a Michael Hanselmann
68 8a3c9e8a Michael Hanselmann
  def testNonExistantUser(self):
69 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
70 8a3c9e8a Michael Hanselmann
      self.assertRaises(errors.OpExecError, ssh.GetUserFiles, "example",
71 8a3c9e8a Michael Hanselmann
                        kind=kind, _homedir_fn=self._GetNoHomedir)
72 8a3c9e8a Michael Hanselmann
73 8a3c9e8a Michael Hanselmann
  def testUnknownKind(self):
74 8a3c9e8a Michael Hanselmann
    kind = "something-else"
75 8a3c9e8a Michael Hanselmann
    assert kind not in constants.SSHK_ALL
76 8a3c9e8a Michael Hanselmann
    self.assertRaises(errors.ProgrammerError, ssh.GetUserFiles, "example4645",
77 8a3c9e8a Michael Hanselmann
                      kind=kind, _homedir_fn=self._GetTempHomedir)
78 8a3c9e8a Michael Hanselmann
79 8a3c9e8a Michael Hanselmann
    self.assertEqual(os.listdir(self.tmpdir), [])
80 8a3c9e8a Michael Hanselmann
81 8a3c9e8a Michael Hanselmann
  def testNoSshDirectory(self):
82 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
83 8a3c9e8a Michael Hanselmann
      self.assertRaises(errors.OpExecError, ssh.GetUserFiles, "example29694",
84 8a3c9e8a Michael Hanselmann
                        kind=kind, _homedir_fn=self._GetTempHomedir)
85 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [])
86 8a3c9e8a Michael Hanselmann
87 8a3c9e8a Michael Hanselmann
  def testSshIsFile(self):
88 8a3c9e8a Michael Hanselmann
    utils.WriteFile(os.path.join(self.tmpdir, ".ssh"), data="")
89 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
90 8a3c9e8a Michael Hanselmann
      self.assertRaises(errors.OpExecError, ssh.GetUserFiles, "example26237",
91 8a3c9e8a Michael Hanselmann
                        kind=kind, _homedir_fn=self._GetTempHomedir)
92 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [".ssh"])
93 8a3c9e8a Michael Hanselmann
94 8a3c9e8a Michael Hanselmann
  def testMakeSshDirectory(self):
95 8a3c9e8a Michael Hanselmann
    sshdir = os.path.join(self.tmpdir, ".ssh")
96 8a3c9e8a Michael Hanselmann
97 8a3c9e8a Michael Hanselmann
    self.assertEqual(os.listdir(self.tmpdir), [])
98 8a3c9e8a Michael Hanselmann
99 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
100 8a3c9e8a Michael Hanselmann
      ssh.GetUserFiles("example20745", mkdir=True, kind=kind,
101 8a3c9e8a Michael Hanselmann
                       _homedir_fn=self._GetTempHomedir)
102 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [".ssh"])
103 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.stat(sshdir).st_mode & 0777, 0700)
104 8a3c9e8a Michael Hanselmann
105 8a3c9e8a Michael Hanselmann
  def testFilenames(self):
106 8a3c9e8a Michael Hanselmann
    sshdir = os.path.join(self.tmpdir, ".ssh")
107 8a3c9e8a Michael Hanselmann
108 8a3c9e8a Michael Hanselmann
    os.mkdir(sshdir)
109 8a3c9e8a Michael Hanselmann
110 8a3c9e8a Michael Hanselmann
    for kind in constants.SSHK_ALL:
111 8a3c9e8a Michael Hanselmann
      result = ssh.GetUserFiles("example15103", mkdir=False, kind=kind,
112 8a3c9e8a Michael Hanselmann
                                _homedir_fn=self._GetTempHomedir)
113 8a3c9e8a Michael Hanselmann
      self.assertEqual(result, [
114 8a3c9e8a Michael Hanselmann
        os.path.join(self.tmpdir, ".ssh", "id_%s" % kind),
115 8a3c9e8a Michael Hanselmann
        os.path.join(self.tmpdir, ".ssh", "id_%s.pub" % kind),
116 8a3c9e8a Michael Hanselmann
        os.path.join(self.tmpdir, ".ssh", "authorized_keys"),
117 8a3c9e8a Michael Hanselmann
        ])
118 8a3c9e8a Michael Hanselmann
119 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [".ssh"])
120 8a3c9e8a Michael Hanselmann
      self.assertEqual(os.listdir(sshdir), [])
121 8a3c9e8a Michael Hanselmann
122 7bd70e6b Michael Hanselmann
  def testNoDirCheck(self):
123 7bd70e6b Michael Hanselmann
    self.assertEqual(os.listdir(self.tmpdir), [])
124 7bd70e6b Michael Hanselmann
125 7bd70e6b Michael Hanselmann
    for kind in constants.SSHK_ALL:
126 7bd70e6b Michael Hanselmann
      ssh.GetUserFiles("example14528", mkdir=False, dircheck=False, kind=kind,
127 7bd70e6b Michael Hanselmann
                       _homedir_fn=self._GetTempHomedir)
128 7bd70e6b Michael Hanselmann
      self.assertEqual(os.listdir(self.tmpdir), [])
129 7bd70e6b Michael Hanselmann
130 5484cda5 Michael Hanselmann
  def testGetAllUserFiles(self):
131 5484cda5 Michael Hanselmann
    result = ssh.GetAllUserFiles("example7475", mkdir=False, dircheck=False,
132 5484cda5 Michael Hanselmann
                                 _homedir_fn=self._GetTempHomedir)
133 5484cda5 Michael Hanselmann
    self.assertEqual(result,
134 5484cda5 Michael Hanselmann
      (os.path.join(self.tmpdir, ".ssh", "authorized_keys"), {
135 5484cda5 Michael Hanselmann
        constants.SSHK_RSA:
136 5484cda5 Michael Hanselmann
          (os.path.join(self.tmpdir, ".ssh", "id_rsa"),
137 5484cda5 Michael Hanselmann
           os.path.join(self.tmpdir, ".ssh", "id_rsa.pub")),
138 5484cda5 Michael Hanselmann
        constants.SSHK_DSA:
139 5484cda5 Michael Hanselmann
          (os.path.join(self.tmpdir, ".ssh", "id_dsa"),
140 5484cda5 Michael Hanselmann
           os.path.join(self.tmpdir, ".ssh", "id_dsa.pub")),
141 5484cda5 Michael Hanselmann
      }))
142 5484cda5 Michael Hanselmann
    self.assertEqual(os.listdir(self.tmpdir), [])
143 5484cda5 Michael Hanselmann
144 5484cda5 Michael Hanselmann
  def testGetAllUserFilesNoDirectoryNoMkdir(self):
145 5484cda5 Michael Hanselmann
    self.assertRaises(errors.OpExecError, ssh.GetAllUserFiles,
146 5484cda5 Michael Hanselmann
                      "example17270", mkdir=False, dircheck=True,
147 5484cda5 Michael Hanselmann
                      _homedir_fn=self._GetTempHomedir)
148 5484cda5 Michael Hanselmann
    self.assertEqual(os.listdir(self.tmpdir), [])
149 5484cda5 Michael Hanselmann
150 8a3c9e8a Michael Hanselmann
151 8a3c9e8a Michael Hanselmann
if __name__ == "__main__":
152 25231ec5 Michael Hanselmann
  testutils.GanetiTestProgram()