~andreserl/maas/python3_qa_lab_tests

« back to all changes in this revision

Viewing changes to maas-api.py

  • Committer: Brendan Donegan
  • Date: 2016-11-18 16:53:54 UTC
  • mto: This revision was merged to the branch mainline in revision 485.
  • Revision ID: brendan.donegan@canonical.com-20161118165354-zut1pp2y3cuoovqi
Add more tests from the regular test suite

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
import yaml
4
4
from contextlib import closing
5
5
from itertools import count
 
6
from json import loads
6
7
 
7
8
import api
8
9
from config import (
21
22
from utils import (
22
23
    assertCommandReturnCode,
23
24
    pause_until_released,
24
 
    get_maas_revision,
25
25
    get_rack_interface_link,
26
26
    get_rack_systemid_on_region,
27
27
    ipmi_power_off,
28
28
    ipmi_power_on,
29
29
    retries,
30
30
    run_command,
 
31
    setup_ssh,
31
32
)
32
33
from timeout import timeout
33
34
from unittest import skipIf
44
45
    GreaterThan,
45
46
)
46
47
import requests
47
 
from subprocess import check_call
48
48
 
49
49
from urllib.request import urlopen
50
50
from urllib.error import HTTPError
185
185
        self.assertEqual(0, retcode)
186
186
        self.assertEqual('', err)
187
187
 
188
 
    def test_maashandler_auth_set_config_http_proxy(self):
189
 
        uri = api.MAAS_API + "maas/?op=set_config"
190
 
        data = {
191
 
            'name': 'http_proxy',
192
 
            # TODO: Get this from the env
193
 
            'value': HTTP_PROXY,
194
 
        }
195
 
        response = requests.post(
196
 
            uri, data=data, auth=self.oauth, headers=api.APP_JSON_HEADER
197
 
        )
198
 
        self.assertTrue(response.ok, response.text)
199
 
 
200
 
    def test_maashandler_auth_get_config_http_proxy(self):
201
 
        uri = api.MAAS_API + "maas/?op=get_config"
202
 
        params = {
203
 
            'name': 'http_proxy'
204
 
        }
205
 
        response = requests.get(
206
 
            uri,
207
 
            params=params,
208
 
            auth=self.oauth, headers=api.APP_JSON_HEADER
209
 
        )
210
 
        self.assertTrue(response.ok, response.text)
211
 
        self.assertThat(
212
 
            response.text, Equals('"{}"'.format(HTTP_PROXY))
213
 
        )
214
 
 
215
188
    def test_maashandler_auth_set_config_main_archive(self):
216
189
        uri = api.MAAS_API + "maas/?op=set_config"
217
190
        data = {
293
266
            })
294
267
        }))
295
268
 
 
269
    def test_maashandler_auth_set_config_http_proxy(self):
 
270
        uri = api.MAAS_API + "maas/?op=set_config"
 
271
        data = {
 
272
            'name': 'http_proxy',
 
273
            # TODO: Get this from the env
 
274
            'value': HTTP_PROXY,
 
275
        }
 
276
        response = requests.post(
 
277
            uri, data=data, auth=self.oauth, headers=api.APP_JSON_HEADER
 
278
        )
 
279
        self.assertTrue(response.ok, response.text)
 
280
 
 
281
    def test_maashandler_auth_get_config_http_proxy(self):
 
282
        uri = api.MAAS_API + "maas/?op=get_config"
 
283
        params = {
 
284
            'name': 'http_proxy'
 
285
        }
 
286
        response = requests.get(
 
287
            uri,
 
288
            params=params,
 
289
            auth=self.oauth, headers=api.APP_JSON_HEADER
 
290
        )
 
291
        self.assertTrue(response.ok, response.text)
 
292
        self.assertThat(
 
293
            response.text, Equals('"{}"'.format(HTTP_PROXY))
 
294
        )
 
295
 
 
296
    def test_add_ssh_key(self):
 
297
        """Add our ssh key to the admin account."""
 
298
        setup_ssh()
 
299
        home_dir = os.path.expanduser('~/')
 
300
        ssh_dir = os.path.join(home_dir, '.ssh')
 
301
        ssh_key = open(
 
302
            os.path.join(ssh_dir, 'id_rsa.pub')).read()
 
303
        self._run_maas_cli(["sshkeys", "create", "key=%s" % ssh_key])
 
304
        out, _ = self._run_maas_cli(["sshkeys", "read"])
 
305
        keys = loads(out)
 
306
        self.assertEqual(ssh_key, keys[0]['key'])
 
307
 
 
308
    def _get_rack_controllers(self):
 
309
        uri = api.MAAS_API + "rackcontrollers/"
 
310
        return requests.get(
 
311
            uri, auth=self.oauth, headers=api.APP_JSON_HEADER
 
312
        )
 
313
 
 
314
    def test_rackcontrollershandler_auth_read(self):
 
315
        response = self._get_rack_controllers()
 
316
        self.assertTrue(response.ok, response.text)
 
317
        self.shelf['rackcontrollers'] = response.json()
 
318
 
 
319
    def _get_rack(self, rack_id):
 
320
        uri = api.MAAS_API + "rackcontrollers/{rack}/".format(
 
321
            rack=rack_id
 
322
        )
 
323
        return requests.get(
 
324
            uri, auth=self.oauth, headers=api.APP_JSON_HEADER
 
325
        )
 
326
 
 
327
    def test_rackcontrollerhandler_auth_read(self):
 
328
        primary_rack_sid = get_rack_systemid_on_region(
 
329
            self.shelf['rackcontrollers']
 
330
        )
 
331
        response = self._get_rack(primary_rack_sid)
 
332
        self.assertTrue(response.ok, response.text)
 
333
        self.shelf['primaryrack'] = response.json()
 
334
 
 
335
    def _get_master_rack(self):
 
336
        response = self._get_rack_controllers()
 
337
        rack_controllers = response.json()
 
338
        if len(rack_controllers) > 0:
 
339
            return rack_controllers[0]
 
340
        return None
 
341
 
 
342
    def get_rack_service_status(self, rack_id, service_name):
 
343
        rack_info = self._get_rack(rack_id)
 
344
        for service in rack_info['service_set']:
 
345
            if service['name'] == service_name:
 
346
                return service['status']
 
347
        return ''
 
348
 
 
349
    def test_region_rack_connected(self):
 
350
        # The master cluster is connected and changed the uuid field of the
 
351
        # nodegroup object from 'master' to its UUID.
 
352
        while self.get_master_rack() is None:
 
353
            time.sleep(10)
 
354
        rack_id = self.get_master_rack()['system_id']
 
355
        while self.get_rack_service_status(rack_id, 'rackd') != 'running':
 
356
            time.sleep(10)
 
357
 
 
358
    def test_stop_image_import(self):
 
359
        pass
 
360
 
 
361
    def test_set_custom_boot_source(self):
 
362
        pass
 
363
 
 
364
    def test_start_image_import(self):
 
365
        pass
 
366
 
296
367
    def test_iprangeshandler_auth_create(self):
297
368
        uri = api.MAAS_API + "ipranges/"
298
369
        data = {
321
392
        )
322
393
        self.assertTrue(response.ok, response.text)
323
394
 
324
 
    def test_rackcontrollershandler_auth_read(self):
325
 
        uri = api.MAAS_API + "rackcontrollers/"
326
 
        response = requests.get(
327
 
            uri, auth=self.oauth, headers=api.APP_JSON_HEADER
328
 
        )
329
 
        self.assertTrue(response.ok, response.text)
330
 
        self.shelf['rackcontrollers'] = response.json()
331
 
 
332
 
    def test_rackcontrollerhandler_auth_read(self):
333
 
        primary_rack_sid = get_rack_systemid_on_region(
334
 
            self.shelf['rackcontrollers']
335
 
        )
336
 
        uri = api.MAAS_API + "rackcontrollers/{rack}/".format(
337
 
            rack=primary_rack_sid
338
 
        )
339
 
        response = requests.get(
340
 
            uri, auth=self.oauth, headers=api.APP_JSON_HEADER
341
 
        )
342
 
        self.assertTrue(response.ok, response.text)
343
 
        self.shelf['primaryrack'] = response.json()
344
 
 
345
395
    def _check_dhcp_service_status(self, rack_sid):
346
396
        uri = api.MAAS_API + "rackcontrollers/{rack}/".format(
347
397
            rack=rack_sid