blob: 92052fc456bc3a3aeb23ae00546a405d1a5025de [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
19from tempest import clients
Matthew Treinishce3ef922013-03-11 14:02:46 -040020from tempest.tests.image import base
Matthew Treinishfa23cf82013-03-06 14:23:02 -050021
22
Matthew Treinishce3ef922013-03-11 14:02:46 -040023class ImageMembersTests(base.BaseV1ImageTest):
Matthew Treinishfa23cf82013-03-06 14:23:02 -050024
25 @classmethod
26 def setUpClass(cls):
Matthew Treinishce3ef922013-03-11 14:02:46 -040027 super(ImageMembersTests, cls).setUpClass()
Matthew Treinishfa23cf82013-03-06 14:23:02 -050028 admin = clients.AdminManager(interface='json')
29 cls.admin_client = admin.identity_client
Matthew Treinishfa23cf82013-03-06 14:23:02 -050030 cls.tenants = cls._get_tenants()
31
32 @classmethod
Matthew Treinishfa23cf82013-03-06 14:23:02 -050033 def _get_tenants(cls):
34 resp, tenants = cls.admin_client.list_tenants()
35 tenants = map(lambda x: x['id'], tenants)
36 return tenants
37
Matthew Treinishce3ef922013-03-11 14:02:46 -040038 def _create_image(self):
Matthew Treinishfa23cf82013-03-06 14:23:02 -050039 image_file = StringIO.StringIO('*' * 1024)
Matthew Treinishce3ef922013-03-11 14:02:46 -040040 resp, image = self.create_image(container_format='bare',
41 disk_format='raw',
42 is_public=True,
43 data=image_file)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050044 self.assertEquals(201, resp.status)
45 image_id = image['id']
Matthew Treinishfa23cf82013-03-06 14:23:02 -050046 return image_id
47
48 def test_add_image_member(self):
49 image = self._create_image()
50 resp = self.client.add_member(self.tenants[0], image)
51 self.assertEquals(204, resp.status)
52 resp, body = self.client.get_image_membership(image)
53 self.assertEquals(200, resp.status)
54 members = body['members']
55 members = map(lambda x: x['member_id'], members)
56 self.assertIn(self.tenants[0], members)
57
58 def test_get_shared_images(self):
59 image = self._create_image()
60 resp = self.client.add_member(self.tenants[0], image)
61 self.assertEquals(204, resp.status)
Matthew Treinishce3ef922013-03-11 14:02:46 -040062 share_image = self._create_image()
Matthew Treinishfa23cf82013-03-06 14:23:02 -050063 resp = self.client.add_member(self.tenants[0], share_image)
64 self.assertEquals(204, resp.status)
65 resp, body = self.client.get_shared_images(self.tenants[0])
66 self.assertEquals(200, resp.status)
67 images = body['shared_images']
68 images = map(lambda x: x['image_id'], images)
69 self.assertIn(share_image, images)
70 self.assertIn(image, images)
71
72 def test_remove_member(self):
Matthew Treinishce3ef922013-03-11 14:02:46 -040073 image_id = self._create_image()
Matthew Treinishfa23cf82013-03-06 14:23:02 -050074 resp = self.client.add_member(self.tenants[0], image_id)
75 self.assertEquals(204, resp.status)
76 resp = self.client.delete_member(self.tenants[0], image_id)
77 self.assertEquals(204, resp.status)
78 resp, body = self.client.get_image_membership(image_id)
79 self.assertEquals(200, resp.status)
80 members = body['members']
81 self.assertEquals(0, len(members))