Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.ssh_unittest.py @ 1a2eb2dc

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