Statistics
| Branch: | Tag: | Revision:

root / test / cfgupgrade_unittest.py @ 1a2eb2dc

History | View | Annotate | Download (13.9 kB)

1 aefbe369 Michael Hanselmann
#!/usr/bin/python
2 aefbe369 Michael Hanselmann
#
3 aefbe369 Michael Hanselmann
4 93fd9bb1 Iustin Pop
# Copyright (C) 2010, 2012 Google Inc.
5 aefbe369 Michael Hanselmann
#
6 aefbe369 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 aefbe369 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 aefbe369 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 aefbe369 Michael Hanselmann
# (at your option) any later version.
10 aefbe369 Michael Hanselmann
#
11 aefbe369 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 aefbe369 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 aefbe369 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 aefbe369 Michael Hanselmann
# General Public License for more details.
15 aefbe369 Michael Hanselmann
#
16 aefbe369 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 aefbe369 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 aefbe369 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 aefbe369 Michael Hanselmann
# 02110-1301, USA.
20 aefbe369 Michael Hanselmann
21 aefbe369 Michael Hanselmann
22 aefbe369 Michael Hanselmann
"""Script for testing tools/cfgupgrade"""
23 aefbe369 Michael Hanselmann
24 aefbe369 Michael Hanselmann
import os
25 aefbe369 Michael Hanselmann
import sys
26 aefbe369 Michael Hanselmann
import unittest
27 aefbe369 Michael Hanselmann
import shutil
28 aefbe369 Michael Hanselmann
import tempfile
29 aefbe369 Michael Hanselmann
import operator
30 aefbe369 Michael Hanselmann
31 aefbe369 Michael Hanselmann
from ganeti import constants
32 aefbe369 Michael Hanselmann
from ganeti import utils
33 aefbe369 Michael Hanselmann
from ganeti import errors
34 aefbe369 Michael Hanselmann
from ganeti import serializer
35 011974df Michael Hanselmann
from ganeti import netutils
36 aefbe369 Michael Hanselmann
37 aefbe369 Michael Hanselmann
import testutils
38 aefbe369 Michael Hanselmann
39 aefbe369 Michael Hanselmann
40 011974df Michael Hanselmann
def _RunUpgrade(path, dry_run, no_verify, ignore_hostname=True):
41 aefbe369 Michael Hanselmann
  cmd = [sys.executable, "%s/tools/cfgupgrade" % testutils.GetSourceDir(),
42 7939f60c Michael Hanselmann
         "--debug", "--force", "--path=%s" % path, "--confdir=%s" % path]
43 011974df Michael Hanselmann
44 011974df Michael Hanselmann
  if ignore_hostname:
45 011974df Michael Hanselmann
    cmd.append("--ignore-hostname")
46 aefbe369 Michael Hanselmann
  if dry_run:
47 aefbe369 Michael Hanselmann
    cmd.append("--dry-run")
48 aefbe369 Michael Hanselmann
  if no_verify:
49 aefbe369 Michael Hanselmann
    cmd.append("--no-verify")
50 aefbe369 Michael Hanselmann
51 aefbe369 Michael Hanselmann
  result = utils.RunCmd(cmd, cwd=os.getcwd())
52 aefbe369 Michael Hanselmann
  if result.failed:
53 aefbe369 Michael Hanselmann
    raise Exception("cfgupgrade failed: %s, output %r" %
54 aefbe369 Michael Hanselmann
                    (result.fail_reason, result.output))
55 aefbe369 Michael Hanselmann
56 aefbe369 Michael Hanselmann
57 aefbe369 Michael Hanselmann
class TestCfgupgrade(unittest.TestCase):
58 aefbe369 Michael Hanselmann
  def setUp(self):
59 aefbe369 Michael Hanselmann
    self.tmpdir = tempfile.mkdtemp()
60 aefbe369 Michael Hanselmann
61 aefbe369 Michael Hanselmann
    self.config_path = utils.PathJoin(self.tmpdir, "config.data")
62 aefbe369 Michael Hanselmann
    self.noded_cert_path = utils.PathJoin(self.tmpdir, "server.pem")
63 aefbe369 Michael Hanselmann
    self.rapi_cert_path = utils.PathJoin(self.tmpdir, "rapi.pem")
64 fdd9ac5b Michael Hanselmann
    self.rapi_users_path = utils.PathJoin(self.tmpdir, "rapi", "users")
65 fdd9ac5b Michael Hanselmann
    self.rapi_users_path_pre24 = utils.PathJoin(self.tmpdir, "rapi_users")
66 aefbe369 Michael Hanselmann
    self.known_hosts_path = utils.PathJoin(self.tmpdir, "known_hosts")
67 aefbe369 Michael Hanselmann
    self.confd_hmac_path = utils.PathJoin(self.tmpdir, "hmac.key")
68 aefbe369 Michael Hanselmann
    self.cds_path = utils.PathJoin(self.tmpdir, "cluster-domain-secret")
69 011974df Michael Hanselmann
    self.ss_master_node_path = utils.PathJoin(self.tmpdir, "ssconf_master_node")
70 7939f60c Michael Hanselmann
    self.file_storage_paths = utils.PathJoin(self.tmpdir, "file-storage-paths")
71 aefbe369 Michael Hanselmann
72 aefbe369 Michael Hanselmann
  def tearDown(self):
73 aefbe369 Michael Hanselmann
    shutil.rmtree(self.tmpdir)
74 aefbe369 Michael Hanselmann
75 aefbe369 Michael Hanselmann
  def _LoadConfig(self):
76 aefbe369 Michael Hanselmann
    return serializer.LoadJson(utils.ReadFile(self.config_path))
77 aefbe369 Michael Hanselmann
78 aefbe369 Michael Hanselmann
  def _CreateValidConfigDir(self):
79 aefbe369 Michael Hanselmann
    utils.WriteFile(self.noded_cert_path, data="")
80 aefbe369 Michael Hanselmann
    utils.WriteFile(self.known_hosts_path, data="")
81 011974df Michael Hanselmann
    utils.WriteFile(self.ss_master_node_path,
82 011974df Michael Hanselmann
                    data="node.has.another.name.example.net")
83 aefbe369 Michael Hanselmann
84 aefbe369 Michael Hanselmann
  def testNoConfigDir(self):
85 aefbe369 Michael Hanselmann
    self.assertFalse(utils.ListVisibleFiles(self.tmpdir))
86 aefbe369 Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, False, True)
87 aefbe369 Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, True, True)
88 aefbe369 Michael Hanselmann
89 011974df Michael Hanselmann
  def testWrongHostname(self):
90 011974df Michael Hanselmann
    self._CreateValidConfigDir()
91 011974df Michael Hanselmann
92 011974df Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson({
93 011974df Michael Hanselmann
      "version": constants.CONFIG_VERSION,
94 011974df Michael Hanselmann
      "cluster": {},
95 a19d8cd5 Iustin Pop
      "instances": {},
96 011974df Michael Hanselmann
      }))
97 011974df Michael Hanselmann
98 011974df Michael Hanselmann
    hostname = netutils.GetHostname().name
99 011974df Michael Hanselmann
    assert hostname != utils.ReadOneLineFile(self.ss_master_node_path)
100 011974df Michael Hanselmann
101 011974df Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, False, True,
102 011974df Michael Hanselmann
                      ignore_hostname=False)
103 011974df Michael Hanselmann
104 011974df Michael Hanselmann
  def testCorrectHostname(self):
105 011974df Michael Hanselmann
    self._CreateValidConfigDir()
106 011974df Michael Hanselmann
107 011974df Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson({
108 011974df Michael Hanselmann
      "version": constants.CONFIG_VERSION,
109 011974df Michael Hanselmann
      "cluster": {},
110 a19d8cd5 Iustin Pop
      "instances": {},
111 011974df Michael Hanselmann
      }))
112 011974df Michael Hanselmann
113 011974df Michael Hanselmann
    utils.WriteFile(self.ss_master_node_path,
114 011974df Michael Hanselmann
                    data="%s\n" % netutils.GetHostname().name)
115 011974df Michael Hanselmann
116 011974df Michael Hanselmann
    _RunUpgrade(self.tmpdir, False, True, ignore_hostname=False)
117 011974df Michael Hanselmann
118 aefbe369 Michael Hanselmann
  def testInconsistentConfig(self):
119 aefbe369 Michael Hanselmann
    self._CreateValidConfigDir()
120 aefbe369 Michael Hanselmann
    # There should be no "config_version"
121 aefbe369 Michael Hanselmann
    cfg = {
122 aefbe369 Michael Hanselmann
      "version": 0,
123 aefbe369 Michael Hanselmann
      "cluster": {
124 aefbe369 Michael Hanselmann
        "config_version": 0,
125 aefbe369 Michael Hanselmann
        },
126 a19d8cd5 Iustin Pop
      "instances": {},
127 aefbe369 Michael Hanselmann
      }
128 aefbe369 Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson(cfg))
129 aefbe369 Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, False, True)
130 aefbe369 Michael Hanselmann
131 aefbe369 Michael Hanselmann
  def testInvalidConfig(self):
132 aefbe369 Michael Hanselmann
    self._CreateValidConfigDir()
133 aefbe369 Michael Hanselmann
    # Missing version from config
134 aefbe369 Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson({}))
135 aefbe369 Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, False, True)
136 aefbe369 Michael Hanselmann
137 7939f60c Michael Hanselmann
  def _TestSimpleUpgrade(self, from_version, dry_run,
138 7939f60c Michael Hanselmann
                         file_storage_dir=None,
139 7939f60c Michael Hanselmann
                         shared_file_storage_dir=None):
140 7939f60c Michael Hanselmann
    cluster = {}
141 7939f60c Michael Hanselmann
142 7939f60c Michael Hanselmann
    if file_storage_dir:
143 7939f60c Michael Hanselmann
      cluster["file_storage_dir"] = file_storage_dir
144 7939f60c Michael Hanselmann
    if shared_file_storage_dir:
145 7939f60c Michael Hanselmann
      cluster["shared_file_storage_dir"] = shared_file_storage_dir
146 7939f60c Michael Hanselmann
147 aefbe369 Michael Hanselmann
    cfg = {
148 aefbe369 Michael Hanselmann
      "version": from_version,
149 7939f60c Michael Hanselmann
      "cluster": cluster,
150 a19d8cd5 Iustin Pop
      "instances": {},
151 aefbe369 Michael Hanselmann
      }
152 aefbe369 Michael Hanselmann
    self._CreateValidConfigDir()
153 aefbe369 Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson(cfg))
154 aefbe369 Michael Hanselmann
155 aefbe369 Michael Hanselmann
    self.assertFalse(os.path.isfile(self.rapi_cert_path))
156 aefbe369 Michael Hanselmann
    self.assertFalse(os.path.isfile(self.confd_hmac_path))
157 aefbe369 Michael Hanselmann
    self.assertFalse(os.path.isfile(self.cds_path))
158 aefbe369 Michael Hanselmann
159 aefbe369 Michael Hanselmann
    _RunUpgrade(self.tmpdir, dry_run, True)
160 aefbe369 Michael Hanselmann
161 aefbe369 Michael Hanselmann
    if dry_run:
162 aefbe369 Michael Hanselmann
      expversion = from_version
163 aefbe369 Michael Hanselmann
      checkfn = operator.not_
164 aefbe369 Michael Hanselmann
    else:
165 aefbe369 Michael Hanselmann
      expversion = constants.CONFIG_VERSION
166 aefbe369 Michael Hanselmann
      checkfn = operator.truth
167 aefbe369 Michael Hanselmann
168 aefbe369 Michael Hanselmann
    self.assert_(checkfn(os.path.isfile(self.rapi_cert_path)))
169 aefbe369 Michael Hanselmann
    self.assert_(checkfn(os.path.isfile(self.confd_hmac_path)))
170 aefbe369 Michael Hanselmann
    self.assert_(checkfn(os.path.isfile(self.cds_path)))
171 aefbe369 Michael Hanselmann
172 aefbe369 Michael Hanselmann
    newcfg = self._LoadConfig()
173 aefbe369 Michael Hanselmann
    self.assertEqual(newcfg["version"], expversion)
174 aefbe369 Michael Hanselmann
175 fdd9ac5b Michael Hanselmann
  def testRapiUsers(self):
176 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
177 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
178 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(os.path.dirname(self.rapi_users_path)))
179 fdd9ac5b Michael Hanselmann
180 fdd9ac5b Michael Hanselmann
    utils.WriteFile(self.rapi_users_path_pre24, data="some user\n")
181 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), False)
182 fdd9ac5b Michael Hanselmann
183 87c80992 Michael Hanselmann
    self.assertTrue(os.path.isdir(os.path.dirname(self.rapi_users_path)))
184 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.islink(self.rapi_users_path_pre24))
185 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.isfile(self.rapi_users_path))
186 87c80992 Michael Hanselmann
    self.assertEqual(os.readlink(self.rapi_users_path_pre24),
187 87c80992 Michael Hanselmann
                     self.rapi_users_path)
188 fdd9ac5b Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
189 fdd9ac5b Michael Hanselmann
      self.assertEqual(utils.ReadFile(path), "some user\n")
190 fdd9ac5b Michael Hanselmann
191 fdd9ac5b Michael Hanselmann
  def testRapiUsers24AndAbove(self):
192 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
193 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
194 fdd9ac5b Michael Hanselmann
195 fdd9ac5b Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
196 fdd9ac5b Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="other user\n")
197 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), False)
198 fdd9ac5b Michael Hanselmann
199 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.islink(self.rapi_users_path_pre24))
200 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.isfile(self.rapi_users_path))
201 87c80992 Michael Hanselmann
    self.assertEqual(os.readlink(self.rapi_users_path_pre24),
202 87c80992 Michael Hanselmann
                     self.rapi_users_path)
203 fdd9ac5b Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
204 fdd9ac5b Michael Hanselmann
      self.assertEqual(utils.ReadFile(path), "other user\n")
205 fdd9ac5b Michael Hanselmann
206 fdd9ac5b Michael Hanselmann
  def testRapiUsersExistingSymlink(self):
207 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
208 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
209 fdd9ac5b Michael Hanselmann
210 87c80992 Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
211 fdd9ac5b Michael Hanselmann
    os.symlink(self.rapi_users_path, self.rapi_users_path_pre24)
212 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="hello world\n")
213 fdd9ac5b Michael Hanselmann
214 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 2, 0), False)
215 fdd9ac5b Michael Hanselmann
216 87c80992 Michael Hanselmann
    self.assert_(os.path.isfile(self.rapi_users_path) and
217 87c80992 Michael Hanselmann
                 not os.path.islink(self.rapi_users_path))
218 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.islink(self.rapi_users_path_pre24))
219 87c80992 Michael Hanselmann
    self.assertEqual(os.readlink(self.rapi_users_path_pre24),
220 87c80992 Michael Hanselmann
                     self.rapi_users_path)
221 87c80992 Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
222 87c80992 Michael Hanselmann
      self.assertEqual(utils.ReadFile(path), "hello world\n")
223 87c80992 Michael Hanselmann
224 87c80992 Michael Hanselmann
  def testRapiUsersExistingTarget(self):
225 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
226 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
227 87c80992 Michael Hanselmann
228 87c80992 Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
229 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="other user\n")
230 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path_pre24, data="hello world\n")
231 87c80992 Michael Hanselmann
232 87c80992 Michael Hanselmann
    self.assertRaises(Exception, self._TestSimpleUpgrade,
233 87c80992 Michael Hanselmann
                      constants.BuildVersion(2, 2, 0), False)
234 87c80992 Michael Hanselmann
235 87c80992 Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
236 87c80992 Michael Hanselmann
      self.assert_(os.path.isfile(path) and not os.path.islink(path))
237 87c80992 Michael Hanselmann
    self.assertEqual(utils.ReadFile(self.rapi_users_path), "other user\n")
238 87c80992 Michael Hanselmann
    self.assertEqual(utils.ReadFile(self.rapi_users_path_pre24),
239 87c80992 Michael Hanselmann
                     "hello world\n")
240 87c80992 Michael Hanselmann
241 87c80992 Michael Hanselmann
  def testRapiUsersDryRun(self):
242 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
243 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
244 87c80992 Michael Hanselmann
245 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path_pre24, data="some user\n")
246 87c80992 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), True)
247 87c80992 Michael Hanselmann
248 87c80992 Michael Hanselmann
    self.assertFalse(os.path.isdir(os.path.dirname(self.rapi_users_path)))
249 87c80992 Michael Hanselmann
    self.assertTrue(os.path.isfile(self.rapi_users_path_pre24) and
250 87c80992 Michael Hanselmann
                    not os.path.islink(self.rapi_users_path_pre24))
251 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
252 87c80992 Michael Hanselmann
253 87c80992 Michael Hanselmann
  def testRapiUsers24AndAboveDryRun(self):
254 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
255 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
256 87c80992 Michael Hanselmann
257 87c80992 Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
258 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="other user\n")
259 87c80992 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), True)
260 87c80992 Michael Hanselmann
261 87c80992 Michael Hanselmann
    self.assertTrue(os.path.isfile(self.rapi_users_path) and
262 87c80992 Michael Hanselmann
                    not os.path.islink(self.rapi_users_path))
263 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
264 87c80992 Michael Hanselmann
    self.assertEqual(utils.ReadFile(self.rapi_users_path), "other user\n")
265 87c80992 Michael Hanselmann
266 87c80992 Michael Hanselmann
  def testRapiUsersExistingSymlinkDryRun(self):
267 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
268 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
269 87c80992 Michael Hanselmann
270 87c80992 Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
271 87c80992 Michael Hanselmann
    os.symlink(self.rapi_users_path, self.rapi_users_path_pre24)
272 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="hello world\n")
273 87c80992 Michael Hanselmann
274 87c80992 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 2, 0), True)
275 87c80992 Michael Hanselmann
276 87c80992 Michael Hanselmann
    self.assertTrue(os.path.islink(self.rapi_users_path_pre24))
277 87c80992 Michael Hanselmann
    self.assertTrue(os.path.isfile(self.rapi_users_path) and
278 87c80992 Michael Hanselmann
                    not os.path.islink(self.rapi_users_path))
279 87c80992 Michael Hanselmann
    self.assertEqual(os.readlink(self.rapi_users_path_pre24),
280 87c80992 Michael Hanselmann
                     self.rapi_users_path)
281 fdd9ac5b Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
282 fdd9ac5b Michael Hanselmann
      self.assertEqual(utils.ReadFile(path), "hello world\n")
283 fdd9ac5b Michael Hanselmann
284 7939f60c Michael Hanselmann
  def testFileStoragePathsDryRun(self):
285 7939f60c Michael Hanselmann
    self.assertFalse(os.path.exists(self.file_storage_paths))
286 7939f60c Michael Hanselmann
287 7939f60c Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 6, 0), True,
288 7939f60c Michael Hanselmann
                            file_storage_dir=self.tmpdir,
289 7939f60c Michael Hanselmann
                            shared_file_storage_dir="/tmp")
290 7939f60c Michael Hanselmann
291 7939f60c Michael Hanselmann
    self.assertFalse(os.path.exists(self.file_storage_paths))
292 7939f60c Michael Hanselmann
293 7939f60c Michael Hanselmann
  def testFileStoragePathsBoth(self):
294 7939f60c Michael Hanselmann
    self.assertFalse(os.path.exists(self.file_storage_paths))
295 7939f60c Michael Hanselmann
296 7939f60c Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 6, 0), False,
297 7939f60c Michael Hanselmann
                            file_storage_dir=self.tmpdir,
298 7939f60c Michael Hanselmann
                            shared_file_storage_dir="/tmp")
299 7939f60c Michael Hanselmann
300 7939f60c Michael Hanselmann
    lines = utils.ReadFile(self.file_storage_paths).splitlines()
301 7939f60c Michael Hanselmann
    self.assertTrue(lines.pop(0).startswith("# "))
302 7939f60c Michael Hanselmann
    self.assertTrue(lines.pop(0).startswith("# cfgupgrade"))
303 7939f60c Michael Hanselmann
    self.assertEqual(lines.pop(0), self.tmpdir)
304 7939f60c Michael Hanselmann
    self.assertEqual(lines.pop(0), "/tmp")
305 7939f60c Michael Hanselmann
    self.assertFalse(lines)
306 7939f60c Michael Hanselmann
    self.assertEqual(os.stat(self.file_storage_paths).st_mode & 0777,
307 7939f60c Michael Hanselmann
                     0600, msg="Wrong permissions")
308 7939f60c Michael Hanselmann
309 7939f60c Michael Hanselmann
  def testFileStoragePathsSharedOnly(self):
310 7939f60c Michael Hanselmann
    self.assertFalse(os.path.exists(self.file_storage_paths))
311 7939f60c Michael Hanselmann
312 7939f60c Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 5, 0), False,
313 7939f60c Michael Hanselmann
                            file_storage_dir=None,
314 7939f60c Michael Hanselmann
                            shared_file_storage_dir=self.tmpdir)
315 7939f60c Michael Hanselmann
316 7939f60c Michael Hanselmann
    lines = utils.ReadFile(self.file_storage_paths).splitlines()
317 7939f60c Michael Hanselmann
    self.assertTrue(lines.pop(0).startswith("# "))
318 7939f60c Michael Hanselmann
    self.assertTrue(lines.pop(0).startswith("# cfgupgrade"))
319 7939f60c Michael Hanselmann
    self.assertEqual(lines.pop(0), self.tmpdir)
320 7939f60c Michael Hanselmann
    self.assertFalse(lines)
321 7939f60c Michael Hanselmann
322 aefbe369 Michael Hanselmann
  def testUpgradeFrom_2_0(self):
323 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 0, 0), False)
324 aefbe369 Michael Hanselmann
325 aefbe369 Michael Hanselmann
  def testUpgradeFrom_2_1(self):
326 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 1, 0), False)
327 aefbe369 Michael Hanselmann
328 fdd9ac5b Michael Hanselmann
  def testUpgradeFrom_2_2(self):
329 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 2, 0), False)
330 fdd9ac5b Michael Hanselmann
331 fdd9ac5b Michael Hanselmann
  def testUpgradeFrom_2_3(self):
332 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), False)
333 fdd9ac5b Michael Hanselmann
334 a91f69c4 Michael Hanselmann
  def testUpgradeFrom_2_4(self):
335 a91f69c4 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 4, 0), False)
336 a91f69c4 Michael Hanselmann
337 9f604ab8 Michael Hanselmann
  def testUpgradeFrom_2_5(self):
338 9f604ab8 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 5, 0), False)
339 9f604ab8 Michael Hanselmann
340 93fd9bb1 Iustin Pop
  def testUpgradeFrom_2_6(self):
341 93fd9bb1 Iustin Pop
    self._TestSimpleUpgrade(constants.BuildVersion(2, 6, 0), False)
342 93fd9bb1 Iustin Pop
343 aefbe369 Michael Hanselmann
  def testUpgradeCurrent(self):
344 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.CONFIG_VERSION, False)
345 aefbe369 Michael Hanselmann
346 aefbe369 Michael Hanselmann
  def testUpgradeDryRunFrom_2_0(self):
347 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 0, 0), True)
348 aefbe369 Michael Hanselmann
349 aefbe369 Michael Hanselmann
  def testUpgradeDryRunFrom_2_1(self):
350 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 1, 0), True)
351 aefbe369 Michael Hanselmann
352 fdd9ac5b Michael Hanselmann
  def testUpgradeDryRunFrom_2_2(self):
353 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 2, 0), True)
354 fdd9ac5b Michael Hanselmann
355 fdd9ac5b Michael Hanselmann
  def testUpgradeDryRunFrom_2_3(self):
356 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), True)
357 fdd9ac5b Michael Hanselmann
358 a91f69c4 Michael Hanselmann
  def testUpgradeDryRunFrom_2_4(self):
359 a91f69c4 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 4, 0), True)
360 a91f69c4 Michael Hanselmann
361 9f604ab8 Michael Hanselmann
  def testUpgradeDryRunFrom_2_5(self):
362 9f604ab8 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 5, 0), True)
363 9f604ab8 Michael Hanselmann
364 93fd9bb1 Iustin Pop
  def testUpgradeDryRunFrom_2_6(self):
365 93fd9bb1 Iustin Pop
    self._TestSimpleUpgrade(constants.BuildVersion(2, 6, 0), True)
366 93fd9bb1 Iustin Pop
367 aefbe369 Michael Hanselmann
  def testUpgradeCurrentDryRun(self):
368 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.CONFIG_VERSION, True)
369 aefbe369 Michael Hanselmann
370 aefbe369 Michael Hanselmann
371 aefbe369 Michael Hanselmann
if __name__ == "__main__":
372 aefbe369 Michael Hanselmann
  testutils.GanetiTestProgram()