Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.rapi.rlib2_unittest.py @ 42d4d8b9

History | View | Annotate | Download (55.1 kB)

1 6395cebb Michael Hanselmann
#!/usr/bin/python
2 6395cebb Michael Hanselmann
#
3 6395cebb Michael Hanselmann
4 6395cebb Michael Hanselmann
# Copyright (C) 2010 Google Inc.
5 6395cebb Michael Hanselmann
#
6 6395cebb Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 6395cebb Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 6395cebb Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 6395cebb Michael Hanselmann
# (at your option) any later version.
10 6395cebb Michael Hanselmann
#
11 6395cebb Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 6395cebb Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 6395cebb Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 6395cebb Michael Hanselmann
# General Public License for more details.
15 6395cebb Michael Hanselmann
#
16 6395cebb Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 6395cebb Michael Hanselmann
# along with this program; if not, write to the Free Software
18 6395cebb Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 6395cebb Michael Hanselmann
# 02110-1301, USA.
20 6395cebb Michael Hanselmann
21 6395cebb Michael Hanselmann
22 6395cebb Michael Hanselmann
"""Script for unittesting the RAPI rlib2 module
23 6395cebb Michael Hanselmann

24 6395cebb Michael Hanselmann
"""
25 6395cebb Michael Hanselmann
26 6395cebb Michael Hanselmann
27 6395cebb Michael Hanselmann
import unittest
28 50c7d82e Michael Hanselmann
import itertools
29 50c7d82e Michael Hanselmann
import random
30 6395cebb Michael Hanselmann
31 6395cebb Michael Hanselmann
from ganeti import constants
32 6395cebb Michael Hanselmann
from ganeti import opcodes
33 6395cebb Michael Hanselmann
from ganeti import compat
34 6395cebb Michael Hanselmann
from ganeti import http
35 b82d4c5e Michael Hanselmann
from ganeti import query
36 e02836d6 Michael Hanselmann
from ganeti import luxi
37 e02836d6 Michael Hanselmann
from ganeti import errors
38 6395cebb Michael Hanselmann
39 6395cebb Michael Hanselmann
from ganeti.rapi import rlib2
40 6395cebb Michael Hanselmann
41 6395cebb Michael Hanselmann
import testutils
42 6395cebb Michael Hanselmann
43 6395cebb Michael Hanselmann
44 e02836d6 Michael Hanselmann
class _FakeRequestPrivateData:
45 e02836d6 Michael Hanselmann
  def __init__(self, body_data):
46 e02836d6 Michael Hanselmann
    self.body_data = body_data
47 e02836d6 Michael Hanselmann
48 e02836d6 Michael Hanselmann
49 e02836d6 Michael Hanselmann
class _FakeRequest:
50 e02836d6 Michael Hanselmann
  def __init__(self, body_data):
51 e02836d6 Michael Hanselmann
    self.private = _FakeRequestPrivateData(body_data)
52 e02836d6 Michael Hanselmann
53 e02836d6 Michael Hanselmann
54 e02836d6 Michael Hanselmann
def _CreateHandler(cls, items, queryargs, body_data, client_cls):
55 e02836d6 Michael Hanselmann
  return cls(items, queryargs, _FakeRequest(body_data),
56 e02836d6 Michael Hanselmann
             _client_cls=client_cls)
57 e02836d6 Michael Hanselmann
58 e02836d6 Michael Hanselmann
59 50c7d82e Michael Hanselmann
class _FakeClient:
60 50c7d82e Michael Hanselmann
  def __init__(self):
61 50c7d82e Michael Hanselmann
    self._jobs = []
62 50c7d82e Michael Hanselmann
63 50c7d82e Michael Hanselmann
  def GetNextSubmittedJob(self):
64 50c7d82e Michael Hanselmann
    return self._jobs.pop(0)
65 50c7d82e Michael Hanselmann
66 50c7d82e Michael Hanselmann
  def SubmitJob(self, ops):
67 50c7d82e Michael Hanselmann
    job_id = str(1 + int(random.random() * 1000000))
68 50c7d82e Michael Hanselmann
    self._jobs.append((job_id, ops))
69 50c7d82e Michael Hanselmann
    return job_id
70 50c7d82e Michael Hanselmann
71 50c7d82e Michael Hanselmann
72 50c7d82e Michael Hanselmann
class _FakeClientFactory:
73 50c7d82e Michael Hanselmann
  def __init__(self, cls):
74 50c7d82e Michael Hanselmann
    self._client_cls = cls
75 50c7d82e Michael Hanselmann
    self._clients = []
76 50c7d82e Michael Hanselmann
77 50c7d82e Michael Hanselmann
  def GetNextClient(self):
78 50c7d82e Michael Hanselmann
    return self._clients.pop(0)
79 50c7d82e Michael Hanselmann
80 50c7d82e Michael Hanselmann
  def __call__(self):
81 50c7d82e Michael Hanselmann
    cl = self._client_cls()
82 50c7d82e Michael Hanselmann
    self._clients.append(cl)
83 50c7d82e Michael Hanselmann
    return cl
84 50c7d82e Michael Hanselmann
85 50c7d82e Michael Hanselmann
86 b82d4c5e Michael Hanselmann
class TestConstants(unittest.TestCase):
87 b82d4c5e Michael Hanselmann
  def testConsole(self):
88 b82d4c5e Michael Hanselmann
    # Exporting the console field without authentication might expose
89 b82d4c5e Michael Hanselmann
    # information
90 b82d4c5e Michael Hanselmann
    assert "console" in query.INSTANCE_FIELDS
91 b82d4c5e Michael Hanselmann
    self.assertTrue("console" not in rlib2.I_FIELDS)
92 b82d4c5e Michael Hanselmann
93 f4e86448 Michael Hanselmann
  def testFields(self):
94 f4e86448 Michael Hanselmann
    checks = {
95 f4e86448 Michael Hanselmann
      constants.QR_INSTANCE: rlib2.I_FIELDS,
96 f4e86448 Michael Hanselmann
      constants.QR_NODE: rlib2.N_FIELDS,
97 f4e86448 Michael Hanselmann
      constants.QR_GROUP: rlib2.G_FIELDS,
98 f4e86448 Michael Hanselmann
      }
99 f4e86448 Michael Hanselmann
100 f4e86448 Michael Hanselmann
    for (qr, fields) in checks.items():
101 f4e86448 Michael Hanselmann
      self.assertFalse(set(fields) - set(query.ALL_FIELDS[qr].keys()))
102 f4e86448 Michael Hanselmann
103 b82d4c5e Michael Hanselmann
104 e02836d6 Michael Hanselmann
class TestClientConnectError(unittest.TestCase):
105 e02836d6 Michael Hanselmann
  @staticmethod
106 e02836d6 Michael Hanselmann
  def _FailingClient():
107 e02836d6 Michael Hanselmann
    raise luxi.NoMasterError("test")
108 e02836d6 Michael Hanselmann
109 e02836d6 Michael Hanselmann
  def test(self):
110 e02836d6 Michael Hanselmann
    resources = [
111 e02836d6 Michael Hanselmann
      rlib2.R_2_groups,
112 e02836d6 Michael Hanselmann
      rlib2.R_2_instances,
113 e02836d6 Michael Hanselmann
      rlib2.R_2_nodes,
114 e02836d6 Michael Hanselmann
      ]
115 e02836d6 Michael Hanselmann
    for cls in resources:
116 e02836d6 Michael Hanselmann
      handler = _CreateHandler(cls, ["name"], [], None, self._FailingClient)
117 e02836d6 Michael Hanselmann
      self.assertRaises(http.HttpBadGateway, handler.GET)
118 e02836d6 Michael Hanselmann
119 e02836d6 Michael Hanselmann
120 e02836d6 Michael Hanselmann
class TestJobSubmitError(unittest.TestCase):
121 e02836d6 Michael Hanselmann
  class _SubmitErrorClient:
122 e02836d6 Michael Hanselmann
    @staticmethod
123 e02836d6 Michael Hanselmann
    def SubmitJob(ops):
124 e02836d6 Michael Hanselmann
      raise errors.JobQueueFull("test")
125 e02836d6 Michael Hanselmann
126 e02836d6 Michael Hanselmann
  def test(self):
127 e02836d6 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_redist_config, [], [], None,
128 e02836d6 Michael Hanselmann
                             self._SubmitErrorClient)
129 e02836d6 Michael Hanselmann
    self.assertRaises(http.HttpServiceUnavailable, handler.PUT)
130 e02836d6 Michael Hanselmann
131 e02836d6 Michael Hanselmann
132 50c7d82e Michael Hanselmann
class TestClusterModify(unittest.TestCase):
133 50c7d82e Michael Hanselmann
  def test(self):
134 50c7d82e Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
135 50c7d82e Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_cluster_modify, [], [], {
136 50c7d82e Michael Hanselmann
      "vg_name": "testvg",
137 50c7d82e Michael Hanselmann
      "candidate_pool_size": 100,
138 50c7d82e Michael Hanselmann
      }, clfactory)
139 50c7d82e Michael Hanselmann
    job_id = handler.PUT()
140 50c7d82e Michael Hanselmann
141 50c7d82e Michael Hanselmann
    cl = clfactory.GetNextClient()
142 50c7d82e Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
143 50c7d82e Michael Hanselmann
144 50c7d82e Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
145 50c7d82e Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
146 50c7d82e Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpClusterSetParams))
147 50c7d82e Michael Hanselmann
    self.assertEqual(op.vg_name, "testvg")
148 50c7d82e Michael Hanselmann
    self.assertEqual(op.candidate_pool_size, 100)
149 50c7d82e Michael Hanselmann
150 50c7d82e Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
151 50c7d82e Michael Hanselmann
152 50c7d82e Michael Hanselmann
  def testInvalidValue(self):
153 50c7d82e Michael Hanselmann
    for attr in ["vg_name", "candidate_pool_size", "beparams", "_-Unknown#"]:
154 50c7d82e Michael Hanselmann
      clfactory = _FakeClientFactory(_FakeClient)
155 50c7d82e Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_cluster_modify, [], [], {
156 50c7d82e Michael Hanselmann
        attr: True,
157 50c7d82e Michael Hanselmann
        }, clfactory)
158 50c7d82e Michael Hanselmann
      self.assertRaises(http.HttpBadRequest, handler.PUT)
159 50c7d82e Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
160 50c7d82e Michael Hanselmann
161 50c7d82e Michael Hanselmann
162 8fd625fc Michael Hanselmann
class TestRedistConfig(unittest.TestCase):
163 8fd625fc Michael Hanselmann
  def test(self):
164 8fd625fc Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
165 8fd625fc Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_redist_config, [], [], None, clfactory)
166 8fd625fc Michael Hanselmann
    job_id = handler.PUT()
167 8fd625fc Michael Hanselmann
168 8fd625fc Michael Hanselmann
    cl = clfactory.GetNextClient()
169 8fd625fc Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
170 8fd625fc Michael Hanselmann
171 8fd625fc Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
172 8fd625fc Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
173 8fd625fc Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpClusterRedistConf))
174 8fd625fc Michael Hanselmann
175 8fd625fc Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
176 8fd625fc Michael Hanselmann
177 8fd625fc Michael Hanselmann
178 55168cc7 Michael Hanselmann
class TestNodeMigrate(unittest.TestCase):
179 55168cc7 Michael Hanselmann
  def test(self):
180 55168cc7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
181 55168cc7 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_migrate, ["node1"], {}, {
182 55168cc7 Michael Hanselmann
      "iallocator": "fooalloc",
183 55168cc7 Michael Hanselmann
      }, clfactory)
184 55168cc7 Michael Hanselmann
    job_id = handler.POST()
185 55168cc7 Michael Hanselmann
186 55168cc7 Michael Hanselmann
    cl = clfactory.GetNextClient()
187 55168cc7 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
188 55168cc7 Michael Hanselmann
189 55168cc7 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
190 55168cc7 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
191 55168cc7 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpNodeMigrate))
192 55168cc7 Michael Hanselmann
    self.assertEqual(op.node_name, "node1")
193 55168cc7 Michael Hanselmann
    self.assertEqual(op.iallocator, "fooalloc")
194 55168cc7 Michael Hanselmann
195 55168cc7 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
196 55168cc7 Michael Hanselmann
197 55168cc7 Michael Hanselmann
  def testQueryArgsConflict(self):
198 55168cc7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
199 55168cc7 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_migrate, ["node2"], {
200 55168cc7 Michael Hanselmann
      "live": True,
201 55168cc7 Michael Hanselmann
      "mode": constants.HT_MIGRATION_NONLIVE,
202 55168cc7 Michael Hanselmann
      }, None, clfactory)
203 55168cc7 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.POST)
204 55168cc7 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
205 55168cc7 Michael Hanselmann
206 55168cc7 Michael Hanselmann
  def testQueryArgsMode(self):
207 55168cc7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
208 55168cc7 Michael Hanselmann
    queryargs = {
209 55168cc7 Michael Hanselmann
      "mode": [constants.HT_MIGRATION_LIVE],
210 55168cc7 Michael Hanselmann
      }
211 55168cc7 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_migrate, ["node17292"],
212 55168cc7 Michael Hanselmann
                             queryargs, None, clfactory)
213 55168cc7 Michael Hanselmann
    job_id = handler.POST()
214 55168cc7 Michael Hanselmann
215 55168cc7 Michael Hanselmann
    cl = clfactory.GetNextClient()
216 55168cc7 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
217 55168cc7 Michael Hanselmann
218 55168cc7 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
219 55168cc7 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
220 55168cc7 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpNodeMigrate))
221 55168cc7 Michael Hanselmann
    self.assertEqual(op.node_name, "node17292")
222 55168cc7 Michael Hanselmann
    self.assertEqual(op.mode, constants.HT_MIGRATION_LIVE)
223 55168cc7 Michael Hanselmann
224 55168cc7 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
225 55168cc7 Michael Hanselmann
226 55168cc7 Michael Hanselmann
  def testQueryArgsLive(self):
227 55168cc7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
228 55168cc7 Michael Hanselmann
229 55168cc7 Michael Hanselmann
    for live in [False, True]:
230 55168cc7 Michael Hanselmann
      queryargs = {
231 55168cc7 Michael Hanselmann
        "live": [str(int(live))],
232 55168cc7 Michael Hanselmann
        }
233 55168cc7 Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_nodes_name_migrate, ["node6940"],
234 55168cc7 Michael Hanselmann
                               queryargs, None, clfactory)
235 55168cc7 Michael Hanselmann
      job_id = handler.POST()
236 55168cc7 Michael Hanselmann
237 55168cc7 Michael Hanselmann
      cl = clfactory.GetNextClient()
238 55168cc7 Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
239 55168cc7 Michael Hanselmann
240 55168cc7 Michael Hanselmann
      (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
241 55168cc7 Michael Hanselmann
      self.assertEqual(job_id, exp_job_id)
242 55168cc7 Michael Hanselmann
      self.assertTrue(isinstance(op, opcodes.OpNodeMigrate))
243 55168cc7 Michael Hanselmann
      self.assertEqual(op.node_name, "node6940")
244 55168cc7 Michael Hanselmann
      if live:
245 55168cc7 Michael Hanselmann
        self.assertEqual(op.mode, constants.HT_MIGRATION_LIVE)
246 55168cc7 Michael Hanselmann
      else:
247 55168cc7 Michael Hanselmann
        self.assertEqual(op.mode, constants.HT_MIGRATION_NONLIVE)
248 55168cc7 Michael Hanselmann
249 55168cc7 Michael Hanselmann
      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
250 55168cc7 Michael Hanselmann
251 55168cc7 Michael Hanselmann
252 7fa91722 Michael Hanselmann
class TestNodeEvacuate(unittest.TestCase):
253 7fa91722 Michael Hanselmann
  def test(self):
254 7fa91722 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
255 7fa91722 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_evacuate, ["node92"], {
256 7fa91722 Michael Hanselmann
      "dry-run": ["1"],
257 7fa91722 Michael Hanselmann
      }, {
258 7fa91722 Michael Hanselmann
      "mode": constants.IALLOCATOR_NEVAC_SEC,
259 7fa91722 Michael Hanselmann
      }, clfactory)
260 7fa91722 Michael Hanselmann
    job_id = handler.POST()
261 7fa91722 Michael Hanselmann
262 7fa91722 Michael Hanselmann
    cl = clfactory.GetNextClient()
263 7fa91722 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
264 7fa91722 Michael Hanselmann
265 7fa91722 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
266 7fa91722 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
267 7fa91722 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpNodeEvacuate))
268 7fa91722 Michael Hanselmann
    self.assertEqual(op.node_name, "node92")
269 7fa91722 Michael Hanselmann
    self.assertEqual(op.mode, constants.IALLOCATOR_NEVAC_SEC)
270 7fa91722 Michael Hanselmann
    self.assertTrue(op.dry_run)
271 7fa91722 Michael Hanselmann
272 7fa91722 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
273 7fa91722 Michael Hanselmann
274 7fa91722 Michael Hanselmann
275 42d4d8b9 Michael Hanselmann
class TestNodePowercycle(unittest.TestCase):
276 42d4d8b9 Michael Hanselmann
  def test(self):
277 42d4d8b9 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
278 42d4d8b9 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_powercycle, ["node20744"], {
279 42d4d8b9 Michael Hanselmann
      "force": ["1"],
280 42d4d8b9 Michael Hanselmann
      }, None, clfactory)
281 42d4d8b9 Michael Hanselmann
    job_id = handler.POST()
282 42d4d8b9 Michael Hanselmann
283 42d4d8b9 Michael Hanselmann
    cl = clfactory.GetNextClient()
284 42d4d8b9 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
285 42d4d8b9 Michael Hanselmann
286 42d4d8b9 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
287 42d4d8b9 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
288 42d4d8b9 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpNodePowercycle))
289 42d4d8b9 Michael Hanselmann
    self.assertEqual(op.node_name, "node20744")
290 42d4d8b9 Michael Hanselmann
    self.assertTrue(op.force)
291 42d4d8b9 Michael Hanselmann
292 42d4d8b9 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
293 42d4d8b9 Michael Hanselmann
294 42d4d8b9 Michael Hanselmann
295 87fd3ec7 Michael Hanselmann
class TestGroupAssignNodes(unittest.TestCase):
296 87fd3ec7 Michael Hanselmann
  def test(self):
297 87fd3ec7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
298 87fd3ec7 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups_name_assign_nodes, ["grp-a"], {
299 87fd3ec7 Michael Hanselmann
      "dry-run": ["1"],
300 87fd3ec7 Michael Hanselmann
      "force": ["1"],
301 87fd3ec7 Michael Hanselmann
      }, {
302 87fd3ec7 Michael Hanselmann
      "nodes": ["n2", "n3"],
303 87fd3ec7 Michael Hanselmann
      }, clfactory)
304 87fd3ec7 Michael Hanselmann
    job_id = handler.PUT()
305 87fd3ec7 Michael Hanselmann
306 87fd3ec7 Michael Hanselmann
    cl = clfactory.GetNextClient()
307 87fd3ec7 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
308 87fd3ec7 Michael Hanselmann
309 87fd3ec7 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
310 87fd3ec7 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
311 87fd3ec7 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpGroupAssignNodes))
312 87fd3ec7 Michael Hanselmann
    self.assertEqual(op.group_name, "grp-a")
313 87fd3ec7 Michael Hanselmann
    self.assertEqual(op.nodes, ["n2", "n3"])
314 87fd3ec7 Michael Hanselmann
    self.assertTrue(op.dry_run)
315 87fd3ec7 Michael Hanselmann
    self.assertTrue(op.force)
316 87fd3ec7 Michael Hanselmann
317 87fd3ec7 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
318 87fd3ec7 Michael Hanselmann
319 87fd3ec7 Michael Hanselmann
320 a6fa7892 Michael Hanselmann
class TestInstanceDelete(unittest.TestCase):
321 a6fa7892 Michael Hanselmann
  def test(self):
322 a6fa7892 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
323 a6fa7892 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name, ["inst30965"], {
324 a6fa7892 Michael Hanselmann
      "dry-run": ["1"],
325 a6fa7892 Michael Hanselmann
      }, {}, clfactory)
326 a6fa7892 Michael Hanselmann
    job_id = handler.DELETE()
327 a6fa7892 Michael Hanselmann
328 a6fa7892 Michael Hanselmann
    cl = clfactory.GetNextClient()
329 a6fa7892 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
330 a6fa7892 Michael Hanselmann
331 a6fa7892 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
332 a6fa7892 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
333 a6fa7892 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceRemove))
334 a6fa7892 Michael Hanselmann
    self.assertEqual(op.instance_name, "inst30965")
335 a6fa7892 Michael Hanselmann
    self.assertTrue(op.dry_run)
336 a6fa7892 Michael Hanselmann
    self.assertFalse(op.ignore_failures)
337 a6fa7892 Michael Hanselmann
338 a6fa7892 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
339 a6fa7892 Michael Hanselmann
340 a6fa7892 Michael Hanselmann
341 7b3df961 Michael Hanselmann
class TestInstanceInfo(unittest.TestCase):
342 7b3df961 Michael Hanselmann
  def test(self):
343 7b3df961 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
344 7b3df961 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_info, ["inst31217"], {
345 7b3df961 Michael Hanselmann
      "static": ["1"],
346 7b3df961 Michael Hanselmann
      }, {}, clfactory)
347 7b3df961 Michael Hanselmann
    job_id = handler.GET()
348 7b3df961 Michael Hanselmann
349 7b3df961 Michael Hanselmann
    cl = clfactory.GetNextClient()
350 7b3df961 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
351 7b3df961 Michael Hanselmann
352 7b3df961 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
353 7b3df961 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
354 7b3df961 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceQueryData))
355 7b3df961 Michael Hanselmann
    self.assertEqual(op.instances, ["inst31217"])
356 7b3df961 Michael Hanselmann
    self.assertTrue(op.static)
357 7b3df961 Michael Hanselmann
358 7b3df961 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
359 7b3df961 Michael Hanselmann
360 7b3df961 Michael Hanselmann
361 ac4888c1 Michael Hanselmann
class TestInstanceReboot(unittest.TestCase):
362 ac4888c1 Michael Hanselmann
  def test(self):
363 ac4888c1 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
364 ac4888c1 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_reboot, ["inst847"], {
365 ac4888c1 Michael Hanselmann
      "dry-run": ["1"],
366 ac4888c1 Michael Hanselmann
      "ignore_secondaries": ["1"],
367 ac4888c1 Michael Hanselmann
      }, {}, clfactory)
368 ac4888c1 Michael Hanselmann
    job_id = handler.POST()
369 ac4888c1 Michael Hanselmann
370 ac4888c1 Michael Hanselmann
    cl = clfactory.GetNextClient()
371 ac4888c1 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
372 ac4888c1 Michael Hanselmann
373 ac4888c1 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
374 ac4888c1 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
375 ac4888c1 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceReboot))
376 ac4888c1 Michael Hanselmann
    self.assertEqual(op.instance_name, "inst847")
377 ac4888c1 Michael Hanselmann
    self.assertEqual(op.reboot_type, constants.INSTANCE_REBOOT_HARD)
378 ac4888c1 Michael Hanselmann
    self.assertTrue(op.ignore_secondaries)
379 ac4888c1 Michael Hanselmann
    self.assertTrue(op.dry_run)
380 ac4888c1 Michael Hanselmann
381 ac4888c1 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
382 ac4888c1 Michael Hanselmann
383 ac4888c1 Michael Hanselmann
384 4717e6eb Michael Hanselmann
class TestInstanceStartup(unittest.TestCase):
385 4717e6eb Michael Hanselmann
  def test(self):
386 4717e6eb Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
387 4717e6eb Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_startup, ["inst31083"], {
388 4717e6eb Michael Hanselmann
      "force": ["1"],
389 4717e6eb Michael Hanselmann
      "no_remember": ["1"],
390 4717e6eb Michael Hanselmann
      }, {}, clfactory)
391 4717e6eb Michael Hanselmann
    job_id = handler.PUT()
392 4717e6eb Michael Hanselmann
393 4717e6eb Michael Hanselmann
    cl = clfactory.GetNextClient()
394 4717e6eb Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
395 4717e6eb Michael Hanselmann
396 4717e6eb Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
397 4717e6eb Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
398 4717e6eb Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceStartup))
399 4717e6eb Michael Hanselmann
    self.assertEqual(op.instance_name, "inst31083")
400 4717e6eb Michael Hanselmann
    self.assertTrue(op.no_remember)
401 4717e6eb Michael Hanselmann
    self.assertTrue(op.force)
402 4717e6eb Michael Hanselmann
    self.assertFalse(op.dry_run)
403 4717e6eb Michael Hanselmann
404 4717e6eb Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
405 4717e6eb Michael Hanselmann
406 4717e6eb Michael Hanselmann
407 3175ade6 Michael Hanselmann
class TestInstanceShutdown(unittest.TestCase):
408 3175ade6 Michael Hanselmann
  def test(self):
409 3175ade6 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
410 3175ade6 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_shutdown, ["inst26791"], {
411 3175ade6 Michael Hanselmann
      "no_remember": ["0"],
412 3175ade6 Michael Hanselmann
      }, {}, clfactory)
413 3175ade6 Michael Hanselmann
    job_id = handler.PUT()
414 3175ade6 Michael Hanselmann
415 3175ade6 Michael Hanselmann
    cl = clfactory.GetNextClient()
416 3175ade6 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
417 3175ade6 Michael Hanselmann
418 3175ade6 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
419 3175ade6 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
420 3175ade6 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceShutdown))
421 3175ade6 Michael Hanselmann
    self.assertEqual(op.instance_name, "inst26791")
422 3175ade6 Michael Hanselmann
    self.assertFalse(op.no_remember)
423 3175ade6 Michael Hanselmann
    self.assertFalse(op.dry_run)
424 3175ade6 Michael Hanselmann
425 3175ade6 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
426 3175ade6 Michael Hanselmann
427 3175ade6 Michael Hanselmann
428 1824a7a1 Michael Hanselmann
class TestInstanceActivateDisks(unittest.TestCase):
429 1824a7a1 Michael Hanselmann
  def test(self):
430 1824a7a1 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
431 1824a7a1 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_activate_disks, ["xyz"], {
432 1824a7a1 Michael Hanselmann
      "ignore_size": ["1"],
433 1824a7a1 Michael Hanselmann
      }, {}, clfactory)
434 1824a7a1 Michael Hanselmann
    job_id = handler.PUT()
435 1824a7a1 Michael Hanselmann
436 1824a7a1 Michael Hanselmann
    cl = clfactory.GetNextClient()
437 1824a7a1 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
438 1824a7a1 Michael Hanselmann
439 1824a7a1 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
440 1824a7a1 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
441 1824a7a1 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceActivateDisks))
442 1824a7a1 Michael Hanselmann
    self.assertEqual(op.instance_name, "xyz")
443 1824a7a1 Michael Hanselmann
    self.assertTrue(op.ignore_size)
444 1824a7a1 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
445 1824a7a1 Michael Hanselmann
446 1824a7a1 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
447 1824a7a1 Michael Hanselmann
448 1824a7a1 Michael Hanselmann
449 973ec124 Michael Hanselmann
class TestInstanceDeactivateDisks(unittest.TestCase):
450 973ec124 Michael Hanselmann
  def test(self):
451 973ec124 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
452 973ec124 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_deactivate_disks,
453 973ec124 Michael Hanselmann
                             ["inst22357"], {}, {}, clfactory)
454 973ec124 Michael Hanselmann
    job_id = handler.PUT()
455 973ec124 Michael Hanselmann
456 973ec124 Michael Hanselmann
    cl = clfactory.GetNextClient()
457 973ec124 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
458 973ec124 Michael Hanselmann
459 973ec124 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
460 973ec124 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
461 973ec124 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceDeactivateDisks))
462 973ec124 Michael Hanselmann
    self.assertEqual(op.instance_name, "inst22357")
463 973ec124 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
464 973ec124 Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
465 a52978c7 Michael Hanselmann
466 a52978c7 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
467 a52978c7 Michael Hanselmann
468 a52978c7 Michael Hanselmann
469 a52978c7 Michael Hanselmann
class TestInstanceRecreateDisks(unittest.TestCase):
470 a52978c7 Michael Hanselmann
  def test(self):
471 a52978c7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
472 a52978c7 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_recreate_disks,
473 a52978c7 Michael Hanselmann
                             ["inst22357"], {}, {}, clfactory)
474 a52978c7 Michael Hanselmann
    job_id = handler.POST()
475 a52978c7 Michael Hanselmann
476 a52978c7 Michael Hanselmann
    cl = clfactory.GetNextClient()
477 a52978c7 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
478 a52978c7 Michael Hanselmann
479 a52978c7 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
480 a52978c7 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
481 a52978c7 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceRecreateDisks))
482 a52978c7 Michael Hanselmann
    self.assertEqual(op.instance_name, "inst22357")
483 a52978c7 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
484 a52978c7 Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
485 973ec124 Michael Hanselmann
486 973ec124 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
487 973ec124 Michael Hanselmann
488 973ec124 Michael Hanselmann
489 b5f2ab80 Michael Hanselmann
class TestInstanceFailover(unittest.TestCase):
490 b5f2ab80 Michael Hanselmann
  def test(self):
491 b5f2ab80 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
492 b5f2ab80 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_failover,
493 b5f2ab80 Michael Hanselmann
                             ["inst12794"], {}, {}, clfactory)
494 b5f2ab80 Michael Hanselmann
    job_id = handler.PUT()
495 b5f2ab80 Michael Hanselmann
496 b5f2ab80 Michael Hanselmann
    cl = clfactory.GetNextClient()
497 b5f2ab80 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
498 b5f2ab80 Michael Hanselmann
499 b5f2ab80 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
500 b5f2ab80 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
501 b5f2ab80 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceFailover))
502 b5f2ab80 Michael Hanselmann
    self.assertEqual(op.instance_name, "inst12794")
503 b5f2ab80 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
504 b5f2ab80 Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
505 b5f2ab80 Michael Hanselmann
506 b5f2ab80 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
507 b5f2ab80 Michael Hanselmann
508 b5f2ab80 Michael Hanselmann
509 335965b9 Michael Hanselmann
class TestInstanceDiskGrow(unittest.TestCase):
510 335965b9 Michael Hanselmann
  def test(self):
511 335965b9 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
512 335965b9 Michael Hanselmann
    data = {
513 335965b9 Michael Hanselmann
      "amount": 1024,
514 335965b9 Michael Hanselmann
      }
515 335965b9 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_disk_grow,
516 335965b9 Michael Hanselmann
                             ["inst10742", "3"], {}, data, clfactory)
517 335965b9 Michael Hanselmann
    job_id = handler.POST()
518 335965b9 Michael Hanselmann
519 335965b9 Michael Hanselmann
    cl = clfactory.GetNextClient()
520 335965b9 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
521 335965b9 Michael Hanselmann
522 335965b9 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
523 335965b9 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
524 335965b9 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceGrowDisk))
525 335965b9 Michael Hanselmann
    self.assertEqual(op.instance_name, "inst10742")
526 335965b9 Michael Hanselmann
    self.assertEqual(op.disk, 3)
527 335965b9 Michael Hanselmann
    self.assertEqual(op.amount, 1024)
528 335965b9 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
529 335965b9 Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
530 335965b9 Michael Hanselmann
531 335965b9 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
532 335965b9 Michael Hanselmann
533 335965b9 Michael Hanselmann
534 1c63311d Michael Hanselmann
class TestBackupPrepare(unittest.TestCase):
535 1c63311d Michael Hanselmann
  def test(self):
536 1c63311d Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
537 1c63311d Michael Hanselmann
    queryargs = {
538 1c63311d Michael Hanselmann
      "mode": constants.EXPORT_MODE_REMOTE,
539 1c63311d Michael Hanselmann
      }
540 1c63311d Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_prepare_export,
541 1c63311d Michael Hanselmann
                             ["inst17925"], queryargs, {}, clfactory)
542 1c63311d Michael Hanselmann
    job_id = handler.PUT()
543 1c63311d Michael Hanselmann
544 1c63311d Michael Hanselmann
    cl = clfactory.GetNextClient()
545 1c63311d Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
546 1c63311d Michael Hanselmann
547 1c63311d Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
548 1c63311d Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
549 1c63311d Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpBackupPrepare))
550 1c63311d Michael Hanselmann
    self.assertEqual(op.instance_name, "inst17925")
551 1c63311d Michael Hanselmann
    self.assertEqual(op.mode, constants.EXPORT_MODE_REMOTE)
552 1c63311d Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
553 1c63311d Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
554 1c63311d Michael Hanselmann
555 1c63311d Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
556 1c63311d Michael Hanselmann
557 1c63311d Michael Hanselmann
558 86f1f5d4 Michael Hanselmann
class TestGroupRemove(unittest.TestCase):
559 86f1f5d4 Michael Hanselmann
  def test(self):
560 86f1f5d4 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
561 86f1f5d4 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups_name,
562 86f1f5d4 Michael Hanselmann
                             ["grp28575"], {}, {}, clfactory)
563 86f1f5d4 Michael Hanselmann
    job_id = handler.DELETE()
564 86f1f5d4 Michael Hanselmann
565 86f1f5d4 Michael Hanselmann
    cl = clfactory.GetNextClient()
566 86f1f5d4 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
567 86f1f5d4 Michael Hanselmann
568 86f1f5d4 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
569 86f1f5d4 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
570 86f1f5d4 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpGroupRemove))
571 86f1f5d4 Michael Hanselmann
    self.assertEqual(op.group_name, "grp28575")
572 86f1f5d4 Michael Hanselmann
    self.assertFalse(op.dry_run)
573 86f1f5d4 Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
574 86f1f5d4 Michael Hanselmann
575 86f1f5d4 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
576 86f1f5d4 Michael Hanselmann
577 86f1f5d4 Michael Hanselmann
578 eb08e09d Michael Hanselmann
class TestStorageQuery(unittest.TestCase):
579 eb08e09d Michael Hanselmann
  def test(self):
580 eb08e09d Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
581 eb08e09d Michael Hanselmann
    queryargs = {
582 eb08e09d Michael Hanselmann
      "storage_type": constants.ST_LVM_PV,
583 eb08e09d Michael Hanselmann
      "output_fields": "name,other",
584 eb08e09d Michael Hanselmann
      }
585 eb08e09d Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage,
586 eb08e09d Michael Hanselmann
                             ["node21075"], queryargs, {}, clfactory)
587 eb08e09d Michael Hanselmann
    job_id = handler.GET()
588 eb08e09d Michael Hanselmann
589 eb08e09d Michael Hanselmann
    cl = clfactory.GetNextClient()
590 eb08e09d Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
591 eb08e09d Michael Hanselmann
592 eb08e09d Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
593 eb08e09d Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
594 eb08e09d Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpNodeQueryStorage))
595 eb08e09d Michael Hanselmann
    self.assertEqual(op.nodes, ["node21075"])
596 eb08e09d Michael Hanselmann
    self.assertEqual(op.storage_type, constants.ST_LVM_PV)
597 eb08e09d Michael Hanselmann
    self.assertEqual(op.output_fields, ["name", "other"])
598 eb08e09d Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
599 eb08e09d Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
600 eb08e09d Michael Hanselmann
601 eb08e09d Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
602 eb08e09d Michael Hanselmann
603 eb08e09d Michael Hanselmann
  def testErrors(self):
604 eb08e09d Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
605 eb08e09d Michael Hanselmann
606 eb08e09d Michael Hanselmann
    queryargs = {
607 eb08e09d Michael Hanselmann
      "output_fields": "name,other",
608 eb08e09d Michael Hanselmann
      }
609 eb08e09d Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage,
610 eb08e09d Michael Hanselmann
                             ["node10538"], queryargs, {}, clfactory)
611 eb08e09d Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.GET)
612 eb08e09d Michael Hanselmann
613 eb08e09d Michael Hanselmann
    queryargs = {
614 eb08e09d Michael Hanselmann
      "storage_type": constants.ST_LVM_VG,
615 eb08e09d Michael Hanselmann
      }
616 eb08e09d Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage,
617 eb08e09d Michael Hanselmann
                             ["node21273"], queryargs, {}, clfactory)
618 eb08e09d Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.GET)
619 eb08e09d Michael Hanselmann
620 eb08e09d Michael Hanselmann
    queryargs = {
621 eb08e09d Michael Hanselmann
      "storage_type": "##unknown_storage##",
622 eb08e09d Michael Hanselmann
      "output_fields": "name,other",
623 eb08e09d Michael Hanselmann
      }
624 eb08e09d Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage,
625 eb08e09d Michael Hanselmann
                             ["node10315"], queryargs, {}, clfactory)
626 eb08e09d Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.GET)
627 eb08e09d Michael Hanselmann
628 eb08e09d Michael Hanselmann
629 8d232068 Michael Hanselmann
class TestStorageModify(unittest.TestCase):
630 8d232068 Michael Hanselmann
  def test(self):
631 8d232068 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
632 8d232068 Michael Hanselmann
633 8d232068 Michael Hanselmann
    for allocatable in [None, "1", "0"]:
634 8d232068 Michael Hanselmann
      queryargs = {
635 8d232068 Michael Hanselmann
        "storage_type": constants.ST_LVM_VG,
636 8d232068 Michael Hanselmann
        "name": "pv-a",
637 8d232068 Michael Hanselmann
        }
638 8d232068 Michael Hanselmann
639 8d232068 Michael Hanselmann
      if allocatable is not None:
640 8d232068 Michael Hanselmann
        queryargs["allocatable"] = allocatable
641 8d232068 Michael Hanselmann
642 8d232068 Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_nodes_name_storage_modify,
643 8d232068 Michael Hanselmann
                               ["node9292"], queryargs, {}, clfactory)
644 8d232068 Michael Hanselmann
      job_id = handler.PUT()
645 8d232068 Michael Hanselmann
646 8d232068 Michael Hanselmann
      cl = clfactory.GetNextClient()
647 8d232068 Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
648 8d232068 Michael Hanselmann
649 8d232068 Michael Hanselmann
      (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
650 8d232068 Michael Hanselmann
      self.assertEqual(job_id, exp_job_id)
651 8d232068 Michael Hanselmann
      self.assertTrue(isinstance(op, opcodes.OpNodeModifyStorage))
652 8d232068 Michael Hanselmann
      self.assertEqual(op.node_name, "node9292")
653 8d232068 Michael Hanselmann
      self.assertEqual(op.storage_type, constants.ST_LVM_VG)
654 8d232068 Michael Hanselmann
      self.assertEqual(op.name, "pv-a")
655 8d232068 Michael Hanselmann
      if allocatable is None:
656 8d232068 Michael Hanselmann
        self.assertFalse(op.changes)
657 8d232068 Michael Hanselmann
      else:
658 8d232068 Michael Hanselmann
        assert allocatable in ("0", "1")
659 8d232068 Michael Hanselmann
        self.assertEqual(op.changes, {
660 8d232068 Michael Hanselmann
          constants.SF_ALLOCATABLE: (allocatable == "1"),
661 8d232068 Michael Hanselmann
          })
662 8d232068 Michael Hanselmann
      self.assertFalse(hasattr(op, "dry_run"))
663 8d232068 Michael Hanselmann
      self.assertFalse(hasattr(op, "force"))
664 8d232068 Michael Hanselmann
665 8d232068 Michael Hanselmann
      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
666 8d232068 Michael Hanselmann
667 8d232068 Michael Hanselmann
  def testErrors(self):
668 8d232068 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
669 8d232068 Michael Hanselmann
670 8d232068 Michael Hanselmann
    # No storage type
671 8d232068 Michael Hanselmann
    queryargs = {
672 8d232068 Michael Hanselmann
      "name": "xyz",
673 8d232068 Michael Hanselmann
      }
674 8d232068 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage_modify,
675 8d232068 Michael Hanselmann
                             ["node26016"], queryargs, {}, clfactory)
676 8d232068 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.PUT)
677 8d232068 Michael Hanselmann
678 8d232068 Michael Hanselmann
    # No name
679 8d232068 Michael Hanselmann
    queryargs = {
680 8d232068 Michael Hanselmann
      "storage_type": constants.ST_LVM_VG,
681 8d232068 Michael Hanselmann
      }
682 8d232068 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage_modify,
683 8d232068 Michael Hanselmann
                             ["node21218"], queryargs, {}, clfactory)
684 8d232068 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.PUT)
685 8d232068 Michael Hanselmann
686 8d232068 Michael Hanselmann
    # Invalid value
687 8d232068 Michael Hanselmann
    queryargs = {
688 8d232068 Michael Hanselmann
      "storage_type": constants.ST_LVM_VG,
689 8d232068 Michael Hanselmann
      "name": "pv-b",
690 8d232068 Michael Hanselmann
      "allocatable": "noint",
691 8d232068 Michael Hanselmann
      }
692 8d232068 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage_modify,
693 8d232068 Michael Hanselmann
                             ["node30685"], queryargs, {}, clfactory)
694 8d232068 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.PUT)
695 8d232068 Michael Hanselmann
696 8d232068 Michael Hanselmann
697 98270691 Michael Hanselmann
class TestStorageRepair(unittest.TestCase):
698 98270691 Michael Hanselmann
  def test(self):
699 98270691 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
700 98270691 Michael Hanselmann
    queryargs = {
701 98270691 Michael Hanselmann
      "storage_type": constants.ST_LVM_PV,
702 98270691 Michael Hanselmann
      "name": "pv16611",
703 98270691 Michael Hanselmann
      }
704 98270691 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage_repair,
705 98270691 Michael Hanselmann
                             ["node19265"], queryargs, {}, clfactory)
706 98270691 Michael Hanselmann
    job_id = handler.PUT()
707 98270691 Michael Hanselmann
708 98270691 Michael Hanselmann
    cl = clfactory.GetNextClient()
709 98270691 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
710 98270691 Michael Hanselmann
711 98270691 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
712 98270691 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
713 98270691 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpRepairNodeStorage))
714 98270691 Michael Hanselmann
    self.assertEqual(op.node_name, "node19265")
715 98270691 Michael Hanselmann
    self.assertEqual(op.storage_type, constants.ST_LVM_PV)
716 98270691 Michael Hanselmann
    self.assertEqual(op.name, "pv16611")
717 98270691 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
718 98270691 Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
719 98270691 Michael Hanselmann
720 98270691 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
721 98270691 Michael Hanselmann
722 98270691 Michael Hanselmann
  def testErrors(self):
723 98270691 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
724 98270691 Michael Hanselmann
725 98270691 Michael Hanselmann
    # No storage type
726 98270691 Michael Hanselmann
    queryargs = {
727 98270691 Michael Hanselmann
      "name": "xyz",
728 98270691 Michael Hanselmann
      }
729 98270691 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage_repair,
730 98270691 Michael Hanselmann
                             ["node11275"], queryargs, {}, clfactory)
731 98270691 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.PUT)
732 98270691 Michael Hanselmann
733 98270691 Michael Hanselmann
    # No name
734 98270691 Michael Hanselmann
    queryargs = {
735 98270691 Michael Hanselmann
      "storage_type": constants.ST_LVM_VG,
736 98270691 Michael Hanselmann
      }
737 98270691 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_nodes_name_storage_repair,
738 98270691 Michael Hanselmann
                             ["node21218"], queryargs, {}, clfactory)
739 98270691 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.PUT)
740 98270691 Michael Hanselmann
741 98270691 Michael Hanselmann
742 460ef073 Michael Hanselmann
class TestTags(unittest.TestCase):
743 460ef073 Michael Hanselmann
  TAG_HANDLERS = [
744 460ef073 Michael Hanselmann
    rlib2.R_2_instances_name_tags,
745 460ef073 Michael Hanselmann
    rlib2.R_2_nodes_name_tags,
746 460ef073 Michael Hanselmann
    rlib2.R_2_groups_name_tags,
747 460ef073 Michael Hanselmann
    rlib2.R_2_tags,
748 460ef073 Michael Hanselmann
    ]
749 460ef073 Michael Hanselmann
750 460ef073 Michael Hanselmann
  def testSetAndDelete(self):
751 460ef073 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
752 460ef073 Michael Hanselmann
753 460ef073 Michael Hanselmann
    for method, opcls in [("PUT", opcodes.OpTagsSet),
754 460ef073 Michael Hanselmann
                          ("DELETE", opcodes.OpTagsDel)]:
755 460ef073 Michael Hanselmann
      for idx, handler in enumerate(self.TAG_HANDLERS):
756 460ef073 Michael Hanselmann
        dry_run = bool(idx % 2)
757 460ef073 Michael Hanselmann
        name = "test%s" % idx
758 460ef073 Michael Hanselmann
        queryargs = {
759 460ef073 Michael Hanselmann
          "tag": ["foo", "bar", "baz"],
760 460ef073 Michael Hanselmann
          "dry-run": str(int(dry_run)),
761 460ef073 Michael Hanselmann
          }
762 460ef073 Michael Hanselmann
763 460ef073 Michael Hanselmann
        handler = _CreateHandler(handler, [name], queryargs, {}, clfactory)
764 460ef073 Michael Hanselmann
        job_id = getattr(handler, method)()
765 460ef073 Michael Hanselmann
766 460ef073 Michael Hanselmann
        cl = clfactory.GetNextClient()
767 460ef073 Michael Hanselmann
        self.assertRaises(IndexError, clfactory.GetNextClient)
768 460ef073 Michael Hanselmann
769 460ef073 Michael Hanselmann
        (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
770 460ef073 Michael Hanselmann
        self.assertEqual(job_id, exp_job_id)
771 460ef073 Michael Hanselmann
        self.assertTrue(isinstance(op, opcls))
772 460ef073 Michael Hanselmann
        self.assertEqual(op.kind, handler.TAG_LEVEL)
773 460ef073 Michael Hanselmann
        if handler.TAG_LEVEL == constants.TAG_CLUSTER:
774 460ef073 Michael Hanselmann
          self.assertTrue(op.name is None)
775 460ef073 Michael Hanselmann
        else:
776 460ef073 Michael Hanselmann
          self.assertEqual(op.name, name)
777 460ef073 Michael Hanselmann
        self.assertEqual(op.tags, ["foo", "bar", "baz"])
778 460ef073 Michael Hanselmann
        self.assertEqual(op.dry_run, dry_run)
779 460ef073 Michael Hanselmann
        self.assertFalse(hasattr(op, "force"))
780 460ef073 Michael Hanselmann
781 460ef073 Michael Hanselmann
        self.assertRaises(IndexError, cl.GetNextSubmittedJob)
782 460ef073 Michael Hanselmann
783 460ef073 Michael Hanselmann
784 09a43b39 Michael Hanselmann
class TestInstanceCreation(testutils.GanetiTestCase):
785 09a43b39 Michael Hanselmann
  def test(self):
786 09a43b39 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
787 6395cebb Michael Hanselmann
788 09a43b39 Michael Hanselmann
    name = "inst863.example.com"
789 6395cebb Michael Hanselmann
790 6395cebb Michael Hanselmann
    disk_variants = [
791 6395cebb Michael Hanselmann
      # No disks
792 6395cebb Michael Hanselmann
      [],
793 6395cebb Michael Hanselmann
794 6395cebb Michael Hanselmann
      # Two disks
795 6395cebb Michael Hanselmann
      [{"size": 5, }, {"size": 100, }],
796 6395cebb Michael Hanselmann
797 6395cebb Michael Hanselmann
      # Disk with mode
798 6395cebb Michael Hanselmann
      [{"size": 123, "mode": constants.DISK_RDWR, }],
799 6395cebb Michael Hanselmann
      ]
800 6395cebb Michael Hanselmann
801 6395cebb Michael Hanselmann
    nic_variants = [
802 6395cebb Michael Hanselmann
      # No NIC
803 6395cebb Michael Hanselmann
      [],
804 6395cebb Michael Hanselmann
805 6395cebb Michael Hanselmann
      # Three NICs
806 6395cebb Michael Hanselmann
      [{}, {}, {}],
807 6395cebb Michael Hanselmann
808 6395cebb Michael Hanselmann
      # Two NICs
809 6395cebb Michael Hanselmann
      [
810 54dc4fdb Michael Hanselmann
        { "ip": "192.0.2.6", "mode": constants.NIC_MODE_ROUTED,
811 7be048f0 Michael Hanselmann
          "mac": "01:23:45:67:68:9A",
812 7be048f0 Michael Hanselmann
        },
813 ba05464f Guido Trotter
        { "mode": constants.NIC_MODE_BRIDGED, "link": "br1" },
814 6395cebb Michael Hanselmann
      ],
815 6395cebb Michael Hanselmann
      ]
816 6395cebb Michael Hanselmann
817 6395cebb Michael Hanselmann
    beparam_variants = [
818 6395cebb Michael Hanselmann
      None,
819 6395cebb Michael Hanselmann
      {},
820 6395cebb Michael Hanselmann
      { constants.BE_VCPUS: 2, },
821 6395cebb Michael Hanselmann
      { constants.BE_MEMORY: 123, },
822 6395cebb Michael Hanselmann
      { constants.BE_VCPUS: 2,
823 6395cebb Michael Hanselmann
        constants.BE_MEMORY: 1024,
824 6395cebb Michael Hanselmann
        constants.BE_AUTO_BALANCE: True, }
825 6395cebb Michael Hanselmann
      ]
826 6395cebb Michael Hanselmann
827 6395cebb Michael Hanselmann
    hvparam_variants = [
828 6395cebb Michael Hanselmann
      None,
829 6395cebb Michael Hanselmann
      { constants.HV_BOOT_ORDER: "anc", },
830 6395cebb Michael Hanselmann
      { constants.HV_KERNEL_PATH: "/boot/fookernel",
831 6395cebb Michael Hanselmann
        constants.HV_ROOT_PATH: "/dev/hda1", },
832 6395cebb Michael Hanselmann
      ]
833 6395cebb Michael Hanselmann
834 6395cebb Michael Hanselmann
    for mode in [constants.INSTANCE_CREATE, constants.INSTANCE_IMPORT]:
835 6395cebb Michael Hanselmann
      for nics in nic_variants:
836 6395cebb Michael Hanselmann
        for disk_template in constants.DISK_TEMPLATES:
837 6395cebb Michael Hanselmann
          for disks in disk_variants:
838 6395cebb Michael Hanselmann
            for beparams in beparam_variants:
839 6395cebb Michael Hanselmann
              for hvparams in hvparam_variants:
840 6395cebb Michael Hanselmann
                for dry_run in [False, True]:
841 09a43b39 Michael Hanselmann
                  queryargs = {
842 09a43b39 Michael Hanselmann
                    "dry-run": str(int(dry_run)),
843 09a43b39 Michael Hanselmann
                    }
844 09a43b39 Michael Hanselmann
845 09a43b39 Michael Hanselmann
                  data = {
846 09a43b39 Michael Hanselmann
                    rlib2._REQ_DATA_VERSION: 1,
847 09a43b39 Michael Hanselmann
                    "name": name,
848 09a43b39 Michael Hanselmann
                    "hypervisor": constants.HT_FAKE,
849 09a43b39 Michael Hanselmann
                    "disks": disks,
850 09a43b39 Michael Hanselmann
                    "nics": nics,
851 09a43b39 Michael Hanselmann
                    "mode": mode,
852 09a43b39 Michael Hanselmann
                    "disk_template": disk_template,
853 09a43b39 Michael Hanselmann
                    "os": "debootstrap",
854 09a43b39 Michael Hanselmann
                    }
855 09a43b39 Michael Hanselmann
856 09a43b39 Michael Hanselmann
                  if beparams is not None:
857 09a43b39 Michael Hanselmann
                    data["beparams"] = beparams
858 09a43b39 Michael Hanselmann
859 09a43b39 Michael Hanselmann
                  if hvparams is not None:
860 09a43b39 Michael Hanselmann
                    data["hvparams"] = hvparams
861 09a43b39 Michael Hanselmann
862 09a43b39 Michael Hanselmann
                  handler = _CreateHandler(rlib2.R_2_instances, [],
863 09a43b39 Michael Hanselmann
                                           queryargs, data, clfactory)
864 09a43b39 Michael Hanselmann
                  job_id = handler.POST()
865 09a43b39 Michael Hanselmann
866 09a43b39 Michael Hanselmann
                  cl = clfactory.GetNextClient()
867 09a43b39 Michael Hanselmann
                  self.assertRaises(IndexError, clfactory.GetNextClient)
868 09a43b39 Michael Hanselmann
869 09a43b39 Michael Hanselmann
                  (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
870 09a43b39 Michael Hanselmann
                  self.assertEqual(job_id, exp_job_id)
871 09a43b39 Michael Hanselmann
                  self.assertRaises(IndexError, cl.GetNextSubmittedJob)
872 09a43b39 Michael Hanselmann
873 09a43b39 Michael Hanselmann
                  self.assertTrue(isinstance(op, opcodes.OpInstanceCreate))
874 09a43b39 Michael Hanselmann
                  self.assertEqual(op.instance_name, name)
875 6395cebb Michael Hanselmann
                  self.assertEqual(op.mode, mode)
876 6395cebb Michael Hanselmann
                  self.assertEqual(op.disk_template, disk_template)
877 6395cebb Michael Hanselmann
                  self.assertEqual(op.dry_run, dry_run)
878 6395cebb Michael Hanselmann
                  self.assertEqual(len(op.disks), len(disks))
879 6395cebb Michael Hanselmann
                  self.assertEqual(len(op.nics), len(nics))
880 6395cebb Michael Hanselmann
881 7be048f0 Michael Hanselmann
                  for opdisk, disk in zip(op.disks, disks):
882 7be048f0 Michael Hanselmann
                    for key in constants.IDISK_PARAMS:
883 7be048f0 Michael Hanselmann
                      self.assertEqual(opdisk.get(key), disk.get(key))
884 7be048f0 Michael Hanselmann
                    self.assertFalse("unknown" in opdisk)
885 7be048f0 Michael Hanselmann
886 7be048f0 Michael Hanselmann
                  for opnic, nic in zip(op.nics, nics):
887 7be048f0 Michael Hanselmann
                    for key in constants.INIC_PARAMS:
888 7be048f0 Michael Hanselmann
                      self.assertEqual(opnic.get(key), nic.get(key))
889 7be048f0 Michael Hanselmann
                    self.assertFalse("unknown" in opnic)
890 7be048f0 Michael Hanselmann
                    self.assertFalse("foobar" in opnic)
891 6395cebb Michael Hanselmann
892 6395cebb Michael Hanselmann
                  if beparams is None:
893 526a662a Michael Hanselmann
                    self.assertFalse(hasattr(op, "beparams"))
894 6395cebb Michael Hanselmann
                  else:
895 6395cebb Michael Hanselmann
                    self.assertEqualValues(op.beparams, beparams)
896 6395cebb Michael Hanselmann
897 6395cebb Michael Hanselmann
                  if hvparams is None:
898 526a662a Michael Hanselmann
                    self.assertFalse(hasattr(op, "hvparams"))
899 6395cebb Michael Hanselmann
                  else:
900 6395cebb Michael Hanselmann
                    self.assertEqualValues(op.hvparams, hvparams)
901 6395cebb Michael Hanselmann
902 526a662a Michael Hanselmann
  def testLegacyName(self):
903 09a43b39 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
904 09a43b39 Michael Hanselmann
905 526a662a Michael Hanselmann
    name = "inst29128.example.com"
906 526a662a Michael Hanselmann
    data = {
907 09a43b39 Michael Hanselmann
      rlib2._REQ_DATA_VERSION: 1,
908 526a662a Michael Hanselmann
      "name": name,
909 526a662a Michael Hanselmann
      "disks": [],
910 526a662a Michael Hanselmann
      "nics": [],
911 526a662a Michael Hanselmann
      "mode": constants.INSTANCE_CREATE,
912 526a662a Michael Hanselmann
      "disk_template": constants.DT_PLAIN,
913 526a662a Michael Hanselmann
      }
914 09a43b39 Michael Hanselmann
915 09a43b39 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
916 09a43b39 Michael Hanselmann
    job_id = handler.POST()
917 09a43b39 Michael Hanselmann
918 09a43b39 Michael Hanselmann
    cl = clfactory.GetNextClient()
919 09a43b39 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
920 09a43b39 Michael Hanselmann
921 09a43b39 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
922 09a43b39 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
923 09a43b39 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceCreate))
924 526a662a Michael Hanselmann
    self.assertEqual(op.instance_name, name)
925 526a662a Michael Hanselmann
    self.assertFalse(hasattr(op, "name"))
926 09a43b39 Michael Hanselmann
    self.assertFalse(op.dry_run)
927 09a43b39 Michael Hanselmann
928 09a43b39 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
929 526a662a Michael Hanselmann
930 526a662a Michael Hanselmann
    # Define both
931 09a43b39 Michael Hanselmann
    data["instance_name"] = "other.example.com"
932 09a43b39 Michael Hanselmann
    assert "name" in data and "instance_name" in data
933 09a43b39 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
934 09a43b39 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.POST)
935 09a43b39 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
936 526a662a Michael Hanselmann
937 526a662a Michael Hanselmann
  def testLegacyOs(self):
938 09a43b39 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
939 09a43b39 Michael Hanselmann
940 526a662a Michael Hanselmann
    name = "inst4673.example.com"
941 526a662a Michael Hanselmann
    os = "linux29206"
942 526a662a Michael Hanselmann
    data = {
943 09a43b39 Michael Hanselmann
      rlib2._REQ_DATA_VERSION: 1,
944 526a662a Michael Hanselmann
      "name": name,
945 526a662a Michael Hanselmann
      "os_type": os,
946 526a662a Michael Hanselmann
      "disks": [],
947 526a662a Michael Hanselmann
      "nics": [],
948 526a662a Michael Hanselmann
      "mode": constants.INSTANCE_CREATE,
949 526a662a Michael Hanselmann
      "disk_template": constants.DT_PLAIN,
950 526a662a Michael Hanselmann
      }
951 09a43b39 Michael Hanselmann
952 09a43b39 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
953 09a43b39 Michael Hanselmann
    job_id = handler.POST()
954 09a43b39 Michael Hanselmann
955 09a43b39 Michael Hanselmann
    cl = clfactory.GetNextClient()
956 09a43b39 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
957 09a43b39 Michael Hanselmann
958 09a43b39 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
959 09a43b39 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
960 09a43b39 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceCreate))
961 526a662a Michael Hanselmann
    self.assertEqual(op.instance_name, name)
962 526a662a Michael Hanselmann
    self.assertEqual(op.os_type, os)
963 526a662a Michael Hanselmann
    self.assertFalse(hasattr(op, "os"))
964 09a43b39 Michael Hanselmann
    self.assertFalse(op.dry_run)
965 09a43b39 Michael Hanselmann
966 09a43b39 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
967 526a662a Michael Hanselmann
968 526a662a Michael Hanselmann
    # Define both
969 09a43b39 Michael Hanselmann
    data["os"] = "linux9584"
970 09a43b39 Michael Hanselmann
    assert "os" in data and "os_type" in data
971 09a43b39 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
972 09a43b39 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.POST)
973 526a662a Michael Hanselmann
974 6395cebb Michael Hanselmann
  def testErrors(self):
975 09a43b39 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
976 09a43b39 Michael Hanselmann
977 6395cebb Michael Hanselmann
    # Test all required fields
978 6395cebb Michael Hanselmann
    reqfields = {
979 09a43b39 Michael Hanselmann
      rlib2._REQ_DATA_VERSION: 1,
980 6395cebb Michael Hanselmann
      "name": "inst1.example.com",
981 6395cebb Michael Hanselmann
      "disks": [],
982 6395cebb Michael Hanselmann
      "nics": [],
983 6395cebb Michael Hanselmann
      "mode": constants.INSTANCE_CREATE,
984 130f0966 Iustin Pop
      "disk_template": constants.DT_PLAIN,
985 6395cebb Michael Hanselmann
      }
986 6395cebb Michael Hanselmann
987 6395cebb Michael Hanselmann
    for name in reqfields.keys():
988 09a43b39 Michael Hanselmann
      data = dict(i for i in reqfields.iteritems() if i[0] != name)
989 09a43b39 Michael Hanselmann
990 09a43b39 Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
991 09a43b39 Michael Hanselmann
      self.assertRaises(http.HttpBadRequest, handler.POST)
992 09a43b39 Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
993 6395cebb Michael Hanselmann
994 6395cebb Michael Hanselmann
    # Invalid disks and nics
995 6395cebb Michael Hanselmann
    for field in ["disks", "nics"]:
996 526a662a Michael Hanselmann
      invalid_values = [None, 1, "", {}, [1, 2, 3], ["hda1", "hda2"],
997 526a662a Michael Hanselmann
                        [{"_unknown_": 999, }]]
998 6395cebb Michael Hanselmann
999 6395cebb Michael Hanselmann
      for invvalue in invalid_values:
1000 6395cebb Michael Hanselmann
        data = reqfields.copy()
1001 6395cebb Michael Hanselmann
        data[field] = invvalue
1002 09a43b39 Michael Hanselmann
        handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
1003 09a43b39 Michael Hanselmann
        self.assertRaises(http.HttpBadRequest, handler.POST)
1004 09a43b39 Michael Hanselmann
        self.assertRaises(IndexError, clfactory.GetNextClient)
1005 09a43b39 Michael Hanselmann
1006 09a43b39 Michael Hanselmann
  def testVersion(self):
1007 09a43b39 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1008 09a43b39 Michael Hanselmann
1009 09a43b39 Michael Hanselmann
    # No version field
1010 09a43b39 Michael Hanselmann
    data = {
1011 09a43b39 Michael Hanselmann
      "name": "inst1.example.com",
1012 09a43b39 Michael Hanselmann
      "disks": [],
1013 09a43b39 Michael Hanselmann
      "nics": [],
1014 09a43b39 Michael Hanselmann
      "mode": constants.INSTANCE_CREATE,
1015 09a43b39 Michael Hanselmann
      "disk_template": constants.DT_PLAIN,
1016 09a43b39 Michael Hanselmann
      }
1017 09a43b39 Michael Hanselmann
1018 09a43b39 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
1019 09a43b39 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.POST)
1020 09a43b39 Michael Hanselmann
1021 09a43b39 Michael Hanselmann
    # Old and incorrect versions
1022 09a43b39 Michael Hanselmann
    for version in [0, -1, 10483, "Hello World"]:
1023 09a43b39 Michael Hanselmann
      data[rlib2._REQ_DATA_VERSION] = version
1024 09a43b39 Michael Hanselmann
1025 09a43b39 Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
1026 09a43b39 Michael Hanselmann
      self.assertRaises(http.HttpBadRequest, handler.POST)
1027 09a43b39 Michael Hanselmann
1028 09a43b39 Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
1029 09a43b39 Michael Hanselmann
1030 09a43b39 Michael Hanselmann
    # Correct version
1031 09a43b39 Michael Hanselmann
    data[rlib2._REQ_DATA_VERSION] = 1
1032 09a43b39 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances, [], {}, data, clfactory)
1033 09a43b39 Michael Hanselmann
    job_id = handler.POST()
1034 09a43b39 Michael Hanselmann
1035 09a43b39 Michael Hanselmann
    cl = clfactory.GetNextClient()
1036 09a43b39 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1037 09a43b39 Michael Hanselmann
1038 09a43b39 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1039 09a43b39 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1040 09a43b39 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceCreate))
1041 09a43b39 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1042 6395cebb Michael Hanselmann
1043 6395cebb Michael Hanselmann
1044 134afbe7 Michael Hanselmann
class TestBackupExport(unittest.TestCase):
1045 ebeb600f Michael Hanselmann
  def test(self):
1046 134afbe7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1047 134afbe7 Michael Hanselmann
1048 ebeb600f Michael Hanselmann
    name = "instmoo"
1049 ebeb600f Michael Hanselmann
    data = {
1050 ebeb600f Michael Hanselmann
      "mode": constants.EXPORT_MODE_REMOTE,
1051 ebeb600f Michael Hanselmann
      "destination": [(1, 2, 3), (99, 99, 99)],
1052 ebeb600f Michael Hanselmann
      "shutdown": True,
1053 ebeb600f Michael Hanselmann
      "remove_instance": True,
1054 07ce3e70 Michael Hanselmann
      "x509_key_name": ["name", "hash"],
1055 07ce3e70 Michael Hanselmann
      "destination_x509_ca": "---cert---"
1056 ebeb600f Michael Hanselmann
      }
1057 134afbe7 Michael Hanselmann
1058 134afbe7 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_export, [name], {},
1059 134afbe7 Michael Hanselmann
                             data, clfactory)
1060 134afbe7 Michael Hanselmann
    job_id = handler.PUT()
1061 134afbe7 Michael Hanselmann
1062 134afbe7 Michael Hanselmann
    cl = clfactory.GetNextClient()
1063 134afbe7 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1064 134afbe7 Michael Hanselmann
1065 134afbe7 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1066 134afbe7 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1067 134afbe7 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpBackupExport))
1068 ebeb600f Michael Hanselmann
    self.assertEqual(op.instance_name, name)
1069 ebeb600f Michael Hanselmann
    self.assertEqual(op.mode, constants.EXPORT_MODE_REMOTE)
1070 134afbe7 Michael Hanselmann
    self.assertEqual(op.target_node, [(1, 2, 3), (99, 99, 99)])
1071 ebeb600f Michael Hanselmann
    self.assertEqual(op.shutdown, True)
1072 ebeb600f Michael Hanselmann
    self.assertEqual(op.remove_instance, True)
1073 134afbe7 Michael Hanselmann
    self.assertEqual(op.x509_key_name, ["name", "hash"])
1074 07ce3e70 Michael Hanselmann
    self.assertEqual(op.destination_x509_ca, "---cert---")
1075 134afbe7 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
1076 134afbe7 Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
1077 134afbe7 Michael Hanselmann
1078 134afbe7 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1079 ebeb600f Michael Hanselmann
1080 ebeb600f Michael Hanselmann
  def testDefaults(self):
1081 134afbe7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1082 134afbe7 Michael Hanselmann
1083 ebeb600f Michael Hanselmann
    name = "inst1"
1084 ebeb600f Michael Hanselmann
    data = {
1085 ebeb600f Michael Hanselmann
      "destination": "node2",
1086 ebeb600f Michael Hanselmann
      "shutdown": False,
1087 ebeb600f Michael Hanselmann
      }
1088 134afbe7 Michael Hanselmann
1089 134afbe7 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_export, [name], {},
1090 134afbe7 Michael Hanselmann
                             data, clfactory)
1091 134afbe7 Michael Hanselmann
    job_id = handler.PUT()
1092 134afbe7 Michael Hanselmann
1093 134afbe7 Michael Hanselmann
    cl = clfactory.GetNextClient()
1094 134afbe7 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1095 134afbe7 Michael Hanselmann
1096 134afbe7 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1097 134afbe7 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1098 134afbe7 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpBackupExport))
1099 ebeb600f Michael Hanselmann
    self.assertEqual(op.instance_name, name)
1100 07ce3e70 Michael Hanselmann
    self.assertEqual(op.target_node, "node2")
1101 07ce3e70 Michael Hanselmann
    self.assertFalse(hasattr(op, "mode"))
1102 07ce3e70 Michael Hanselmann
    self.assertFalse(hasattr(op, "remove_instance"))
1103 07ce3e70 Michael Hanselmann
    self.assertFalse(hasattr(op, "destination"))
1104 134afbe7 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
1105 134afbe7 Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
1106 134afbe7 Michael Hanselmann
1107 134afbe7 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1108 ebeb600f Michael Hanselmann
1109 ebeb600f Michael Hanselmann
  def testErrors(self):
1110 134afbe7 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1111 134afbe7 Michael Hanselmann
1112 134afbe7 Michael Hanselmann
    for value in ["True", "False"]:
1113 134afbe7 Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_instances_name_export, ["err1"], {}, {
1114 134afbe7 Michael Hanselmann
        "remove_instance": value,
1115 134afbe7 Michael Hanselmann
        }, clfactory)
1116 134afbe7 Michael Hanselmann
      self.assertRaises(http.HttpBadRequest, handler.PUT)
1117 ebeb600f Michael Hanselmann
1118 ebeb600f Michael Hanselmann
1119 075a29be Michael Hanselmann
class TestInstanceMigrate(testutils.GanetiTestCase):
1120 5823e0d2 Michael Hanselmann
  def test(self):
1121 075a29be Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1122 075a29be Michael Hanselmann
1123 5823e0d2 Michael Hanselmann
    name = "instYooho6ek"
1124 5823e0d2 Michael Hanselmann
1125 5823e0d2 Michael Hanselmann
    for cleanup in [False, True]:
1126 5823e0d2 Michael Hanselmann
      for mode in constants.HT_MIGRATION_MODES:
1127 5823e0d2 Michael Hanselmann
        data = {
1128 5823e0d2 Michael Hanselmann
          "cleanup": cleanup,
1129 5823e0d2 Michael Hanselmann
          "mode": mode,
1130 5823e0d2 Michael Hanselmann
          }
1131 075a29be Michael Hanselmann
1132 075a29be Michael Hanselmann
        handler = _CreateHandler(rlib2.R_2_instances_name_migrate, [name], {},
1133 075a29be Michael Hanselmann
                                 data, clfactory)
1134 075a29be Michael Hanselmann
        job_id = handler.PUT()
1135 075a29be Michael Hanselmann
1136 075a29be Michael Hanselmann
        cl = clfactory.GetNextClient()
1137 075a29be Michael Hanselmann
        self.assertRaises(IndexError, clfactory.GetNextClient)
1138 075a29be Michael Hanselmann
1139 075a29be Michael Hanselmann
        (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1140 075a29be Michael Hanselmann
        self.assertEqual(job_id, exp_job_id)
1141 075a29be Michael Hanselmann
        self.assertTrue(isinstance(op, opcodes.OpInstanceMigrate))
1142 5823e0d2 Michael Hanselmann
        self.assertEqual(op.instance_name, name)
1143 5823e0d2 Michael Hanselmann
        self.assertEqual(op.mode, mode)
1144 5823e0d2 Michael Hanselmann
        self.assertEqual(op.cleanup, cleanup)
1145 075a29be Michael Hanselmann
        self.assertFalse(hasattr(op, "dry_run"))
1146 075a29be Michael Hanselmann
        self.assertFalse(hasattr(op, "force"))
1147 075a29be Michael Hanselmann
1148 075a29be Michael Hanselmann
        self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1149 5823e0d2 Michael Hanselmann
1150 5823e0d2 Michael Hanselmann
  def testDefaults(self):
1151 075a29be Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1152 075a29be Michael Hanselmann
1153 5823e0d2 Michael Hanselmann
    name = "instnohZeex0"
1154 5823e0d2 Michael Hanselmann
1155 075a29be Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_migrate, [name], {}, {},
1156 075a29be Michael Hanselmann
                             clfactory)
1157 075a29be Michael Hanselmann
    job_id = handler.PUT()
1158 075a29be Michael Hanselmann
1159 075a29be Michael Hanselmann
    cl = clfactory.GetNextClient()
1160 075a29be Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1161 075a29be Michael Hanselmann
1162 075a29be Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1163 075a29be Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1164 075a29be Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceMigrate))
1165 5823e0d2 Michael Hanselmann
    self.assertEqual(op.instance_name, name)
1166 c1a27c9a Michael Hanselmann
    self.assertFalse(hasattr(op, "mode"))
1167 c1a27c9a Michael Hanselmann
    self.assertFalse(hasattr(op, "cleanup"))
1168 075a29be Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
1169 075a29be Michael Hanselmann
    self.assertFalse(hasattr(op, "force"))
1170 075a29be Michael Hanselmann
1171 075a29be Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1172 5823e0d2 Michael Hanselmann
1173 5823e0d2 Michael Hanselmann
1174 d56e7dc7 Michael Hanselmann
class TestParseRenameInstanceRequest(testutils.GanetiTestCase):
1175 d56e7dc7 Michael Hanselmann
  def test(self):
1176 d76f9b5d Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1177 d76f9b5d Michael Hanselmann
1178 d56e7dc7 Michael Hanselmann
    name = "instij0eeph7"
1179 d56e7dc7 Michael Hanselmann
1180 d56e7dc7 Michael Hanselmann
    for new_name in ["ua0aiyoo", "fai3ongi"]:
1181 d56e7dc7 Michael Hanselmann
      for ip_check in [False, True]:
1182 d56e7dc7 Michael Hanselmann
        for name_check in [False, True]:
1183 d56e7dc7 Michael Hanselmann
          data = {
1184 d56e7dc7 Michael Hanselmann
            "new_name": new_name,
1185 d56e7dc7 Michael Hanselmann
            "ip_check": ip_check,
1186 d56e7dc7 Michael Hanselmann
            "name_check": name_check,
1187 d56e7dc7 Michael Hanselmann
            }
1188 d56e7dc7 Michael Hanselmann
1189 d76f9b5d Michael Hanselmann
          handler = _CreateHandler(rlib2.R_2_instances_name_rename, [name],
1190 d76f9b5d Michael Hanselmann
                                   {}, data, clfactory)
1191 d76f9b5d Michael Hanselmann
          job_id = handler.PUT()
1192 d76f9b5d Michael Hanselmann
1193 d76f9b5d Michael Hanselmann
          cl = clfactory.GetNextClient()
1194 d76f9b5d Michael Hanselmann
          self.assertRaises(IndexError, clfactory.GetNextClient)
1195 d76f9b5d Michael Hanselmann
1196 d76f9b5d Michael Hanselmann
          (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1197 d76f9b5d Michael Hanselmann
          self.assertEqual(job_id, exp_job_id)
1198 d76f9b5d Michael Hanselmann
          self.assertTrue(isinstance(op, opcodes.OpInstanceRename))
1199 d56e7dc7 Michael Hanselmann
          self.assertEqual(op.instance_name, name)
1200 d56e7dc7 Michael Hanselmann
          self.assertEqual(op.new_name, new_name)
1201 d56e7dc7 Michael Hanselmann
          self.assertEqual(op.ip_check, ip_check)
1202 d56e7dc7 Michael Hanselmann
          self.assertEqual(op.name_check, name_check)
1203 d76f9b5d Michael Hanselmann
          self.assertFalse(hasattr(op, "dry_run"))
1204 d76f9b5d Michael Hanselmann
          self.assertFalse(hasattr(op, "force"))
1205 d76f9b5d Michael Hanselmann
1206 d76f9b5d Michael Hanselmann
          self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1207 d56e7dc7 Michael Hanselmann
1208 d56e7dc7 Michael Hanselmann
  def testDefaults(self):
1209 d76f9b5d Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1210 d76f9b5d Michael Hanselmann
1211 d56e7dc7 Michael Hanselmann
    name = "instahchie3t"
1212 d56e7dc7 Michael Hanselmann
1213 d56e7dc7 Michael Hanselmann
    for new_name in ["thag9mek", "quees7oh"]:
1214 d56e7dc7 Michael Hanselmann
      data = {
1215 d56e7dc7 Michael Hanselmann
        "new_name": new_name,
1216 d56e7dc7 Michael Hanselmann
        }
1217 d56e7dc7 Michael Hanselmann
1218 d76f9b5d Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_instances_name_rename, [name],
1219 d76f9b5d Michael Hanselmann
                               {}, data, clfactory)
1220 d76f9b5d Michael Hanselmann
      job_id = handler.PUT()
1221 d76f9b5d Michael Hanselmann
1222 d76f9b5d Michael Hanselmann
      cl = clfactory.GetNextClient()
1223 d76f9b5d Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
1224 d76f9b5d Michael Hanselmann
1225 d76f9b5d Michael Hanselmann
      (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1226 d76f9b5d Michael Hanselmann
      self.assertEqual(job_id, exp_job_id)
1227 d76f9b5d Michael Hanselmann
      self.assertTrue(isinstance(op, opcodes.OpInstanceRename))
1228 d56e7dc7 Michael Hanselmann
      self.assertEqual(op.instance_name, name)
1229 d56e7dc7 Michael Hanselmann
      self.assertEqual(op.new_name, new_name)
1230 88bc199a Michael Hanselmann
      self.assertFalse(hasattr(op, "ip_check"))
1231 88bc199a Michael Hanselmann
      self.assertFalse(hasattr(op, "name_check"))
1232 d76f9b5d Michael Hanselmann
      self.assertFalse(hasattr(op, "dry_run"))
1233 d76f9b5d Michael Hanselmann
      self.assertFalse(hasattr(op, "force"))
1234 d76f9b5d Michael Hanselmann
1235 d76f9b5d Michael Hanselmann
      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1236 d56e7dc7 Michael Hanselmann
1237 d56e7dc7 Michael Hanselmann
1238 f3db88ba Michael Hanselmann
class TestParseModifyInstanceRequest(unittest.TestCase):
1239 3882937a Michael Hanselmann
  def test(self):
1240 f3db88ba Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1241 f3db88ba Michael Hanselmann
1242 3882937a Michael Hanselmann
    name = "instush8gah"
1243 3882937a Michael Hanselmann
1244 3882937a Michael Hanselmann
    test_disks = [
1245 3882937a Michael Hanselmann
      [],
1246 3882937a Michael Hanselmann
      [(1, { constants.IDISK_MODE: constants.DISK_RDWR, })],
1247 3882937a Michael Hanselmann
      ]
1248 3882937a Michael Hanselmann
1249 3882937a Michael Hanselmann
    for osparams in [{}, { "some": "value", "other": "Hello World", }]:
1250 3882937a Michael Hanselmann
      for hvparams in [{}, { constants.HV_KERNEL_PATH: "/some/kernel", }]:
1251 3882937a Michael Hanselmann
        for beparams in [{}, { constants.BE_MEMORY: 128, }]:
1252 3882937a Michael Hanselmann
          for force in [False, True]:
1253 3882937a Michael Hanselmann
            for nics in [[], [(0, { constants.INIC_IP: "192.0.2.1", })]]:
1254 3882937a Michael Hanselmann
              for disks in test_disks:
1255 3882937a Michael Hanselmann
                for disk_template in constants.DISK_TEMPLATES:
1256 3882937a Michael Hanselmann
                  data = {
1257 3882937a Michael Hanselmann
                    "osparams": osparams,
1258 3882937a Michael Hanselmann
                    "hvparams": hvparams,
1259 3882937a Michael Hanselmann
                    "beparams": beparams,
1260 3882937a Michael Hanselmann
                    "nics": nics,
1261 3882937a Michael Hanselmann
                    "disks": disks,
1262 3882937a Michael Hanselmann
                    "force": force,
1263 3882937a Michael Hanselmann
                    "disk_template": disk_template,
1264 3882937a Michael Hanselmann
                    }
1265 3882937a Michael Hanselmann
1266 f3db88ba Michael Hanselmann
                  handler = _CreateHandler(rlib2.R_2_instances_name_modify,
1267 f3db88ba Michael Hanselmann
                                           [name], {}, data, clfactory)
1268 f3db88ba Michael Hanselmann
                  job_id = handler.PUT()
1269 f3db88ba Michael Hanselmann
1270 f3db88ba Michael Hanselmann
                  cl = clfactory.GetNextClient()
1271 f3db88ba Michael Hanselmann
                  self.assertRaises(IndexError, clfactory.GetNextClient)
1272 f3db88ba Michael Hanselmann
1273 f3db88ba Michael Hanselmann
                  (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1274 f3db88ba Michael Hanselmann
                  self.assertEqual(job_id, exp_job_id)
1275 f3db88ba Michael Hanselmann
                  self.assertTrue(isinstance(op, opcodes.OpInstanceSetParams))
1276 3882937a Michael Hanselmann
                  self.assertEqual(op.instance_name, name)
1277 3882937a Michael Hanselmann
                  self.assertEqual(op.hvparams, hvparams)
1278 3882937a Michael Hanselmann
                  self.assertEqual(op.beparams, beparams)
1279 3882937a Michael Hanselmann
                  self.assertEqual(op.osparams, osparams)
1280 3882937a Michael Hanselmann
                  self.assertEqual(op.force, force)
1281 3882937a Michael Hanselmann
                  self.assertEqual(op.nics, nics)
1282 3882937a Michael Hanselmann
                  self.assertEqual(op.disks, disks)
1283 3882937a Michael Hanselmann
                  self.assertEqual(op.disk_template, disk_template)
1284 ee5549c7 Michael Hanselmann
                  self.assertFalse(hasattr(op, "remote_node"))
1285 ee5549c7 Michael Hanselmann
                  self.assertFalse(hasattr(op, "os_name"))
1286 ee5549c7 Michael Hanselmann
                  self.assertFalse(hasattr(op, "force_variant"))
1287 f3db88ba Michael Hanselmann
                  self.assertFalse(hasattr(op, "dry_run"))
1288 f3db88ba Michael Hanselmann
1289 f3db88ba Michael Hanselmann
                  self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1290 3882937a Michael Hanselmann
1291 3882937a Michael Hanselmann
  def testDefaults(self):
1292 f3db88ba Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1293 f3db88ba Michael Hanselmann
1294 3882937a Michael Hanselmann
    name = "instir8aish31"
1295 3882937a Michael Hanselmann
1296 f3db88ba Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_modify,
1297 f3db88ba Michael Hanselmann
                             [name], {}, {}, clfactory)
1298 f3db88ba Michael Hanselmann
    job_id = handler.PUT()
1299 f3db88ba Michael Hanselmann
1300 f3db88ba Michael Hanselmann
    cl = clfactory.GetNextClient()
1301 f3db88ba Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1302 f3db88ba Michael Hanselmann
1303 f3db88ba Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1304 f3db88ba Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1305 f3db88ba Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceSetParams))
1306 3882937a Michael Hanselmann
    self.assertEqual(op.instance_name, name)
1307 f3db88ba Michael Hanselmann
1308 ee5549c7 Michael Hanselmann
    for i in ["hvparams", "beparams", "osparams", "force", "nics", "disks",
1309 ee5549c7 Michael Hanselmann
              "disk_template", "remote_node", "os_name", "force_variant"]:
1310 ee5549c7 Michael Hanselmann
      self.assertFalse(hasattr(op, i))
1311 3882937a Michael Hanselmann
1312 3882937a Michael Hanselmann
1313 c744425f Michael Hanselmann
class TestParseInstanceReinstallRequest(testutils.GanetiTestCase):
1314 c744425f Michael Hanselmann
  def setUp(self):
1315 c744425f Michael Hanselmann
    testutils.GanetiTestCase.setUp(self)
1316 c744425f Michael Hanselmann
1317 c744425f Michael Hanselmann
    self.Parse = rlib2._ParseInstanceReinstallRequest
1318 c744425f Michael Hanselmann
1319 c744425f Michael Hanselmann
  def _Check(self, ops, name):
1320 c744425f Michael Hanselmann
    expcls = [
1321 ee3e37a7 Iustin Pop
      opcodes.OpInstanceShutdown,
1322 5073fd8f Iustin Pop
      opcodes.OpInstanceReinstall,
1323 c873d91c Iustin Pop
      opcodes.OpInstanceStartup,
1324 c744425f Michael Hanselmann
      ]
1325 c744425f Michael Hanselmann
1326 c744425f Michael Hanselmann
    self.assert_(compat.all(isinstance(op, exp)
1327 c744425f Michael Hanselmann
                            for op, exp in zip(ops, expcls)))
1328 c744425f Michael Hanselmann
    self.assert_(compat.all(op.instance_name == name for op in ops))
1329 c744425f Michael Hanselmann
1330 c744425f Michael Hanselmann
  def test(self):
1331 c744425f Michael Hanselmann
    name = "shoo0tihohma"
1332 c744425f Michael Hanselmann
1333 c744425f Michael Hanselmann
    ops = self.Parse(name, {"os": "sys1", "start": True,})
1334 c744425f Michael Hanselmann
    self.assertEqual(len(ops), 3)
1335 c744425f Michael Hanselmann
    self._Check(ops, name)
1336 c744425f Michael Hanselmann
    self.assertEqual(ops[1].os_type, "sys1")
1337 c744425f Michael Hanselmann
    self.assertFalse(ops[1].osparams)
1338 c744425f Michael Hanselmann
1339 c744425f Michael Hanselmann
    ops = self.Parse(name, {"os": "sys2", "start": False,})
1340 c744425f Michael Hanselmann
    self.assertEqual(len(ops), 2)
1341 c744425f Michael Hanselmann
    self._Check(ops, name)
1342 c744425f Michael Hanselmann
    self.assertEqual(ops[1].os_type, "sys2")
1343 c744425f Michael Hanselmann
1344 c744425f Michael Hanselmann
    osparams = {
1345 c744425f Michael Hanselmann
      "reformat": "1",
1346 c744425f Michael Hanselmann
      }
1347 c744425f Michael Hanselmann
    ops = self.Parse(name, {"os": "sys4035", "start": True,
1348 c744425f Michael Hanselmann
                            "osparams": osparams,})
1349 c744425f Michael Hanselmann
    self.assertEqual(len(ops), 3)
1350 c744425f Michael Hanselmann
    self._Check(ops, name)
1351 c744425f Michael Hanselmann
    self.assertEqual(ops[1].os_type, "sys4035")
1352 c744425f Michael Hanselmann
    self.assertEqual(ops[1].osparams, osparams)
1353 c744425f Michael Hanselmann
1354 c744425f Michael Hanselmann
  def testDefaults(self):
1355 c744425f Michael Hanselmann
    name = "noolee0g"
1356 c744425f Michael Hanselmann
1357 c744425f Michael Hanselmann
    ops = self.Parse(name, {"os": "linux1"})
1358 c744425f Michael Hanselmann
    self.assertEqual(len(ops), 3)
1359 c744425f Michael Hanselmann
    self._Check(ops, name)
1360 c744425f Michael Hanselmann
    self.assertEqual(ops[1].os_type, "linux1")
1361 c744425f Michael Hanselmann
    self.assertFalse(ops[1].osparams)
1362 c744425f Michael Hanselmann
1363 a14b80bc Michael Hanselmann
  def testErrors(self):
1364 97f8e7f0 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, self.Parse,
1365 97f8e7f0 Michael Hanselmann
                      "foo", "not a dictionary")
1366 a14b80bc Michael Hanselmann
1367 c744425f Michael Hanselmann
1368 cd0d4d5a Michael Hanselmann
class TestGroupRename(unittest.TestCase):
1369 0dbaa9ca Adeodato Simo
  def test(self):
1370 cd0d4d5a Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1371 cd0d4d5a Michael Hanselmann
1372 cd0d4d5a Michael Hanselmann
    name = "group608242564"
1373 0dbaa9ca Adeodato Simo
    data = {
1374 cd0d4d5a Michael Hanselmann
      "new_name": "ua0aiyoo15112",
1375 0dbaa9ca Adeodato Simo
      }
1376 0dbaa9ca Adeodato Simo
1377 cd0d4d5a Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups_name_rename, [name], {}, data,
1378 cd0d4d5a Michael Hanselmann
                             clfactory)
1379 cd0d4d5a Michael Hanselmann
    job_id = handler.PUT()
1380 cd0d4d5a Michael Hanselmann
1381 cd0d4d5a Michael Hanselmann
    cl = clfactory.GetNextClient()
1382 cd0d4d5a Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1383 cd0d4d5a Michael Hanselmann
1384 cd0d4d5a Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1385 cd0d4d5a Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1386 0dbaa9ca Adeodato Simo
1387 cd0d4d5a Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpGroupRename))
1388 12da663a Michael Hanselmann
    self.assertEqual(op.group_name, name)
1389 cd0d4d5a Michael Hanselmann
    self.assertEqual(op.new_name, "ua0aiyoo15112")
1390 0dbaa9ca Adeodato Simo
    self.assertFalse(op.dry_run)
1391 cd0d4d5a Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1392 0dbaa9ca Adeodato Simo
1393 0dbaa9ca Adeodato Simo
  def testDryRun(self):
1394 cd0d4d5a Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1395 cd0d4d5a Michael Hanselmann
1396 cd0d4d5a Michael Hanselmann
    name = "group28548"
1397 0dbaa9ca Adeodato Simo
    data = {
1398 0dbaa9ca Adeodato Simo
      "new_name": "ua0aiyoo",
1399 0dbaa9ca Adeodato Simo
      }
1400 0dbaa9ca Adeodato Simo
1401 cd0d4d5a Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups_name_rename, [name], {
1402 cd0d4d5a Michael Hanselmann
      "dry-run": ["1"],
1403 cd0d4d5a Michael Hanselmann
      }, data, clfactory)
1404 cd0d4d5a Michael Hanselmann
    job_id = handler.PUT()
1405 0dbaa9ca Adeodato Simo
1406 cd0d4d5a Michael Hanselmann
    cl = clfactory.GetNextClient()
1407 cd0d4d5a Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1408 cd0d4d5a Michael Hanselmann
1409 cd0d4d5a Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1410 cd0d4d5a Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1411 cd0d4d5a Michael Hanselmann
1412 cd0d4d5a Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpGroupRename))
1413 12da663a Michael Hanselmann
    self.assertEqual(op.group_name, name)
1414 0dbaa9ca Adeodato Simo
    self.assertEqual(op.new_name, "ua0aiyoo")
1415 cd0d4d5a Michael Hanselmann
    self.assertTrue(op.dry_run)
1416 cd0d4d5a Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1417 0dbaa9ca Adeodato Simo
1418 0dbaa9ca Adeodato Simo
1419 0dbc732c Michael Hanselmann
class TestInstanceReplaceDisks(unittest.TestCase):
1420 d1c172de Michael Hanselmann
  def test(self):
1421 0dbc732c Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1422 0dbc732c Michael Hanselmann
1423 d1c172de Michael Hanselmann
    name = "inst22568"
1424 d1c172de Michael Hanselmann
1425 d1c172de Michael Hanselmann
    for disks in [range(1, 4), "1,2,3", "1, 2, 3"]:
1426 d1c172de Michael Hanselmann
      data = {
1427 d1c172de Michael Hanselmann
        "mode": constants.REPLACE_DISK_SEC,
1428 d1c172de Michael Hanselmann
        "disks": disks,
1429 d1c172de Michael Hanselmann
        "iallocator": "myalloc",
1430 d1c172de Michael Hanselmann
        }
1431 d1c172de Michael Hanselmann
1432 0dbc732c Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_instances_name_replace_disks,
1433 0dbc732c Michael Hanselmann
                               [name], {}, data, clfactory)
1434 0dbc732c Michael Hanselmann
      job_id = handler.POST()
1435 0dbc732c Michael Hanselmann
1436 0dbc732c Michael Hanselmann
      cl = clfactory.GetNextClient()
1437 0dbc732c Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
1438 0dbc732c Michael Hanselmann
1439 0dbc732c Michael Hanselmann
      (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1440 0dbc732c Michael Hanselmann
      self.assertEqual(job_id, exp_job_id)
1441 0dbc732c Michael Hanselmann
1442 0dbc732c Michael Hanselmann
      self.assertTrue(isinstance(op, opcodes.OpInstanceReplaceDisks))
1443 0dbc732c Michael Hanselmann
      self.assertEqual(op.instance_name, name)
1444 d1c172de Michael Hanselmann
      self.assertEqual(op.mode, constants.REPLACE_DISK_SEC)
1445 d1c172de Michael Hanselmann
      self.assertEqual(op.disks, [1, 2, 3])
1446 d1c172de Michael Hanselmann
      self.assertEqual(op.iallocator, "myalloc")
1447 0dbc732c Michael Hanselmann
      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1448 d1c172de Michael Hanselmann
1449 d1c172de Michael Hanselmann
  def testDefaults(self):
1450 0dbc732c Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1451 0dbc732c Michael Hanselmann
1452 d1c172de Michael Hanselmann
    name = "inst11413"
1453 d1c172de Michael Hanselmann
    data = {
1454 d1c172de Michael Hanselmann
      "mode": constants.REPLACE_DISK_AUTO,
1455 d1c172de Michael Hanselmann
      }
1456 d1c172de Michael Hanselmann
1457 0dbc732c Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_replace_disks,
1458 0dbc732c Michael Hanselmann
                             [name], {}, data, clfactory)
1459 0dbc732c Michael Hanselmann
    job_id = handler.POST()
1460 0dbc732c Michael Hanselmann
1461 0dbc732c Michael Hanselmann
    cl = clfactory.GetNextClient()
1462 0dbc732c Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1463 0dbc732c Michael Hanselmann
1464 0dbc732c Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1465 0dbc732c Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1466 0dbc732c Michael Hanselmann
1467 0dbc732c Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpInstanceReplaceDisks))
1468 0dbc732c Michael Hanselmann
    self.assertEqual(op.instance_name, name)
1469 d1c172de Michael Hanselmann
    self.assertEqual(op.mode, constants.REPLACE_DISK_AUTO)
1470 d1c172de Michael Hanselmann
    self.assertFalse(hasattr(op, "iallocator"))
1471 d1c172de Michael Hanselmann
    self.assertFalse(hasattr(op, "disks"))
1472 0dbc732c Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1473 d1c172de Michael Hanselmann
1474 d1c172de Michael Hanselmann
  def testWrong(self):
1475 0dbc732c Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1476 0dbc732c Michael Hanselmann
1477 0dbc732c Michael Hanselmann
    data = {
1478 0dbc732c Michael Hanselmann
      "mode": constants.REPLACE_DISK_AUTO,
1479 0dbc732c Michael Hanselmann
      "disks": "hello world",
1480 0dbc732c Michael Hanselmann
      }
1481 0dbc732c Michael Hanselmann
1482 0dbc732c Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_instances_name_replace_disks,
1483 0dbc732c Michael Hanselmann
                             ["foo"], {}, data, clfactory)
1484 0dbc732c Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.POST)
1485 d1c172de Michael Hanselmann
1486 d1c172de Michael Hanselmann
1487 d5211458 Michael Hanselmann
class TestGroupModify(unittest.TestCase):
1488 df340fae Michael Hanselmann
  def test(self):
1489 d5211458 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1490 d5211458 Michael Hanselmann
1491 df340fae Michael Hanselmann
    name = "group6002"
1492 df340fae Michael Hanselmann
1493 df340fae Michael Hanselmann
    for policy in constants.VALID_ALLOC_POLICIES:
1494 df340fae Michael Hanselmann
      data = {
1495 df340fae Michael Hanselmann
        "alloc_policy": policy,
1496 df340fae Michael Hanselmann
        }
1497 df340fae Michael Hanselmann
1498 d5211458 Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_groups_name_modify, [name], {}, data,
1499 d5211458 Michael Hanselmann
                               clfactory)
1500 d5211458 Michael Hanselmann
      job_id = handler.PUT()
1501 d5211458 Michael Hanselmann
1502 d5211458 Michael Hanselmann
      cl = clfactory.GetNextClient()
1503 d5211458 Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
1504 d5211458 Michael Hanselmann
1505 d5211458 Michael Hanselmann
      (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1506 d5211458 Michael Hanselmann
      self.assertEqual(job_id, exp_job_id)
1507 d5211458 Michael Hanselmann
1508 d5211458 Michael Hanselmann
      self.assertTrue(isinstance(op, opcodes.OpGroupSetParams))
1509 df340fae Michael Hanselmann
      self.assertEqual(op.group_name, name)
1510 df340fae Michael Hanselmann
      self.assertEqual(op.alloc_policy, policy)
1511 d5211458 Michael Hanselmann
      self.assertFalse(hasattr(op, "dry_run"))
1512 d5211458 Michael Hanselmann
      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1513 df340fae Michael Hanselmann
1514 df340fae Michael Hanselmann
  def testUnknownPolicy(self):
1515 d5211458 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1516 d5211458 Michael Hanselmann
1517 df340fae Michael Hanselmann
    data = {
1518 df340fae Michael Hanselmann
      "alloc_policy": "_unknown_policy_",
1519 df340fae Michael Hanselmann
      }
1520 df340fae Michael Hanselmann
1521 d5211458 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups_name_modify, ["xyz"], {}, data,
1522 d5211458 Michael Hanselmann
                             clfactory)
1523 d5211458 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.PUT)
1524 d5211458 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1525 df340fae Michael Hanselmann
1526 df340fae Michael Hanselmann
  def testDefaults(self):
1527 d5211458 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1528 d5211458 Michael Hanselmann
1529 df340fae Michael Hanselmann
    name = "group6679"
1530 df340fae Michael Hanselmann
1531 d5211458 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups_name_modify, [name], {}, {},
1532 d5211458 Michael Hanselmann
                             clfactory)
1533 d5211458 Michael Hanselmann
    job_id = handler.PUT()
1534 d5211458 Michael Hanselmann
1535 d5211458 Michael Hanselmann
    cl = clfactory.GetNextClient()
1536 d5211458 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1537 d5211458 Michael Hanselmann
1538 d5211458 Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1539 d5211458 Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1540 d5211458 Michael Hanselmann
1541 d5211458 Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpGroupSetParams))
1542 df340fae Michael Hanselmann
    self.assertEqual(op.group_name, name)
1543 df340fae Michael Hanselmann
    self.assertFalse(hasattr(op, "alloc_policy"))
1544 d5211458 Michael Hanselmann
    self.assertFalse(hasattr(op, "dry_run"))
1545 d5211458 Michael Hanselmann
    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1546 df340fae Michael Hanselmann
1547 df340fae Michael Hanselmann
1548 c91407bc Michael Hanselmann
class TestGroupAdd(unittest.TestCase):
1549 527fbde8 Michael Hanselmann
  def test(self):
1550 527fbde8 Michael Hanselmann
    name = "group3618"
1551 c91407bc Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1552 527fbde8 Michael Hanselmann
1553 527fbde8 Michael Hanselmann
    for policy in constants.VALID_ALLOC_POLICIES:
1554 527fbde8 Michael Hanselmann
      data = {
1555 527fbde8 Michael Hanselmann
        "group_name": name,
1556 527fbde8 Michael Hanselmann
        "alloc_policy": policy,
1557 527fbde8 Michael Hanselmann
        }
1558 527fbde8 Michael Hanselmann
1559 c91407bc Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_groups, [], {}, data,
1560 c91407bc Michael Hanselmann
                               clfactory)
1561 c91407bc Michael Hanselmann
      job_id = handler.POST()
1562 c91407bc Michael Hanselmann
1563 c91407bc Michael Hanselmann
      cl = clfactory.GetNextClient()
1564 c91407bc Michael Hanselmann
      self.assertRaises(IndexError, clfactory.GetNextClient)
1565 c91407bc Michael Hanselmann
1566 c91407bc Michael Hanselmann
      (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1567 c91407bc Michael Hanselmann
      self.assertEqual(job_id, exp_job_id)
1568 c91407bc Michael Hanselmann
1569 c91407bc Michael Hanselmann
      self.assertTrue(isinstance(op, opcodes.OpGroupAdd))
1570 527fbde8 Michael Hanselmann
      self.assertEqual(op.group_name, name)
1571 527fbde8 Michael Hanselmann
      self.assertEqual(op.alloc_policy, policy)
1572 527fbde8 Michael Hanselmann
      self.assertFalse(op.dry_run)
1573 c91407bc Michael Hanselmann
      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1574 527fbde8 Michael Hanselmann
1575 527fbde8 Michael Hanselmann
  def testUnknownPolicy(self):
1576 c91407bc Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1577 c91407bc Michael Hanselmann
1578 527fbde8 Michael Hanselmann
    data = {
1579 527fbde8 Michael Hanselmann
      "alloc_policy": "_unknown_policy_",
1580 527fbde8 Michael Hanselmann
      }
1581 527fbde8 Michael Hanselmann
1582 c91407bc Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups, [], {}, data, clfactory)
1583 c91407bc Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, handler.POST)
1584 c91407bc Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1585 527fbde8 Michael Hanselmann
1586 527fbde8 Michael Hanselmann
  def testDefaults(self):
1587 c91407bc Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1588 c91407bc Michael Hanselmann
1589 527fbde8 Michael Hanselmann
    name = "group15395"
1590 527fbde8 Michael Hanselmann
    data = {
1591 527fbde8 Michael Hanselmann
      "group_name": name,
1592 527fbde8 Michael Hanselmann
      }
1593 527fbde8 Michael Hanselmann
1594 c91407bc Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups, [], {}, data, clfactory)
1595 c91407bc Michael Hanselmann
    job_id = handler.POST()
1596 c91407bc Michael Hanselmann
1597 c91407bc Michael Hanselmann
    cl = clfactory.GetNextClient()
1598 c91407bc Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1599 c91407bc Michael Hanselmann
1600 c91407bc Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1601 c91407bc Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1602 c91407bc Michael Hanselmann
1603 c91407bc Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpGroupAdd))
1604 527fbde8 Michael Hanselmann
    self.assertEqual(op.group_name, name)
1605 527fbde8 Michael Hanselmann
    self.assertFalse(hasattr(op, "alloc_policy"))
1606 c91407bc Michael Hanselmann
    self.assertFalse(op.dry_run)
1607 527fbde8 Michael Hanselmann
1608 527fbde8 Michael Hanselmann
  def testLegacyName(self):
1609 c91407bc Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1610 c91407bc Michael Hanselmann
1611 527fbde8 Michael Hanselmann
    name = "group29852"
1612 527fbde8 Michael Hanselmann
    data = {
1613 527fbde8 Michael Hanselmann
      "name": name,
1614 527fbde8 Michael Hanselmann
      }
1615 527fbde8 Michael Hanselmann
1616 c91407bc Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_groups, [], {
1617 c91407bc Michael Hanselmann
      "dry-run": ["1"],
1618 c91407bc Michael Hanselmann
      }, data, clfactory)
1619 c91407bc Michael Hanselmann
    job_id = handler.POST()
1620 c91407bc Michael Hanselmann
1621 c91407bc Michael Hanselmann
    cl = clfactory.GetNextClient()
1622 c91407bc Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1623 c91407bc Michael Hanselmann
1624 c91407bc Michael Hanselmann
    (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1625 c91407bc Michael Hanselmann
    self.assertEqual(job_id, exp_job_id)
1626 c91407bc Michael Hanselmann
1627 c91407bc Michael Hanselmann
    self.assertTrue(isinstance(op, opcodes.OpGroupAdd))
1628 527fbde8 Michael Hanselmann
    self.assertEqual(op.group_name, name)
1629 c91407bc Michael Hanselmann
    self.assertFalse(hasattr(op, "alloc_policy"))
1630 c91407bc Michael Hanselmann
    self.assertTrue(op.dry_run)
1631 527fbde8 Michael Hanselmann
1632 527fbde8 Michael Hanselmann
1633 51cc8637 Michael Hanselmann
class TestNodeRole(unittest.TestCase):
1634 51cc8637 Michael Hanselmann
  def test(self):
1635 51cc8637 Michael Hanselmann
    clfactory = _FakeClientFactory(_FakeClient)
1636 51cc8637 Michael Hanselmann
1637 51cc8637 Michael Hanselmann
    for role in rlib2._NR_MAP.values():
1638 51cc8637 Michael Hanselmann
      handler = _CreateHandler(rlib2.R_2_nodes_name_role,
1639 51cc8637 Michael Hanselmann
                               ["node-z"], {}, role, clfactory)
1640 51cc8637 Michael Hanselmann
      if role == rlib2._NR_MASTER:
1641 51cc8637 Michael Hanselmann
        self.assertRaises(http.HttpBadRequest, handler.PUT)
1642 51cc8637 Michael Hanselmann
      else:
1643 51cc8637 Michael Hanselmann
        job_id = handler.PUT()
1644 51cc8637 Michael Hanselmann
1645 51cc8637 Michael Hanselmann
        cl = clfactory.GetNextClient()
1646 51cc8637 Michael Hanselmann
        self.assertRaises(IndexError, clfactory.GetNextClient)
1647 51cc8637 Michael Hanselmann
1648 51cc8637 Michael Hanselmann
        (exp_job_id, (op, )) = cl.GetNextSubmittedJob()
1649 51cc8637 Michael Hanselmann
        self.assertEqual(job_id, exp_job_id)
1650 51cc8637 Michael Hanselmann
        self.assertTrue(isinstance(op, opcodes.OpNodeSetParams))
1651 51cc8637 Michael Hanselmann
        self.assertEqual(op.node_name, "node-z")
1652 51cc8637 Michael Hanselmann
        self.assertFalse(op.force)
1653 51cc8637 Michael Hanselmann
        self.assertFalse(hasattr(op, "dry_run"))
1654 51cc8637 Michael Hanselmann
1655 51cc8637 Michael Hanselmann
        if role == rlib2._NR_REGULAR:
1656 51cc8637 Michael Hanselmann
          self.assertFalse(op.drained)
1657 51cc8637 Michael Hanselmann
          self.assertFalse(op.offline)
1658 51cc8637 Michael Hanselmann
          self.assertFalse(op.master_candidate)
1659 51cc8637 Michael Hanselmann
        elif role == rlib2._NR_MASTER_CANDIDATE:
1660 51cc8637 Michael Hanselmann
          self.assertFalse(op.drained)
1661 51cc8637 Michael Hanselmann
          self.assertFalse(op.offline)
1662 51cc8637 Michael Hanselmann
          self.assertTrue(op.master_candidate)
1663 51cc8637 Michael Hanselmann
        elif role == rlib2._NR_DRAINED:
1664 51cc8637 Michael Hanselmann
          self.assertTrue(op.drained)
1665 51cc8637 Michael Hanselmann
          self.assertFalse(op.offline)
1666 51cc8637 Michael Hanselmann
          self.assertFalse(op.master_candidate)
1667 51cc8637 Michael Hanselmann
        elif role == rlib2._NR_OFFLINE:
1668 51cc8637 Michael Hanselmann
          self.assertFalse(op.drained)
1669 51cc8637 Michael Hanselmann
          self.assertTrue(op.offline)
1670 51cc8637 Michael Hanselmann
          self.assertFalse(op.master_candidate)
1671 51cc8637 Michael Hanselmann
        else:
1672 51cc8637 Michael Hanselmann
          self.fail("Unknown role '%s'" % role)
1673 51cc8637 Michael Hanselmann
1674 51cc8637 Michael Hanselmann
      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
1675 51cc8637 Michael Hanselmann
1676 51cc8637 Michael Hanselmann
1677 3429bc89 Michael Hanselmann
class TestSimpleResources(unittest.TestCase):
1678 3429bc89 Michael Hanselmann
  def setUp(self):
1679 3429bc89 Michael Hanselmann
    self.clfactory = _FakeClientFactory(_FakeClient)
1680 3429bc89 Michael Hanselmann
1681 3429bc89 Michael Hanselmann
  def tearDown(self):
1682 3429bc89 Michael Hanselmann
    self.assertRaises(IndexError, self.clfactory.GetNextClient)
1683 3429bc89 Michael Hanselmann
1684 3429bc89 Michael Hanselmann
  def testFeatures(self):
1685 3429bc89 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_features, [], {}, None, self.clfactory)
1686 3429bc89 Michael Hanselmann
    self.assertEqual(set(handler.GET()), rlib2.ALL_FEATURES)
1687 3429bc89 Michael Hanselmann
1688 132cdb87 Michael Hanselmann
  def testEmpty(self):
1689 132cdb87 Michael Hanselmann
    for cls in [rlib2.R_root, rlib2.R_2]:
1690 132cdb87 Michael Hanselmann
      handler = _CreateHandler(cls, [], {}, None, self.clfactory)
1691 132cdb87 Michael Hanselmann
      self.assertTrue(handler.GET() is None)
1692 3429bc89 Michael Hanselmann
1693 3429bc89 Michael Hanselmann
  def testVersion(self):
1694 3429bc89 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_version, [], {}, None, self.clfactory)
1695 3429bc89 Michael Hanselmann
    self.assertEqual(handler.GET(), constants.RAPI_VERSION)
1696 3429bc89 Michael Hanselmann
1697 3429bc89 Michael Hanselmann
1698 f75ab789 Michael Hanselmann
class TestClusterInfo(unittest.TestCase):
1699 f75ab789 Michael Hanselmann
  class _ClusterInfoClient:
1700 f75ab789 Michael Hanselmann
    def __init__(self):
1701 f75ab789 Michael Hanselmann
      self.cluster_info = None
1702 f75ab789 Michael Hanselmann
1703 f75ab789 Michael Hanselmann
    def QueryClusterInfo(self):
1704 f75ab789 Michael Hanselmann
      assert self.cluster_info is None
1705 f75ab789 Michael Hanselmann
      self.cluster_info = object()
1706 f75ab789 Michael Hanselmann
      return self.cluster_info
1707 f75ab789 Michael Hanselmann
1708 f75ab789 Michael Hanselmann
  def test(self):
1709 f75ab789 Michael Hanselmann
    clfactory = _FakeClientFactory(self._ClusterInfoClient)
1710 f75ab789 Michael Hanselmann
    handler = _CreateHandler(rlib2.R_2_info, [], {}, None, clfactory)
1711 f75ab789 Michael Hanselmann
    result = handler.GET()
1712 f75ab789 Michael Hanselmann
    cl = clfactory.GetNextClient()
1713 f75ab789 Michael Hanselmann
    self.assertRaises(IndexError, clfactory.GetNextClient)
1714 f75ab789 Michael Hanselmann
    self.assertEqual(result, cl.cluster_info)
1715 f75ab789 Michael Hanselmann
1716 f75ab789 Michael Hanselmann
1717 6395cebb Michael Hanselmann
if __name__ == '__main__':
1718 6395cebb Michael Hanselmann
  testutils.GanetiTestProgram()