[Kimchi-devel] [PATCH V2 6/6] template supports networks: update test case

Aline Manera alinefm at linux.vnet.ibm.com
Mon Dec 30 11:27:38 UTC 2013


On 12/27/2013 07:21 AM, shaohef at linux.vnet.ibm.com wrote:
> From: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
>
> update test_rest and test_model
>
> Signed-off-by: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
> ---
>   tests/test_model.py | 87 +++++++++++++++++++++++++++++++++++++++++------------
>   tests/test_rest.py  | 68 +++++++++++++++++++++++++++++++++++++++++
>   2 files changed, 136 insertions(+), 19 deletions(-)
>
> diff --git a/tests/test_model.py b/tests/test_model.py
> index fb7d6dd..d1e516e 100644
> --- a/tests/test_model.py
> +++ b/tests/test_model.py
> @@ -253,8 +253,10 @@ class ModelTests(unittest.TestCase):
>               disk_path = '/tmp/kimchi-images/%s-0.img' % vm_info['uuid']
>               self.assertTrue(os.access(disk_path, os.F_OK))
>
> +    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
>       def test_template_create(self):
> -        inst = kimchi.model.Model('test:///default', objstore_loc=self.tmp_store)
> +        inst = kimchi.model.Model('qemu:///system',
> +                                  objstore_loc=self.tmp_store)
>           # Test non-exist path raises InvalidParameter
>           params = {'name': 'test',
>                     'cdrom': '/non-exsitent.iso'}
> @@ -264,27 +266,74 @@ class ModelTests(unittest.TestCase):
>           params['cdrom'] = os.path.abspath(__file__)
>           self.assertRaises(InvalidParameter, inst.templates_create, params)
>
> -    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> -    def test_template_update(self):
> -        inst = kimchi.model.Model('qemu:///system', objstore_loc=self.tmp_store)
> -
> -        orig_params = {'name': 'test', 'memory': '1024', 'cpus': '1'}
> -        inst.templates_create(orig_params)
> +        with utils.RollbackContext() as rollback:
> +            net_name = 'test-network'
> +            net_args = {'name': net_name,
> +                        'connection': 'nat',
> +                        'subnet': '127.0.100.0/24'}
> +            inst.networks_create(net_args)
> +            rollback.prependDefer(inst.network_delete, net_name)
> +
> +            params = {'name': 'test', 'memory': '1024', 'cpus': '1'}

memory and cpus should be integer, right?

> +            inst.templates_create(params)
> +            rollback.prependDefer(inst.template_delete, 'test')
> +            info = inst.template_lookup('test')
> +            for key in params.keys():
> +                self.assertEquals(params[key], info[key])
> +            self.assertEquals("default", info["networks"][0])
>
> -        params = {'name': 'new-test'}
> -        self.assertEquals('new-test', inst.template_update('test', params))
> +            # create template with with non-existent network
> +            params['name'] = 'new-test'
> +            params['networks'] = ["no-exist"]
> +            self.assertRaises(NotFoundError, inst.templates_create, params)
>
> -        params = {'name': 'new-test', 'memory': '512', 'cpus': '2'}
> -        inst.template_update('new-test', params)
> -        info = inst.template_lookup('new-test')
> -        for key in params.keys():
> -            self.assertEquals(params[key], info[key])
> +            params['networks'] = ['default', 'test-network']
> +            inst.templates_create(params)
> +            rollback.prependDefer(inst.template_delete, params['name'])
> +            info = inst.template_lookup(params['name'])
> +            for key in params.keys():
> +                self.assertEquals(params[key], info[key])
>
> -        params = {'name': 'new-test', 'memory': 1024, 'cpus': 1}
> -        inst.template_update('new-test', params)
> -        info = inst.template_lookup('new-test')
> -        for key in params.keys():
> -            self.assertEquals(params[key], info[key])
> +    @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
> +    def test_template_update(self):
> +        inst = kimchi.model.Model('qemu:///system',
> +                                  objstore_loc=self.tmp_store)
> +        with utils.RollbackContext() as rollback:
> +            net_name = 'test-network'
> +            net_args = {'name': net_name,
> +                        'connection': 'nat',
> +                        'subnet': '127.0.100.0/24'}
> +            inst.networks_create(net_args)
> +            rollback.prependDefer(inst.network_delete, net_name)
> +
> +            orig_params = {'name': 'test', 'memory': '1024', 'cpus': '1'}

Same here.

> +            inst.templates_create(orig_params)
> +
> +            params = {'name': 'new-test'}
> +            self.assertEquals('new-test', inst.template_update('test', params))
> +            self.assertRaises(NotFoundError, inst.template_delete,
> +                              'test', params)
> +
> +            params = {'name': 'new-test', 'memory': '512', 'cpus': '2'}

And here

> +            inst.template_update('new-test', params)
> +            info = inst.template_lookup('new-test')
> +            for key in params.keys():
> +                self.assertEquals(params[key], info[key])
> +            self.assertEquals("default", info["networks"][0])
> +
> +            params = {'name': 'new-test', 'memory': 1024, 'cpus': 1,

And here

> +                      'networks': ['default', 'test-network']}
> +            inst.template_update('new-test', params)
> +            info = inst.template_lookup('new-test')
> +            for key in params.keys():
> +                self.assertEquals(params[key], info[key])
> +
> +            # test update with with non-existent network
> +            params = {'networks': ["no-exist"]}
> +            self.assertRaises(NotFoundError, inst.template_update,
> +                              'new-test', params)
> +
> +            inst.template_delete('new-test')
>
>       def test_vm_edit(self):
>           inst = kimchi.model.Model('qemu:///system', objstore_loc=self.tmp_store)
> diff --git a/tests/test_rest.py b/tests/test_rest.py
> index f597796..3602aae 100644
> --- a/tests/test_rest.py
> +++ b/tests/test_rest.py
> @@ -345,6 +345,74 @@ class RestTests(unittest.TestCase):
>           # Verify the volume was deleted
>           self.assertHTTPStatus(404, vol_uri)
>
> +    def test_template_customise_network(self):
> +        tmpl = {'name': 'test', 'cdrom': '/nonexistent.iso',
> +                'disks': [{'size': 1}]}
> +        req = json.dumps(tmpl)
> +        resp = self.request('/templates', req, 'POST')
> +        self.assertEquals(201, resp.status)
> +        tmpl_res = json.loads(resp.read())
> +        self.assertTrue(type(tmpl_res['networks']) is list)
> +        self.assertEquals("default", tmpl_res['networks'][0])
> +
> +        tmpl['name'] = "failed_tmpl"
> +        # Create a Template with non-array network fails with 400
> +        tmpl['networks'] = "test-network"
> +        req = json.dumps(tmpl)
> +        resp = self.request('/templates', req, 'POST')
> +        self.assertEquals(400, resp.status)
> +
> +        # Create a Template with empty-array network fails with 400
> +        tmpl['networks'] = []
> +        req = json.dumps(tmpl)
> +        resp = self.request('/templates', req, 'POST')
> +        self.assertEquals(400, resp.status)
> +
> +        # Create a Template with non-existent network fails with 404
> +        tmpl['networks'] = ["test-network"]
> +        req = json.dumps(tmpl)
> +        resp = self.request('/templates', req, 'POST')
> +        self.assertEquals(404, resp.status)
> +
> +        # Create a network
> +        req = json.dumps({'name': 'test-network',
> +                          'connection': 'nat',
> +                          'net': '127.0.1.0/24'})
> +        resp = request(host, port, '/networks', req, 'POST')
> +        self.assertEquals(201, resp.status)
> +
> +        tmpl['name'] = "test"
> +        # Update a Template with non-array network fails with 400
> +        tmpl['networks'] = "bad-network"
> +        req = json.dumps(tmpl)
> +        resp = self.request('/templates/test', req, 'PUT')
> +        self.assertEquals(400, resp.status)
> +
> +        # Update a Template with empty-array network fails with 400
> +        tmpl['networks'] = []
> +        req = json.dumps(tmpl)
> +        resp = self.request('/templates/test', req, 'PUT')
> +        self.assertEquals(400, resp.status)
> +
> +        # Update a Template with non-existent network fails with 404
> +        tmpl['networks'] = ["bad-network"]
> +        req = json.dumps(tmpl)
> +        resp = self.request('/templates/test', req, 'PUT')
> +        self.assertEquals(404, resp.status)
> +
> +        # Update a Template with existent network, successful
> +        tmpl['networks'] = ["default", "test-network"]
> +        req = json.dumps(tmpl)
> +        resp = self.request('/templates/test', req, 'PUT')
> +        self.assertEquals(200, resp.status)
> +        tmpl_res = json.loads(resp.read())
> +        self.assertTrue(type(tmpl_res['networks']) is list)
> +        self.assertEquals(tmpl['networks'], tmpl_res['networks'])
> +
> +        # Delete the network
> +        resp = request(host, port, '/networks/test-network', '{}', 'DELETE')
> +        self.assertEquals(204, resp.status)
> +
>       def test_unnamed_vms(self):
>           # Create a Template
>           req = json.dumps({'name': 'test', 'cdrom': '/nonexistent.iso'})




More information about the Kimchi-devel mailing list