Beispiel #1
0
    def test_vm_list_sorted(self):
        req = json.dumps({
            'name': 'test',
            'source_media': {
                'type': 'disk',
                'path': fake_iso
            }
        })
        request('/plugins/kimchi/templates', req, 'POST')

        def add_vm(name):
            # Create a VM
            req = json.dumps({
                'name': name,
                'template': '/plugins/kimchi/templates/test'
            })
            task = json.loads(
                request('/plugins/kimchi/vms', req, 'POST').read())
            wait_task(model.task_lookup, task['id'])

        vms = [u'abc', u'bca', u'cab', u'xba']
        for vm in vms:
            add_vm(vm)

        vms.append(u'test')
        self.assertEqual(model.vms_get_list(), sorted(vms))
Beispiel #2
0
 def test_debugreport_download(self):
     req = json.dumps({'name': 'test_rest_report1'})
     with RollbackContext() as rollback:
         resp = request('/plugins/gingerbase/debugreports', req, 'POST')
         self.assertEquals(202, resp.status)
         task = json.loads(resp.read())
         # make sure the debugreport doesn't exist until the
         # the task is finished
         wait_task(self._task_lookup, task['id'], 20)
         rollback.prependDefer(self._report_delete, 'test_rest_report1')
         resp = request(
             '/plugins/gingerbase/debugreports/test_rest_report1'
         )
         debugreport = json.loads(resp.read())
         self.assertEquals('test_rest_report1', debugreport['name'])
         self.assertEquals(200, resp.status)
         resp = request(
             '/plugins/gingerbase/debugreports/test_rest_report1/content'
         )
         self.assertEquals(200, resp.status)
         resp = request(
             '/plugins/gingerbase/debugreports/test_rest_report1'
         )
         debugre = json.loads(resp.read())
         resp = request('/' + debugre['uri'])
         self.assertEquals(200, resp.status)
Beispiel #3
0
 def test_debugreport_download(self):
     req = json.dumps({'name': 'test_rest_report1'})
     with RollbackContext() as rollback:
         resp = request('/plugins/gingerbase/debugreports', req, 'POST')
         self.assertEquals(202, resp.status)
         task = json.loads(resp.read())
         # make sure the debugreport doesn't exist until the
         # the task is finished
         wait_task(self._task_lookup, task['id'], 20)
         rollback.prependDefer(self._report_delete, 'test_rest_report1')
         resp = request(
             '/plugins/gingerbase/debugreports/test_rest_report1'
         )
         debugreport = json.loads(resp.read())
         self.assertEquals("test_rest_report1", debugreport['name'])
         self.assertEquals(200, resp.status)
         resp = request(
             '/plugins/gingerbase/debugreports/test_rest_report1/content'
         )
         self.assertEquals(200, resp.status)
         resp = request(
             '/plugins/gingerbase/debugreports/test_rest_report1'
         )
         debugre = json.loads(resp.read())
         resp = request('/' + debugre['uri'])
         self.assertEquals(200, resp.status)
Beispiel #4
0
    def test_development_env(self):
        """
        Test traceback thrown in development env
        """
        setup_server()
        # test 404
        resp = json.loads(request('/tasks/blah').read())
        self.assertEqual('404 Not Found', resp.get('code'))

        # test 405 wrong method
        resp = json.loads(request('/', None, 'DELETE').read())
        msg = u'WOKAPI0002E: Delete is not allowed for wokroot'
        self.assertEqual('405 Method Not Allowed', resp.get('code'))
        self.assertEqual(msg, resp.get('reason'))

        # test 400 parse error
        resp = json.loads(request('/tasks', '{', 'POST').read())
        msg = u'WOKAPI0006E: Unable to parse JSON request'
        self.assertEqual('400 Bad Request', resp.get('code'))
        self.assertEqual(msg, resp.get('reason'))
        self.assertIn('call_stack', resp)

        # test 405 method not allowed
        req = json.dumps({})
        resp = json.loads(request('/tasks', req, 'POST').read())
        m = u'WOKAPI0005E: Create is not allowed for tasks'
        self.assertEqual('405 Method Not Allowed', resp.get('code'))
        self.assertEqual(m, resp.get('reason'))
        self.assertIn('call_stack', resp)
Beispiel #5
0
    def test_screenshot_refresh(self):
        # Create a VM
        req = json.dumps({'name': 'test', 'cdrom': fake_iso})
        request(host, ssl_port, '/plugins/kimchi/templates', req, 'POST')
        req = json.dumps({'name': 'test-vm',
                          'template': '/plugins/kimchi/templates/test'})
        resp = request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST')
        task = json.loads(resp.read())
        wait_task(model.task_lookup, task['id'])

        # Test screenshot refresh for running vm
        request(host, ssl_port, '/plugins/kimchi/vms/test-vm/start', '{}',
                'POST')
        resp = request(host, ssl_port,
                       '/plugins/kimchi/vms/test-vm/screenshot')
        self.assertEquals(200, resp.status)
        self.assertEquals('image/png', resp.getheader('content-type'))
        resp1 = request(host, ssl_port, '/plugins/kimchi/vms/test-vm')
        rspBody = resp1.read()
        testvm_Data = json.loads(rspBody)
        screenshotURL = '/' + testvm_Data['screenshot']
        time.sleep(5)
        resp2 = request(host, ssl_port, screenshotURL)
        self.assertEquals(200, resp2.status)
        self.assertEquals(resp2.getheader('content-type'),
                          resp.getheader('content-type'))
        self.assertEquals(resp2.getheader('content-length'),
                          resp.getheader('content-length'))
        self.assertEquals(resp2.getheader('last-modified'),
                          resp.getheader('last-modified'))
Beispiel #6
0
    def test_screenshot_refresh(self):
        # Create a VM
        req = json.dumps({'name': 'test',
                          'source_media': {'type': 'disk', 'path': fake_iso}})
        request(host, ssl_port, '/plugins/kimchi/templates', req, 'POST')
        req = json.dumps({'name': 'test-vm',
                          'template': '/plugins/kimchi/templates/test'})
        resp = request(host, ssl_port, '/plugins/kimchi/vms', req, 'POST')
        task = json.loads(resp.read())
        wait_task(model.task_lookup, task['id'])

        # Test screenshot refresh for running vm
        request(host, ssl_port, '/plugins/kimchi/vms/test-vm/start', '{}',
                'POST')
        resp = request(host, ssl_port,
                       '/plugins/kimchi/vms/test-vm/screenshot')
        self.assertEquals(200, resp.status)
        self.assertEquals('image/png', resp.getheader('content-type'))
        resp1 = request(host, ssl_port, '/plugins/kimchi/vms/test-vm')
        rspBody = resp1.read()
        testvm_Data = json.loads(rspBody)
        screenshotURL = '/' + testvm_Data['screenshot']
        time.sleep(5)
        resp2 = request(host, ssl_port, screenshotURL)
        self.assertEquals(200, resp2.status)
        self.assertEquals(resp2.getheader('content-type'),
                          resp.getheader('content-type'))
        self.assertEquals(resp2.getheader('content-length'),
                          resp.getheader('content-length'))
        self.assertEquals(resp2.getheader('last-modified'),
                          resp.getheader('last-modified'))
Beispiel #7
0
 def add_vm(name):
     # Create a VM
     req = json.dumps({'name': name,
                       'template': '/plugins/kimchi/templates/test'})
     task = json.loads(request(host, ssl_port, '/plugins/kimchi/vms',
                       req, 'POST').read())
     wait_task(model.task_lookup, task['id'])
Beispiel #8
0
 def add_vm(name):
     # Create a VM
     req = json.dumps({'name': name,
                       'template': '/plugins/kimchi/templates/test'})
     task = json.loads(request(host, ssl_port, '/plugins/kimchi/vms',
                       req, 'POST').read())
     wait_task(model.task_lookup, task['id'])
    def test_get_storagepools(self):
        storagepools = json.loads(
            self.request('/plugins/kimchi/storagepools').read()
        )
        self.assertIn('default', [pool['name'] for pool in storagepools])

        with RollbackContext() as rollback:
            # Now add a couple of storage pools
            for i in xrange(3):
                name = u'kīмсhī-storagepool-%i' % i
                path = '/var/lib/libvirt/images/%i' % i
                req = json.dumps({'name': name, 'type': 'dir', 'path': path})
                resp = self.request('/plugins/kimchi/storagepools', req,
                                    'POST')
                rollback.prependDefer(model.storagepool_delete, name)
                rollback.prependDefer(shutil.rmtree, path)

                self.assertEquals(201, resp.status)

                # Pool name must be unique
                req = json.dumps({'name': name, 'type': 'dir',
                                  'path': '/var/lib/libvirt/images/%i' % i})
                resp = self.request('/plugins/kimchi/storagepools', req,
                                    'POST')
                self.assertEquals(400, resp.status)

                # Verify pool information
                resp = self.request('/plugins/kimchi/storagepools/%s' %
                                    name.encode("utf-8"))
                p = json.loads(resp.read())
                keys = [u'name', u'state', u'capacity', u'allocated',
                        u'available', u'path', u'source', u'type',
                        u'nr_volumes', u'autostart', u'persistent']
                self.assertEquals(sorted(keys), sorted(p.keys()))
                self.assertEquals(name, p['name'])
                self.assertEquals('inactive', p['state'])
                self.assertEquals(True, p['persistent'])
                self.assertEquals(True, p['autostart'])
                self.assertEquals(0, p['nr_volumes'])

            pools = json.loads(
                self.request('/plugins/kimchi/storagepools').read()
            )
            self.assertEquals(len(storagepools) + 3, len(pools))

            # Create a pool with an existing path
            tmp_path = tempfile.mkdtemp(dir='/var/lib/kimchi')
            rollback.prependDefer(os.rmdir, tmp_path)
            req = json.dumps({'name': 'existing_path', 'type': 'dir',
                              'path': tmp_path})
            resp = self.request('/plugins/kimchi/storagepools', req, 'POST')
            rollback.prependDefer(model.storagepool_delete, 'existing_path')
            self.assertEquals(201, resp.status)

            # Reserved pool return 400
            req = json.dumps({'name': 'kimchi_isos', 'type': 'dir',
                              'path': '/var/lib/libvirt/images/%i' % i})
            resp = request(host, ssl_port, '/plugins/kimchi/storagepools', req,
                           'POST')
            self.assertEquals(400, resp.status)
    def test_get_storagepools(self):
        storagepools = json.loads(self.request("/plugins/kimchi/storagepools").read())
        self.assertIn("default", [pool["name"] for pool in storagepools])

        with RollbackContext() as rollback:
            # Now add a couple of storage pools
            for i in xrange(3):
                name = u"kīмсhī-storagepool-%i" % i
                path = "/var/lib/libvirt/images/%i" % i
                req = json.dumps({"name": name, "type": "dir", "path": path})
                resp = self.request("/plugins/kimchi/storagepools", req, "POST")
                rollback.prependDefer(model.storagepool_delete, name)
                rollback.prependDefer(shutil.rmtree, path)

                self.assertEquals(201, resp.status)

                # Pool name must be unique
                req = json.dumps({"name": name, "type": "dir", "path": "/var/lib/libvirt/images/%i" % i})
                resp = self.request("/plugins/kimchi/storagepools", req, "POST")
                self.assertEquals(400, resp.status)

                # Verify pool information
                resp = self.request("/plugins/kimchi/storagepools/%s" % name.encode("utf-8"))
                p = json.loads(resp.read())
                keys = [
                    u"name",
                    u"state",
                    u"capacity",
                    u"allocated",
                    u"available",
                    u"path",
                    u"source",
                    u"type",
                    u"nr_volumes",
                    u"autostart",
                    u"persistent",
                ]
                self.assertEquals(sorted(keys), sorted(p.keys()))
                self.assertEquals(name, p["name"])
                self.assertEquals("inactive", p["state"])
                self.assertEquals(True, p["persistent"])
                self.assertEquals(True, p["autostart"])
                self.assertEquals(0, p["nr_volumes"])

            pools = json.loads(self.request("/plugins/kimchi/storagepools").read())
            self.assertEquals(len(storagepools) + 3, len(pools))

            # Create a pool with an existing path
            tmp_path = tempfile.mkdtemp(dir="/var/lib/kimchi")
            rollback.prependDefer(os.rmdir, tmp_path)
            req = json.dumps({"name": "existing_path", "type": "dir", "path": tmp_path})
            resp = self.request("/plugins/kimchi/storagepools", req, "POST")
            rollback.prependDefer(model.storagepool_delete, "existing_path")
            self.assertEquals(201, resp.status)

            # Reserved pool return 400
            req = json.dumps({"name": "kimchi_isos", "type": "dir", "path": "/var/lib/libvirt/images/%i" % i})
            resp = request(host, ssl_port, "/plugins/kimchi/storagepools", req, "POST")
            self.assertEquals(400, resp.status)
Beispiel #11
0
    def test_vm_list_sorted(self):
        req = json.dumps({'name': 'test', 'cdrom': fake_iso})
        request(host, ssl_port, '/plugins/kimchi/templates', req, 'POST')

        def add_vm(name):
            # Create a VM
            req = json.dumps({'name': name,
                              'template': '/plugins/kimchi/templates/test'})
            task = json.loads(request(host, ssl_port, '/plugins/kimchi/vms',
                              req, 'POST').read())
            wait_task(model.task_lookup, task['id'])

        vms = [u'abc', u'bca', u'cab', u'xba']
        for vm in vms:
            add_vm(vm)

        vms.append(u'test')
        self.assertEqual(model.vms_get_list(), sorted(vms))
Beispiel #12
0
    def test_development_env(self):
        """
        Test traceback thrown in development env
        """
        server_root = '/test'
        setup_server(server_root=server_root)

        # check if server_root in config is the same used to start server
        resp = request(server_root + '/config').read()
        conf = json.loads(resp)
        self.assertEqual(len(conf), 6)
Beispiel #13
0
    def test_production_env(self):
        """
        Test reasons sanitized in production env
        """
        server_root = '/test'
        setup_server('production', server_root)

        # check if server_root in config is the same used to start server
        resp = request(server_root + '/config').read()
        conf = json.loads(resp)
        self.assertEqual(len(conf), 6)
Beispiel #14
0
 def test_create_debugreport(self):
     req = json.dumps({'name': 'report1'})
     with RollbackContext() as rollback:
         resp = request(host, ssl_port, '/plugins/gingerbase/debugreports',
                        req, 'POST')
         self.assertEquals(202, resp.status)
         task = json.loads(resp.read())
         # make sure the debugreport doesn't exist until the
         # the task is finished
         wait_task(self._task_lookup, task['id'])
         rollback.prependDefer(self._report_delete, 'report2')
         resp = request(host, ssl_port,
                        '/plugins/gingerbase/debugreports/report1')
         debugreport = json.loads(resp.read())
         self.assertEquals("report1", debugreport['name'])
         self.assertEquals(200, resp.status)
         req = json.dumps({'name': 'report2'})
         resp = request(host, ssl_port,
                        '/plugins/gingerbase/debugreports/report1',
                        req, 'PUT')
         self.assertEquals(303, resp.status)
Beispiel #15
0
 def test_create_debugreport(self):
     req = json.dumps({'name': 'report1'})
     with RollbackContext() as rollback:
         resp = request(host, ssl_port, '/plugins/gingerbase/debugreports',
                        req, 'POST')
         self.assertEquals(202, resp.status)
         task = json.loads(resp.read())
         # make sure the debugreport doesn't exist until the
         # the task is finished
         wait_task(self._task_lookup, task['id'])
         rollback.prependDefer(self._report_delete, 'report2')
         resp = request(host, ssl_port,
                        '/plugins/gingerbase/debugreports/report1')
         debugreport = json.loads(resp.read())
         self.assertEquals("report1", debugreport['name'])
         self.assertEquals(200, resp.status)
         req = json.dumps({'name': 'report2'})
         resp = request(host, ssl_port,
                        '/plugins/gingerbase/debugreports/report1', req,
                        'PUT')
         self.assertEquals(303, resp.status)
Beispiel #16
0
 def _report_delete(self, name):
     request(host, ssl_port, '/plugins/gingerbase/debugreports/%s' % name,
             '{}', 'DELETE')
Beispiel #17
0
 def test_debugreports(self):
     resp = request(host, ssl_port, '/plugins/gingerbase/debugreports')
     self.assertEquals(200, resp.status)
Beispiel #18
0
    def test_get_storagepools(self):
        storagepools = json.loads(
            self.request('/plugins/kimchi/storagepools').read())
        self.assertIn('default', [pool['name'] for pool in storagepools])

        with RollbackContext() as rollback:
            # Now add a couple of storage pools
            for i in xrange(3):
                name = u'kīмсhī-storagepool-%i' % i
                path = '/var/lib/libvirt/images/%i' % i
                req = json.dumps({'name': name, 'type': 'dir', 'path': path})
                resp = self.request('/plugins/kimchi/storagepools', req,
                                    'POST')
                rollback.prependDefer(model.storagepool_delete, name)
                rollback.prependDefer(shutil.rmtree, path)

                self.assertEquals(201, resp.status)

                # Pool name must be unique
                req = json.dumps({
                    'name': name,
                    'type': 'dir',
                    'path': '/var/lib/libvirt/images/%i' % i
                })
                resp = self.request('/plugins/kimchi/storagepools', req,
                                    'POST')
                self.assertEquals(400, resp.status)

                # Verify pool information
                resp = self.request('/plugins/kimchi/storagepools/%s' %
                                    name.encode("utf-8"))
                p = json.loads(resp.read())
                keys = [
                    u'name', u'state', u'capacity', u'allocated', u'available',
                    u'path', u'source', u'type', u'nr_volumes', u'autostart',
                    u'persistent', 'in_use'
                ]
                self.assertEquals(sorted(keys), sorted(p.keys()))
                self.assertEquals(name, p['name'])
                self.assertEquals('inactive', p['state'])
                self.assertEquals(True, p['persistent'])
                self.assertEquals(True, p['autostart'])
                self.assertEquals(0, p['nr_volumes'])

            pools = json.loads(
                self.request('/plugins/kimchi/storagepools').read())
            self.assertEquals(len(storagepools) + 3, len(pools))

            # Create a pool with an existing path
            tmp_path = tempfile.mkdtemp(dir='/var/lib/kimchi')
            rollback.prependDefer(os.rmdir, tmp_path)
            req = json.dumps({
                'name': 'existing_path',
                'type': 'dir',
                'path': tmp_path
            })
            resp = self.request('/plugins/kimchi/storagepools', req, 'POST')
            rollback.prependDefer(model.storagepool_delete, 'existing_path')
            self.assertEquals(201, resp.status)

            # Reserved pool return 400
            req = json.dumps({
                'name': 'kimchi_isos',
                'type': 'dir',
                'path': '/var/lib/libvirt/images/%i' % i
            })
            resp = request('/plugins/kimchi/storagepools', req, 'POST')
            self.assertEquals(400, resp.status)
Beispiel #19
0
 def _report_delete(self, name):
     request(host, ssl_port, '/plugins/gingerbase/debugreports/%s' % name,
             '{}', 'DELETE')
Beispiel #20
0
 def test_debugreports(self):
     resp = request(host, ssl_port, '/plugins/gingerbase/debugreports')
     self.assertEquals(200, resp.status)