Statistics
| Branch: | Tag: | Revision:

root / test / py / cfgupgrade_unittest.py @ 7dbe4c72

History | View | Annotate | Download (14.9 kB)

1 aefbe369 Michael Hanselmann
#!/usr/bin/python
2 aefbe369 Michael Hanselmann
#
3 aefbe369 Michael Hanselmann
4 1709435e Bernardo Dal Seno
# Copyright (C) 2010, 2012, 2013 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 1709435e Bernardo Dal Seno
def _RunUpgrade(path, dry_run, no_verify, ignore_hostname=True,
41 1709435e Bernardo Dal Seno
                downgrade=False):
42 aefbe369 Michael Hanselmann
  cmd = [sys.executable, "%s/tools/cfgupgrade" % testutils.GetSourceDir(),
43 7939f60c Michael Hanselmann
         "--debug", "--force", "--path=%s" % path, "--confdir=%s" % path]
44 011974df Michael Hanselmann
45 011974df Michael Hanselmann
  if ignore_hostname:
46 011974df Michael Hanselmann
    cmd.append("--ignore-hostname")
47 aefbe369 Michael Hanselmann
  if dry_run:
48 aefbe369 Michael Hanselmann
    cmd.append("--dry-run")
49 aefbe369 Michael Hanselmann
  if no_verify:
50 aefbe369 Michael Hanselmann
    cmd.append("--no-verify")
51 1709435e Bernardo Dal Seno
  if downgrade:
52 1709435e Bernardo Dal Seno
    cmd.append("--downgrade")
53 aefbe369 Michael Hanselmann
54 aefbe369 Michael Hanselmann
  result = utils.RunCmd(cmd, cwd=os.getcwd())
55 aefbe369 Michael Hanselmann
  if result.failed:
56 aefbe369 Michael Hanselmann
    raise Exception("cfgupgrade failed: %s, output %r" %
57 aefbe369 Michael Hanselmann
                    (result.fail_reason, result.output))
58 aefbe369 Michael Hanselmann
59 aefbe369 Michael Hanselmann
60 aefbe369 Michael Hanselmann
class TestCfgupgrade(unittest.TestCase):
61 aefbe369 Michael Hanselmann
  def setUp(self):
62 aefbe369 Michael Hanselmann
    self.tmpdir = tempfile.mkdtemp()
63 aefbe369 Michael Hanselmann
64 aefbe369 Michael Hanselmann
    self.config_path = utils.PathJoin(self.tmpdir, "config.data")
65 aefbe369 Michael Hanselmann
    self.noded_cert_path = utils.PathJoin(self.tmpdir, "server.pem")
66 aefbe369 Michael Hanselmann
    self.rapi_cert_path = utils.PathJoin(self.tmpdir, "rapi.pem")
67 fdd9ac5b Michael Hanselmann
    self.rapi_users_path = utils.PathJoin(self.tmpdir, "rapi", "users")
68 fdd9ac5b Michael Hanselmann
    self.rapi_users_path_pre24 = utils.PathJoin(self.tmpdir, "rapi_users")
69 aefbe369 Michael Hanselmann
    self.known_hosts_path = utils.PathJoin(self.tmpdir, "known_hosts")
70 aefbe369 Michael Hanselmann
    self.confd_hmac_path = utils.PathJoin(self.tmpdir, "hmac.key")
71 aefbe369 Michael Hanselmann
    self.cds_path = utils.PathJoin(self.tmpdir, "cluster-domain-secret")
72 011974df Michael Hanselmann
    self.ss_master_node_path = utils.PathJoin(self.tmpdir, "ssconf_master_node")
73 7939f60c Michael Hanselmann
    self.file_storage_paths = utils.PathJoin(self.tmpdir, "file-storage-paths")
74 aefbe369 Michael Hanselmann
75 aefbe369 Michael Hanselmann
  def tearDown(self):
76 aefbe369 Michael Hanselmann
    shutil.rmtree(self.tmpdir)
77 aefbe369 Michael Hanselmann
78 aefbe369 Michael Hanselmann
  def _LoadConfig(self):
79 aefbe369 Michael Hanselmann
    return serializer.LoadJson(utils.ReadFile(self.config_path))
80 aefbe369 Michael Hanselmann
81 aefbe369 Michael Hanselmann
  def _CreateValidConfigDir(self):
82 aefbe369 Michael Hanselmann
    utils.WriteFile(self.noded_cert_path, data="")
83 aefbe369 Michael Hanselmann
    utils.WriteFile(self.known_hosts_path, data="")
84 011974df Michael Hanselmann
    utils.WriteFile(self.ss_master_node_path,
85 011974df Michael Hanselmann
                    data="node.has.another.name.example.net")
86 aefbe369 Michael Hanselmann
87 aefbe369 Michael Hanselmann
  def testNoConfigDir(self):
88 aefbe369 Michael Hanselmann
    self.assertFalse(utils.ListVisibleFiles(self.tmpdir))
89 aefbe369 Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, False, True)
90 aefbe369 Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, True, True)
91 aefbe369 Michael Hanselmann
92 011974df Michael Hanselmann
  def testWrongHostname(self):
93 011974df Michael Hanselmann
    self._CreateValidConfigDir()
94 011974df Michael Hanselmann
95 011974df Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson({
96 011974df Michael Hanselmann
      "version": constants.CONFIG_VERSION,
97 011974df Michael Hanselmann
      "cluster": {},
98 a19d8cd5 Iustin Pop
      "instances": {},
99 6e8091f9 Dimitris Aragiorgis
      "nodegroups": {},
100 011974df Michael Hanselmann
      }))
101 011974df Michael Hanselmann
102 011974df Michael Hanselmann
    hostname = netutils.GetHostname().name
103 011974df Michael Hanselmann
    assert hostname != utils.ReadOneLineFile(self.ss_master_node_path)
104 011974df Michael Hanselmann
105 011974df Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, False, True,
106 011974df Michael Hanselmann
                      ignore_hostname=False)
107 011974df Michael Hanselmann
108 011974df Michael Hanselmann
  def testCorrectHostname(self):
109 011974df Michael Hanselmann
    self._CreateValidConfigDir()
110 011974df Michael Hanselmann
111 011974df Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson({
112 011974df Michael Hanselmann
      "version": constants.CONFIG_VERSION,
113 011974df Michael Hanselmann
      "cluster": {},
114 a19d8cd5 Iustin Pop
      "instances": {},
115 6e8091f9 Dimitris Aragiorgis
      "nodegroups": {},
116 011974df Michael Hanselmann
      }))
117 011974df Michael Hanselmann
118 011974df Michael Hanselmann
    utils.WriteFile(self.ss_master_node_path,
119 011974df Michael Hanselmann
                    data="%s\n" % netutils.GetHostname().name)
120 011974df Michael Hanselmann
121 011974df Michael Hanselmann
    _RunUpgrade(self.tmpdir, False, True, ignore_hostname=False)
122 011974df Michael Hanselmann
123 aefbe369 Michael Hanselmann
  def testInconsistentConfig(self):
124 aefbe369 Michael Hanselmann
    self._CreateValidConfigDir()
125 aefbe369 Michael Hanselmann
    # There should be no "config_version"
126 aefbe369 Michael Hanselmann
    cfg = {
127 aefbe369 Michael Hanselmann
      "version": 0,
128 aefbe369 Michael Hanselmann
      "cluster": {
129 aefbe369 Michael Hanselmann
        "config_version": 0,
130 aefbe369 Michael Hanselmann
        },
131 a19d8cd5 Iustin Pop
      "instances": {},
132 6e8091f9 Dimitris Aragiorgis
      "nodegroups": {},
133 aefbe369 Michael Hanselmann
      }
134 aefbe369 Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson(cfg))
135 aefbe369 Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, False, True)
136 aefbe369 Michael Hanselmann
137 aefbe369 Michael Hanselmann
  def testInvalidConfig(self):
138 aefbe369 Michael Hanselmann
    self._CreateValidConfigDir()
139 aefbe369 Michael Hanselmann
    # Missing version from config
140 aefbe369 Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson({}))
141 aefbe369 Michael Hanselmann
    self.assertRaises(Exception, _RunUpgrade, self.tmpdir, False, True)
142 aefbe369 Michael Hanselmann
143 7939f60c Michael Hanselmann
  def _TestSimpleUpgrade(self, from_version, dry_run,
144 7939f60c Michael Hanselmann
                         file_storage_dir=None,
145 7939f60c Michael Hanselmann
                         shared_file_storage_dir=None):
146 7939f60c Michael Hanselmann
    cluster = {}
147 7939f60c Michael Hanselmann
148 7939f60c Michael Hanselmann
    if file_storage_dir:
149 7939f60c Michael Hanselmann
      cluster["file_storage_dir"] = file_storage_dir
150 7939f60c Michael Hanselmann
    if shared_file_storage_dir:
151 7939f60c Michael Hanselmann
      cluster["shared_file_storage_dir"] = shared_file_storage_dir
152 7939f60c Michael Hanselmann
153 aefbe369 Michael Hanselmann
    cfg = {
154 aefbe369 Michael Hanselmann
      "version": from_version,
155 7939f60c Michael Hanselmann
      "cluster": cluster,
156 a19d8cd5 Iustin Pop
      "instances": {},
157 6e8091f9 Dimitris Aragiorgis
      "nodegroups": {},
158 aefbe369 Michael Hanselmann
      }
159 aefbe369 Michael Hanselmann
    self._CreateValidConfigDir()
160 aefbe369 Michael Hanselmann
    utils.WriteFile(self.config_path, data=serializer.DumpJson(cfg))
161 aefbe369 Michael Hanselmann
162 aefbe369 Michael Hanselmann
    self.assertFalse(os.path.isfile(self.rapi_cert_path))
163 aefbe369 Michael Hanselmann
    self.assertFalse(os.path.isfile(self.confd_hmac_path))
164 aefbe369 Michael Hanselmann
    self.assertFalse(os.path.isfile(self.cds_path))
165 aefbe369 Michael Hanselmann
166 aefbe369 Michael Hanselmann
    _RunUpgrade(self.tmpdir, dry_run, True)
167 aefbe369 Michael Hanselmann
168 aefbe369 Michael Hanselmann
    if dry_run:
169 aefbe369 Michael Hanselmann
      expversion = from_version
170 aefbe369 Michael Hanselmann
      checkfn = operator.not_
171 aefbe369 Michael Hanselmann
    else:
172 aefbe369 Michael Hanselmann
      expversion = constants.CONFIG_VERSION
173 aefbe369 Michael Hanselmann
      checkfn = operator.truth
174 aefbe369 Michael Hanselmann
175 aefbe369 Michael Hanselmann
    self.assert_(checkfn(os.path.isfile(self.rapi_cert_path)))
176 aefbe369 Michael Hanselmann
    self.assert_(checkfn(os.path.isfile(self.confd_hmac_path)))
177 aefbe369 Michael Hanselmann
    self.assert_(checkfn(os.path.isfile(self.cds_path)))
178 aefbe369 Michael Hanselmann
179 aefbe369 Michael Hanselmann
    newcfg = self._LoadConfig()
180 aefbe369 Michael Hanselmann
    self.assertEqual(newcfg["version"], expversion)
181 aefbe369 Michael Hanselmann
182 fdd9ac5b Michael Hanselmann
  def testRapiUsers(self):
183 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
184 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
185 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(os.path.dirname(self.rapi_users_path)))
186 fdd9ac5b Michael Hanselmann
187 fdd9ac5b Michael Hanselmann
    utils.WriteFile(self.rapi_users_path_pre24, data="some user\n")
188 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), False)
189 fdd9ac5b Michael Hanselmann
190 87c80992 Michael Hanselmann
    self.assertTrue(os.path.isdir(os.path.dirname(self.rapi_users_path)))
191 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.islink(self.rapi_users_path_pre24))
192 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.isfile(self.rapi_users_path))
193 87c80992 Michael Hanselmann
    self.assertEqual(os.readlink(self.rapi_users_path_pre24),
194 87c80992 Michael Hanselmann
                     self.rapi_users_path)
195 fdd9ac5b Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
196 fdd9ac5b Michael Hanselmann
      self.assertEqual(utils.ReadFile(path), "some user\n")
197 fdd9ac5b Michael Hanselmann
198 fdd9ac5b Michael Hanselmann
  def testRapiUsers24AndAbove(self):
199 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
200 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
201 fdd9ac5b Michael Hanselmann
202 fdd9ac5b Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
203 fdd9ac5b Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="other user\n")
204 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), False)
205 fdd9ac5b Michael Hanselmann
206 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.islink(self.rapi_users_path_pre24))
207 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.isfile(self.rapi_users_path))
208 87c80992 Michael Hanselmann
    self.assertEqual(os.readlink(self.rapi_users_path_pre24),
209 87c80992 Michael Hanselmann
                     self.rapi_users_path)
210 fdd9ac5b Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
211 fdd9ac5b Michael Hanselmann
      self.assertEqual(utils.ReadFile(path), "other user\n")
212 fdd9ac5b Michael Hanselmann
213 fdd9ac5b Michael Hanselmann
  def testRapiUsersExistingSymlink(self):
214 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
215 fdd9ac5b Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
216 fdd9ac5b Michael Hanselmann
217 87c80992 Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
218 fdd9ac5b Michael Hanselmann
    os.symlink(self.rapi_users_path, self.rapi_users_path_pre24)
219 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="hello world\n")
220 fdd9ac5b Michael Hanselmann
221 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 2, 0), False)
222 fdd9ac5b Michael Hanselmann
223 87c80992 Michael Hanselmann
    self.assert_(os.path.isfile(self.rapi_users_path) and
224 87c80992 Michael Hanselmann
                 not os.path.islink(self.rapi_users_path))
225 fdd9ac5b Michael Hanselmann
    self.assert_(os.path.islink(self.rapi_users_path_pre24))
226 87c80992 Michael Hanselmann
    self.assertEqual(os.readlink(self.rapi_users_path_pre24),
227 87c80992 Michael Hanselmann
                     self.rapi_users_path)
228 87c80992 Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
229 87c80992 Michael Hanselmann
      self.assertEqual(utils.ReadFile(path), "hello world\n")
230 87c80992 Michael Hanselmann
231 87c80992 Michael Hanselmann
  def testRapiUsersExistingTarget(self):
232 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
233 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
234 87c80992 Michael Hanselmann
235 87c80992 Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
236 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="other user\n")
237 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path_pre24, data="hello world\n")
238 87c80992 Michael Hanselmann
239 87c80992 Michael Hanselmann
    self.assertRaises(Exception, self._TestSimpleUpgrade,
240 87c80992 Michael Hanselmann
                      constants.BuildVersion(2, 2, 0), False)
241 87c80992 Michael Hanselmann
242 87c80992 Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
243 87c80992 Michael Hanselmann
      self.assert_(os.path.isfile(path) and not os.path.islink(path))
244 87c80992 Michael Hanselmann
    self.assertEqual(utils.ReadFile(self.rapi_users_path), "other user\n")
245 87c80992 Michael Hanselmann
    self.assertEqual(utils.ReadFile(self.rapi_users_path_pre24),
246 87c80992 Michael Hanselmann
                     "hello world\n")
247 87c80992 Michael Hanselmann
248 87c80992 Michael Hanselmann
  def testRapiUsersDryRun(self):
249 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
250 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
251 87c80992 Michael Hanselmann
252 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path_pre24, data="some user\n")
253 87c80992 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), True)
254 87c80992 Michael Hanselmann
255 87c80992 Michael Hanselmann
    self.assertFalse(os.path.isdir(os.path.dirname(self.rapi_users_path)))
256 87c80992 Michael Hanselmann
    self.assertTrue(os.path.isfile(self.rapi_users_path_pre24) and
257 87c80992 Michael Hanselmann
                    not os.path.islink(self.rapi_users_path_pre24))
258 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
259 87c80992 Michael Hanselmann
260 87c80992 Michael Hanselmann
  def testRapiUsers24AndAboveDryRun(self):
261 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
262 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
263 87c80992 Michael Hanselmann
264 87c80992 Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
265 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="other user\n")
266 87c80992 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), True)
267 87c80992 Michael Hanselmann
268 87c80992 Michael Hanselmann
    self.assertTrue(os.path.isfile(self.rapi_users_path) and
269 87c80992 Michael Hanselmann
                    not os.path.islink(self.rapi_users_path))
270 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
271 87c80992 Michael Hanselmann
    self.assertEqual(utils.ReadFile(self.rapi_users_path), "other user\n")
272 87c80992 Michael Hanselmann
273 87c80992 Michael Hanselmann
  def testRapiUsersExistingSymlinkDryRun(self):
274 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path))
275 87c80992 Michael Hanselmann
    self.assertFalse(os.path.exists(self.rapi_users_path_pre24))
276 87c80992 Michael Hanselmann
277 87c80992 Michael Hanselmann
    os.mkdir(os.path.dirname(self.rapi_users_path))
278 87c80992 Michael Hanselmann
    os.symlink(self.rapi_users_path, self.rapi_users_path_pre24)
279 87c80992 Michael Hanselmann
    utils.WriteFile(self.rapi_users_path, data="hello world\n")
280 87c80992 Michael Hanselmann
281 87c80992 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 2, 0), True)
282 87c80992 Michael Hanselmann
283 87c80992 Michael Hanselmann
    self.assertTrue(os.path.islink(self.rapi_users_path_pre24))
284 87c80992 Michael Hanselmann
    self.assertTrue(os.path.isfile(self.rapi_users_path) and
285 87c80992 Michael Hanselmann
                    not os.path.islink(self.rapi_users_path))
286 87c80992 Michael Hanselmann
    self.assertEqual(os.readlink(self.rapi_users_path_pre24),
287 87c80992 Michael Hanselmann
                     self.rapi_users_path)
288 fdd9ac5b Michael Hanselmann
    for path in [self.rapi_users_path, self.rapi_users_path_pre24]:
289 fdd9ac5b Michael Hanselmann
      self.assertEqual(utils.ReadFile(path), "hello world\n")
290 fdd9ac5b Michael Hanselmann
291 7939f60c Michael Hanselmann
  def testFileStoragePathsDryRun(self):
292 7939f60c Michael Hanselmann
    self.assertFalse(os.path.exists(self.file_storage_paths))
293 7939f60c Michael Hanselmann
294 7939f60c Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 6, 0), True,
295 7939f60c Michael Hanselmann
                            file_storage_dir=self.tmpdir,
296 7939f60c Michael Hanselmann
                            shared_file_storage_dir="/tmp")
297 7939f60c Michael Hanselmann
298 7939f60c Michael Hanselmann
    self.assertFalse(os.path.exists(self.file_storage_paths))
299 7939f60c Michael Hanselmann
300 7939f60c Michael Hanselmann
  def testFileStoragePathsBoth(self):
301 7939f60c Michael Hanselmann
    self.assertFalse(os.path.exists(self.file_storage_paths))
302 7939f60c Michael Hanselmann
303 7939f60c Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 6, 0), False,
304 7939f60c Michael Hanselmann
                            file_storage_dir=self.tmpdir,
305 7939f60c Michael Hanselmann
                            shared_file_storage_dir="/tmp")
306 7939f60c Michael Hanselmann
307 7939f60c Michael Hanselmann
    lines = utils.ReadFile(self.file_storage_paths).splitlines()
308 7939f60c Michael Hanselmann
    self.assertTrue(lines.pop(0).startswith("# "))
309 7939f60c Michael Hanselmann
    self.assertTrue(lines.pop(0).startswith("# cfgupgrade"))
310 7939f60c Michael Hanselmann
    self.assertEqual(lines.pop(0), self.tmpdir)
311 7939f60c Michael Hanselmann
    self.assertEqual(lines.pop(0), "/tmp")
312 7939f60c Michael Hanselmann
    self.assertFalse(lines)
313 7939f60c Michael Hanselmann
    self.assertEqual(os.stat(self.file_storage_paths).st_mode & 0777,
314 7939f60c Michael Hanselmann
                     0600, msg="Wrong permissions")
315 7939f60c Michael Hanselmann
316 7939f60c Michael Hanselmann
  def testFileStoragePathsSharedOnly(self):
317 7939f60c Michael Hanselmann
    self.assertFalse(os.path.exists(self.file_storage_paths))
318 7939f60c Michael Hanselmann
319 7939f60c Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 5, 0), False,
320 7939f60c Michael Hanselmann
                            file_storage_dir=None,
321 7939f60c Michael Hanselmann
                            shared_file_storage_dir=self.tmpdir)
322 7939f60c Michael Hanselmann
323 7939f60c Michael Hanselmann
    lines = utils.ReadFile(self.file_storage_paths).splitlines()
324 7939f60c Michael Hanselmann
    self.assertTrue(lines.pop(0).startswith("# "))
325 7939f60c Michael Hanselmann
    self.assertTrue(lines.pop(0).startswith("# cfgupgrade"))
326 7939f60c Michael Hanselmann
    self.assertEqual(lines.pop(0), self.tmpdir)
327 7939f60c Michael Hanselmann
    self.assertFalse(lines)
328 7939f60c Michael Hanselmann
329 aefbe369 Michael Hanselmann
  def testUpgradeFrom_2_0(self):
330 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 0, 0), False)
331 aefbe369 Michael Hanselmann
332 aefbe369 Michael Hanselmann
  def testUpgradeFrom_2_1(self):
333 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 1, 0), False)
334 aefbe369 Michael Hanselmann
335 fdd9ac5b Michael Hanselmann
  def testUpgradeFrom_2_2(self):
336 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 2, 0), False)
337 fdd9ac5b Michael Hanselmann
338 fdd9ac5b Michael Hanselmann
  def testUpgradeFrom_2_3(self):
339 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), False)
340 fdd9ac5b Michael Hanselmann
341 a91f69c4 Michael Hanselmann
  def testUpgradeFrom_2_4(self):
342 a91f69c4 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 4, 0), False)
343 a91f69c4 Michael Hanselmann
344 9f604ab8 Michael Hanselmann
  def testUpgradeFrom_2_5(self):
345 9f604ab8 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 5, 0), False)
346 9f604ab8 Michael Hanselmann
347 93fd9bb1 Iustin Pop
  def testUpgradeFrom_2_6(self):
348 93fd9bb1 Iustin Pop
    self._TestSimpleUpgrade(constants.BuildVersion(2, 6, 0), False)
349 93fd9bb1 Iustin Pop
350 aefbe369 Michael Hanselmann
  def testUpgradeCurrent(self):
351 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.CONFIG_VERSION, False)
352 aefbe369 Michael Hanselmann
353 1709435e Bernardo Dal Seno
  def testDowngrade(self):
354 1709435e Bernardo Dal Seno
    self._TestSimpleUpgrade(constants.CONFIG_VERSION, False)
355 1709435e Bernardo Dal Seno
    oldconf = self._LoadConfig()
356 1709435e Bernardo Dal Seno
    _RunUpgrade(self.tmpdir, False, True, downgrade=True)
357 1709435e Bernardo Dal Seno
    _RunUpgrade(self.tmpdir, False, True)
358 1709435e Bernardo Dal Seno
    newconf = self._LoadConfig()
359 1709435e Bernardo Dal Seno
    self.assertEqual(oldconf, newconf)
360 1709435e Bernardo Dal Seno
361 1709435e Bernardo Dal Seno
  def testDowngradeTwice(self):
362 1709435e Bernardo Dal Seno
    self._TestSimpleUpgrade(constants.CONFIG_VERSION, False)
363 1709435e Bernardo Dal Seno
    _RunUpgrade(self.tmpdir, False, True, downgrade=True)
364 1709435e Bernardo Dal Seno
    oldconf = self._LoadConfig()
365 1709435e Bernardo Dal Seno
    _RunUpgrade(self.tmpdir, False, True, downgrade=True)
366 1709435e Bernardo Dal Seno
    newconf = self._LoadConfig()
367 1709435e Bernardo Dal Seno
    self.assertEqual(oldconf, newconf)
368 1709435e Bernardo Dal Seno
369 aefbe369 Michael Hanselmann
  def testUpgradeDryRunFrom_2_0(self):
370 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 0, 0), True)
371 aefbe369 Michael Hanselmann
372 aefbe369 Michael Hanselmann
  def testUpgradeDryRunFrom_2_1(self):
373 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 1, 0), True)
374 aefbe369 Michael Hanselmann
375 fdd9ac5b Michael Hanselmann
  def testUpgradeDryRunFrom_2_2(self):
376 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 2, 0), True)
377 fdd9ac5b Michael Hanselmann
378 fdd9ac5b Michael Hanselmann
  def testUpgradeDryRunFrom_2_3(self):
379 fdd9ac5b Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 3, 0), True)
380 fdd9ac5b Michael Hanselmann
381 a91f69c4 Michael Hanselmann
  def testUpgradeDryRunFrom_2_4(self):
382 a91f69c4 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 4, 0), True)
383 a91f69c4 Michael Hanselmann
384 9f604ab8 Michael Hanselmann
  def testUpgradeDryRunFrom_2_5(self):
385 9f604ab8 Michael Hanselmann
    self._TestSimpleUpgrade(constants.BuildVersion(2, 5, 0), True)
386 9f604ab8 Michael Hanselmann
387 93fd9bb1 Iustin Pop
  def testUpgradeDryRunFrom_2_6(self):
388 93fd9bb1 Iustin Pop
    self._TestSimpleUpgrade(constants.BuildVersion(2, 6, 0), True)
389 93fd9bb1 Iustin Pop
390 aefbe369 Michael Hanselmann
  def testUpgradeCurrentDryRun(self):
391 aefbe369 Michael Hanselmann
    self._TestSimpleUpgrade(constants.CONFIG_VERSION, True)
392 aefbe369 Michael Hanselmann
393 1709435e Bernardo Dal Seno
  def testDowngradeDryRun(self):
394 1709435e Bernardo Dal Seno
    self._TestSimpleUpgrade(constants.CONFIG_VERSION, False)
395 1709435e Bernardo Dal Seno
    oldconf = self._LoadConfig()
396 1709435e Bernardo Dal Seno
    _RunUpgrade(self.tmpdir, True, True, downgrade=True)
397 1709435e Bernardo Dal Seno
    newconf = self._LoadConfig()
398 1709435e Bernardo Dal Seno
    self.assertEqual(oldconf["version"], newconf["version"])
399 aefbe369 Michael Hanselmann
400 aefbe369 Michael Hanselmann
if __name__ == "__main__":
401 aefbe369 Michael Hanselmann
  testutils.GanetiTestProgram()