Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.bootstrap_unittest.py @ 3039e2dc

History | View | Annotate | Download (3.9 kB)

1 5030cff3 Helga Velroyen
#!/usr/bin/python
2 5030cff3 Helga Velroyen
#
3 5030cff3 Helga Velroyen
4 5030cff3 Helga Velroyen
# Copyright (C) 2013 Google Inc.
5 5030cff3 Helga Velroyen
#
6 5030cff3 Helga Velroyen
# This program is free software; you can redistribute it and/or modify
7 5030cff3 Helga Velroyen
# it under the terms of the GNU General Public License as published by
8 5030cff3 Helga Velroyen
# the Free Software Foundation; either version 2 of the License, or
9 5030cff3 Helga Velroyen
# (at your option) any later version.
10 5030cff3 Helga Velroyen
#
11 5030cff3 Helga Velroyen
# This program is distributed in the hope that it will be useful, but
12 5030cff3 Helga Velroyen
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 5030cff3 Helga Velroyen
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 5030cff3 Helga Velroyen
# General Public License for more details.
15 5030cff3 Helga Velroyen
#
16 5030cff3 Helga Velroyen
# You should have received a copy of the GNU General Public License
17 5030cff3 Helga Velroyen
# along with this program; if not, write to the Free Software
18 5030cff3 Helga Velroyen
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 5030cff3 Helga Velroyen
# 02110-1301, USA.
20 5030cff3 Helga Velroyen
21 5030cff3 Helga Velroyen
22 5030cff3 Helga Velroyen
"""Script for testing ganeti.bootstrap"""
23 5030cff3 Helga Velroyen
24 5030cff3 Helga Velroyen
import shutil
25 5030cff3 Helga Velroyen
import tempfile
26 5030cff3 Helga Velroyen
import unittest
27 5030cff3 Helga Velroyen
28 5030cff3 Helga Velroyen
from ganeti import bootstrap
29 5030cff3 Helga Velroyen
from ganeti import constants
30 5030cff3 Helga Velroyen
from ganeti import errors
31 3039e2dc Helga Velroyen
from ganeti import pathutils
32 5030cff3 Helga Velroyen
33 5030cff3 Helga Velroyen
import testutils
34 3039e2dc Helga Velroyen
import mock
35 5030cff3 Helga Velroyen
36 5030cff3 Helga Velroyen
37 5030cff3 Helga Velroyen
class TestPrepareFileStorage(unittest.TestCase):
38 5030cff3 Helga Velroyen
  def setUp(self):
39 3039e2dc Helga Velroyen
    unittest.TestCase.setUp(self)
40 5030cff3 Helga Velroyen
    self.tmpdir = tempfile.mkdtemp()
41 5030cff3 Helga Velroyen
42 5030cff3 Helga Velroyen
  def tearDown(self):
43 5030cff3 Helga Velroyen
    shutil.rmtree(self.tmpdir)
44 5030cff3 Helga Velroyen
45 3039e2dc Helga Velroyen
  def enableFileStorage(self, enable):
46 3039e2dc Helga Velroyen
    self.enabled_disk_templates = []
47 3039e2dc Helga Velroyen
    if enable:
48 3039e2dc Helga Velroyen
      self.enabled_disk_templates.append(constants.DT_FILE)
49 3039e2dc Helga Velroyen
    else:
50 3039e2dc Helga Velroyen
      # anything != DT_FILE would do here
51 3039e2dc Helga Velroyen
      self.enabled_disk_templates.append(constants.DT_DISKLESS)
52 3039e2dc Helga Velroyen
53 3039e2dc Helga Velroyen
  def testFallBackToDefaultPathAcceptedFileStorageEnabled(self):
54 3039e2dc Helga Velroyen
    expected_file_storage_dir = pathutils.DEFAULT_FILE_STORAGE_DIR
55 3039e2dc Helga Velroyen
    acceptance_fn = mock.Mock()
56 3039e2dc Helga Velroyen
    init_fn = mock.Mock(return_value=expected_file_storage_dir)
57 3039e2dc Helga Velroyen
    self.enableFileStorage(True)
58 5030cff3 Helga Velroyen
    file_storage_dir = bootstrap._PrepareFileStorage(
59 3039e2dc Helga Velroyen
        self.enabled_disk_templates, None, acceptance_fn=acceptance_fn,
60 3039e2dc Helga Velroyen
        init_fn=init_fn)
61 3039e2dc Helga Velroyen
    self.assertEqual(expected_file_storage_dir, file_storage_dir)
62 3039e2dc Helga Velroyen
    acceptance_fn.assert_called_with(expected_file_storage_dir)
63 3039e2dc Helga Velroyen
    init_fn.assert_called_with(expected_file_storage_dir)
64 3039e2dc Helga Velroyen
65 3039e2dc Helga Velroyen
  def testPathAcceptedFileStorageEnabled(self):
66 3039e2dc Helga Velroyen
    acceptance_fn = mock.Mock()
67 3039e2dc Helga Velroyen
    init_fn = mock.Mock(return_value=self.tmpdir)
68 3039e2dc Helga Velroyen
    self.enableFileStorage(True)
69 3039e2dc Helga Velroyen
    file_storage_dir = bootstrap._PrepareFileStorage(
70 3039e2dc Helga Velroyen
        self.enabled_disk_templates, self.tmpdir, acceptance_fn=acceptance_fn,
71 3039e2dc Helga Velroyen
        init_fn=init_fn)
72 5030cff3 Helga Velroyen
    self.assertEqual(self.tmpdir, file_storage_dir)
73 3039e2dc Helga Velroyen
    acceptance_fn.assert_called_with(self.tmpdir)
74 3039e2dc Helga Velroyen
    init_fn.assert_called_with(self.tmpdir)
75 5030cff3 Helga Velroyen
76 3039e2dc Helga Velroyen
  def testPathAcceptedFileStorageDisabled(self):
77 3039e2dc Helga Velroyen
    acceptance_fn = mock.Mock()
78 3039e2dc Helga Velroyen
    init_fn = mock.Mock()
79 3039e2dc Helga Velroyen
    self.enableFileStorage(False)
80 5030cff3 Helga Velroyen
    file_storage_dir = bootstrap._PrepareFileStorage(
81 3039e2dc Helga Velroyen
        self.enabled_disk_templates, self.tmpdir, acceptance_fn=acceptance_fn,
82 3039e2dc Helga Velroyen
        init_fn=init_fn)
83 3039e2dc Helga Velroyen
    self.assertEqual(self.tmpdir, file_storage_dir)
84 3039e2dc Helga Velroyen
    self.assertFalse(init_fn.called)
85 3039e2dc Helga Velroyen
    self.assertFalse(acceptance_fn.called)
86 3039e2dc Helga Velroyen
87 3039e2dc Helga Velroyen
  def testPathNotAccepted(self):
88 3039e2dc Helga Velroyen
    acceptance_fn = mock.Mock()
89 3039e2dc Helga Velroyen
    acceptance_fn.side_effect = errors.FileStoragePathError
90 3039e2dc Helga Velroyen
    init_fn = mock.Mock()
91 3039e2dc Helga Velroyen
    self.enableFileStorage(True)
92 3039e2dc Helga Velroyen
    self.assertRaises(errors.OpPrereqError, bootstrap._PrepareFileStorage,
93 3039e2dc Helga Velroyen
        self.enabled_disk_templates, self.tmpdir, acceptance_fn=acceptance_fn,
94 3039e2dc Helga Velroyen
        init_fn=init_fn)
95 3039e2dc Helga Velroyen
    acceptance_fn.assert_called_with(self.tmpdir)
96 5030cff3 Helga Velroyen
97 5030cff3 Helga Velroyen
98 5030cff3 Helga Velroyen
class TestInitCheckEnabledDiskTemplates(unittest.TestCase):
99 5030cff3 Helga Velroyen
  def testValidTemplates(self):
100 5030cff3 Helga Velroyen
    enabled_disk_templates = list(constants.DISK_TEMPLATES)
101 5030cff3 Helga Velroyen
    bootstrap._InitCheckEnabledDiskTemplates(enabled_disk_templates)
102 5030cff3 Helga Velroyen
103 5030cff3 Helga Velroyen
  def testInvalidTemplates(self):
104 5030cff3 Helga Velroyen
    enabled_disk_templates = ["pinkbunny"]
105 5030cff3 Helga Velroyen
    self.assertRaises(errors.OpPrereqError,
106 5030cff3 Helga Velroyen
        bootstrap._InitCheckEnabledDiskTemplates, enabled_disk_templates)
107 5030cff3 Helga Velroyen
108 5030cff3 Helga Velroyen
  def testEmptyTemplates(self):
109 5030cff3 Helga Velroyen
    enabled_disk_templates = []
110 5030cff3 Helga Velroyen
    self.assertRaises(errors.OpPrereqError,
111 5030cff3 Helga Velroyen
        bootstrap._InitCheckEnabledDiskTemplates, enabled_disk_templates)
112 5030cff3 Helga Velroyen
113 5030cff3 Helga Velroyen
114 5030cff3 Helga Velroyen
if __name__ == "__main__":
115 5030cff3 Helga Velroyen
  testutils.GanetiTestProgram()