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))
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)
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)
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)
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'))
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'))
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)
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))
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)
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)
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)
def _report_delete(self, name): request(host, ssl_port, '/plugins/gingerbase/debugreports/%s' % name, '{}', 'DELETE')
def test_debugreports(self): resp = request(host, ssl_port, '/plugins/gingerbase/debugreports') self.assertEquals(200, 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', '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)