blob: fcbde509784d73f43da723b99fcda0061078d32b [file] [log] [blame]
Matthew Treinishfa23cf82013-03-06 14:23:02 -05001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2013 IBM Corp.
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License. You may obtain
7# a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations
15# under the License.
16
17import cStringIO as StringIO
18
Sean Dague1937d092013-05-17 16:36:38 -040019from tempest.api.image import base
Matthew Treinishfa23cf82013-03-06 14:23:02 -050020from tempest import clients
Giampaolo Lauriafd5f5952013-05-15 09:44:24 -040021from tempest.test import attr
Matthew Treinishfa23cf82013-03-06 14:23:02 -050022
23
Matthew Treinishce3ef922013-03-11 14:02:46 -040024class ImageMembersTests(base.BaseV1ImageTest):
Matthew Treinishfa23cf82013-03-06 14:23:02 -050025
26 @classmethod
27 def setUpClass(cls):
Matthew Treinishce3ef922013-03-11 14:02:46 -040028 super(ImageMembersTests, cls).setUpClass()
Matthew Treinishfa23cf82013-03-06 14:23:02 -050029 admin = clients.AdminManager(interface='json')
30 cls.admin_client = admin.identity_client
Matthew Treinishfa23cf82013-03-06 14:23:02 -050031 cls.tenants = cls._get_tenants()
32
33 @classmethod
Matthew Treinishfa23cf82013-03-06 14:23:02 -050034 def _get_tenants(cls):
35 resp, tenants = cls.admin_client.list_tenants()
36 tenants = map(lambda x: x['id'], tenants)
37 return tenants
38
Matthew Treinishce3ef922013-03-11 14:02:46 -040039 def _create_image(self):
Matthew Treinishfa23cf82013-03-06 14:23:02 -050040 image_file = StringIO.StringIO('*' * 1024)
Matthew Treinishce3ef922013-03-11 14:02:46 -040041 resp, image = self.create_image(container_format='bare',
42 disk_format='raw',
43 is_public=True,
44 data=image_file)
Chang Bo Guofc77e932013-09-16 17:38:26 -070045 self.assertEqual(201, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050046 image_id = image['id']
Matthew Treinishfa23cf82013-03-06 14:23:02 -050047 return image_id
48
Giampaolo Lauriafd5f5952013-05-15 09:44:24 -040049 @attr(type='gate')
Matthew Treinishfa23cf82013-03-06 14:23:02 -050050 def test_add_image_member(self):
51 image = self._create_image()
52 resp = self.client.add_member(self.tenants[0], image)
Chang Bo Guofc77e932013-09-16 17:38:26 -070053 self.assertEqual(204, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050054 resp, body = self.client.get_image_membership(image)
Chang Bo Guofc77e932013-09-16 17:38:26 -070055 self.assertEqual(200, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050056 members = body['members']
57 members = map(lambda x: x['member_id'], members)
58 self.assertIn(self.tenants[0], members)
59
Giampaolo Lauriafd5f5952013-05-15 09:44:24 -040060 @attr(type='gate')
Matthew Treinishfa23cf82013-03-06 14:23:02 -050061 def test_get_shared_images(self):
62 image = self._create_image()
63 resp = self.client.add_member(self.tenants[0], image)
Chang Bo Guofc77e932013-09-16 17:38:26 -070064 self.assertEqual(204, resp.status)
Matthew Treinishce3ef922013-03-11 14:02:46 -040065 share_image = self._create_image()
Matthew Treinishfa23cf82013-03-06 14:23:02 -050066 resp = self.client.add_member(self.tenants[0], share_image)
Chang Bo Guofc77e932013-09-16 17:38:26 -070067 self.assertEqual(204, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050068 resp, body = self.client.get_shared_images(self.tenants[0])
Chang Bo Guofc77e932013-09-16 17:38:26 -070069 self.assertEqual(200, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050070 images = body['shared_images']
71 images = map(lambda x: x['image_id'], images)
72 self.assertIn(share_image, images)
73 self.assertIn(image, images)
74
Giampaolo Lauriafd5f5952013-05-15 09:44:24 -040075 @attr(type='gate')
Matthew Treinishfa23cf82013-03-06 14:23:02 -050076 def test_remove_member(self):
Matthew Treinishce3ef922013-03-11 14:02:46 -040077 image_id = self._create_image()
Matthew Treinishfa23cf82013-03-06 14:23:02 -050078 resp = self.client.add_member(self.tenants[0], image_id)
Chang Bo Guofc77e932013-09-16 17:38:26 -070079 self.assertEqual(204, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050080 resp = self.client.delete_member(self.tenants[0], image_id)
Chang Bo Guofc77e932013-09-16 17:38:26 -070081 self.assertEqual(204, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050082 resp, body = self.client.get_image_membership(image_id)
Chang Bo Guofc77e932013-09-16 17:38:26 -070083 self.assertEqual(200, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050084 members = body['members']
Chang Bo Guofc77e932013-09-16 17:38:26 -070085 self.assertEqual(0, len(members))