blob: 9ea9a3d87e783e8f16ff29452ca0a4694f71dbda [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
Anju Tiwaric2849f22013-09-18 19:26:47 +053021from tempest.common.utils.data_utils import rand_name
22from tempest import exceptions
Giampaolo Lauriafd5f5952013-05-15 09:44:24 -040023from tempest.test import attr
Matthew Treinishfa23cf82013-03-06 14:23:02 -050024
25
Matthew Treinishce3ef922013-03-11 14:02:46 -040026class ImageMembersTests(base.BaseV1ImageTest):
Matthew Treinishfa23cf82013-03-06 14:23:02 -050027
28 @classmethod
29 def setUpClass(cls):
Matthew Treinishce3ef922013-03-11 14:02:46 -040030 super(ImageMembersTests, cls).setUpClass()
Attila Fazekase949cb72013-10-08 11:34:29 +020031 if cls.config.compute.allow_tenant_isolation:
32 creds = cls.isolated_creds.get_alt_creds()
33 username, tenant_name, password = creds
34 cls.os_alt = clients.Manager(username=username,
35 password=password,
36 tenant_name=tenant_name)
37 else:
38 cls.os_alt = clients.AltManager()
Matthew Treinishfa23cf82013-03-06 14:23:02 -050039
Attila Fazekase949cb72013-10-08 11:34:29 +020040 alt_tenant_name = cls.os_alt.tenant_name
41 identity_client = cls._get_identity_admin_client()
42 _, tenants = identity_client.list_tenants()
43 cls.alt_tenant_id = [tnt['id'] for tnt in tenants if tnt['name'] ==
44 alt_tenant_name][0]
Matthew Treinishfa23cf82013-03-06 14:23:02 -050045
Matthew Treinishce3ef922013-03-11 14:02:46 -040046 def _create_image(self):
Matthew Treinishfa23cf82013-03-06 14:23:02 -050047 image_file = StringIO.StringIO('*' * 1024)
Matthew Treinishce3ef922013-03-11 14:02:46 -040048 resp, image = self.create_image(container_format='bare',
49 disk_format='raw',
Attila Fazekase949cb72013-10-08 11:34:29 +020050 is_public=False,
Matthew Treinishce3ef922013-03-11 14:02:46 -040051 data=image_file)
Chang Bo Guofc77e932013-09-16 17:38:26 -070052 self.assertEqual(201, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050053 image_id = image['id']
Matthew Treinishfa23cf82013-03-06 14:23:02 -050054 return image_id
55
Giampaolo Lauriafd5f5952013-05-15 09:44:24 -040056 @attr(type='gate')
Matthew Treinishfa23cf82013-03-06 14:23:02 -050057 def test_add_image_member(self):
58 image = self._create_image()
Attila Fazekase949cb72013-10-08 11:34:29 +020059 resp = self.client.add_member(self.alt_tenant_id, image)
Chang Bo Guofc77e932013-09-16 17:38:26 -070060 self.assertEqual(204, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050061 resp, body = self.client.get_image_membership(image)
Chang Bo Guofc77e932013-09-16 17:38:26 -070062 self.assertEqual(200, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050063 members = body['members']
64 members = map(lambda x: x['member_id'], members)
Attila Fazekase949cb72013-10-08 11:34:29 +020065 self.assertIn(self.alt_tenant_id, members)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050066
Giampaolo Lauriafd5f5952013-05-15 09:44:24 -040067 @attr(type='gate')
Matthew Treinishfa23cf82013-03-06 14:23:02 -050068 def test_get_shared_images(self):
69 image = self._create_image()
Attila Fazekase949cb72013-10-08 11:34:29 +020070 resp = self.client.add_member(self.alt_tenant_id, image)
Chang Bo Guofc77e932013-09-16 17:38:26 -070071 self.assertEqual(204, resp.status)
Matthew Treinishce3ef922013-03-11 14:02:46 -040072 share_image = self._create_image()
Attila Fazekase949cb72013-10-08 11:34:29 +020073 resp = self.client.add_member(self.alt_tenant_id, share_image)
Chang Bo Guofc77e932013-09-16 17:38:26 -070074 self.assertEqual(204, resp.status)
Attila Fazekase949cb72013-10-08 11:34:29 +020075 resp, body = self.client.get_shared_images(self.alt_tenant_id)
Chang Bo Guofc77e932013-09-16 17:38:26 -070076 self.assertEqual(200, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050077 images = body['shared_images']
78 images = map(lambda x: x['image_id'], images)
79 self.assertIn(share_image, images)
80 self.assertIn(image, images)
81
Giampaolo Lauriafd5f5952013-05-15 09:44:24 -040082 @attr(type='gate')
Matthew Treinishfa23cf82013-03-06 14:23:02 -050083 def test_remove_member(self):
Matthew Treinishce3ef922013-03-11 14:02:46 -040084 image_id = self._create_image()
Attila Fazekase949cb72013-10-08 11:34:29 +020085 resp = self.client.add_member(self.alt_tenant_id, image_id)
Chang Bo Guofc77e932013-09-16 17:38:26 -070086 self.assertEqual(204, resp.status)
Attila Fazekase949cb72013-10-08 11:34:29 +020087 resp = self.client.delete_member(self.alt_tenant_id, image_id)
Chang Bo Guofc77e932013-09-16 17:38:26 -070088 self.assertEqual(204, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050089 resp, body = self.client.get_image_membership(image_id)
Chang Bo Guofc77e932013-09-16 17:38:26 -070090 self.assertEqual(200, resp.status)
Matthew Treinishfa23cf82013-03-06 14:23:02 -050091 members = body['members']
Attila Fazekase949cb72013-10-08 11:34:29 +020092 self.assertEqual(0, len(members), str(members))
Anju Tiwaric2849f22013-09-18 19:26:47 +053093
94 @attr(type=['negative', 'gate'])
95 def test_add_member_with_non_existing_image(self):
96 # Add member with non existing image.
97 non_exist_image = rand_name('image_')
98 self.assertRaises(exceptions.NotFound, self.client.add_member,
Attila Fazekase949cb72013-10-08 11:34:29 +020099 self.alt_tenant_id, non_exist_image)
Anju Tiwaric2849f22013-09-18 19:26:47 +0530100
101 @attr(type=['negative', 'gate'])
102 def test_delete_member_with_non_existing_image(self):
103 # Delete member with non existing image.
104 non_exist_image = rand_name('image_')
105 self.assertRaises(exceptions.NotFound, self.client.delete_member,
Attila Fazekase949cb72013-10-08 11:34:29 +0200106 self.alt_tenant_id, non_exist_image)
Anju Tiwaric2849f22013-09-18 19:26:47 +0530107
108 @attr(type=['negative', 'gate'])
109 def test_delete_member_with_non_existing_tenant(self):
110 # Delete member with non existing tenant.
111 image_id = self._create_image()
112 non_exist_tenant = rand_name('tenant_')
113 self.assertRaises(exceptions.NotFound, self.client.delete_member,
114 non_exist_tenant, image_id)