Merge "Fixing functional tests that require keystone"

This commit is contained in:
Jenkins 2011-10-19 15:05:53 +00:00 committed by Gerrit Code Review
commit e76456532c
5 changed files with 115 additions and 58 deletions

View File

@ -205,14 +205,14 @@ class Controller(object):
try:
session = db_api.get_session()
membership = db_api.image_member_find(req.context,
image_id, member,
image_id, id,
session=session)
if can_share is not None:
values = dict(can_share=can_share)
db_api.image_member_update(req.context, membership, values,
session=session)
except exception.NotFound:
values = dict(image_id=image['id'], member=member,
values = dict(image_id=image['id'], member=id,
can_share=bool(can_share))
db_api.image_member_create(req.context, values, session=session)

View File

@ -46,6 +46,33 @@ DEFAULT_FIXTURE = [
'2015-02-05T00:00'),
('token', 'add', '999888777666', 'admin', 'openstack',
'2015-02-05T00:00'),
#Services
#2 Service Name:swift Type:object-store
('service', 'add', 'swift',
'object-store', 'Swift-compatible service'),
('service', 'add', 'object_store',
'object-store', 'Swift-compatible service'),
#3 Service Name:cdn Type:object-store
('service', 'add', 'cdn',
'object-store', 'Swift-compatible service'),
#4 Service Name:nova Type:compute
('service', 'add', 'nova',
'compute', 'OpenStack Compute Service'),
('service', 'add', 'compute',
'compute', 'OpenStack Compute Service'),
('service', 'add', 'compute_v1',
'compute', 'OpenStack Compute Service'),
#5 Service Name:nova_compat Type:Compute
('service', 'add', 'nova_compat',
'compute', 'OpenStack Compute Service'),
#6 Service Name:glance Type:image
('service', 'add', 'glance',
'image', 'OpenStack Image Service'),
('service', 'add', 'image',
'image', 'OpenStack Image Service'),
#7 Service Name:keystone Type:identity
('service', 'add', 'identity',
'identity', 'OpenStack Identity Service'),
# Keeping for compatibility for a while till dashboard catches up
('endpointTemplates', 'add', 'RegionOne', 'swift',
'http://swift.publicinternets.com/v1/AUTH_%tenant_id%',

View File

@ -28,9 +28,12 @@ from glance.tests.utils import execute, find_executable
pattieblack_token = '887665443383'
pattieblack_id = '2'
froggy_token = '383344566788'
froggy_id = '3'
admin_token = '999888777666'
bacon_token = '111111111111'
bacon_id = '4'
prosciutto_token = '222222222222'

View File

@ -58,7 +58,7 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(data['image']['size'], FIVE_KB)
self.assertEqual(data['image']['name'], "Image1")
self.assertEqual(data['image']['is_public'], False)
self.assertEqual(data['image']['owner'], 'pattieblack')
self.assertEqual(data['image']['owner'], keystone_utils.pattieblack_id)
# Next, make sure froggy can't list the image
headers = {'X-Auth-Token': keystone_utils.froggy_token}
@ -135,11 +135,11 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
data = json.loads(content)
self.assertEqual(len(data['images']), 1)
self.assertEqual(data['images'][0]['id'], 1)
self.assertEqual(data['images'][0]['size'], FIVE_KB)
self.assertEqual(data['images'][0]['name'], "Image1")
self.assertEqual(data['images'][0]['is_public'], False)
self.assertEqual(data['images'][0]['owner'], 'pattieblack')
self.assertEqual(data['images'][0]['owner'],
keystone_utils.pattieblack_id)
# Pattieblack should be able to get the image metadata
headers = {'X-Auth-Token': keystone_utils.pattieblack_token}
@ -149,7 +149,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
self.assertEqual(response['x-image-meta-name'], "Image1")
self.assertEqual(response['x-image-meta-is_public'], "False")
self.assertEqual(response['x-image-meta-owner'], "pattieblack")
self.assertEqual(response['x-image-meta-owner'],
keystone_utils.pattieblack_id)
# And of course the image itself
headers = {'X-Auth-Token': keystone_utils.pattieblack_token}
@ -160,7 +161,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(content, "*" * FIVE_KB)
self.assertEqual(response['x-image-meta-name'], "Image1")
self.assertEqual(response['x-image-meta-is_public'], "False")
self.assertEqual(response['x-image-meta-owner'], "pattieblack")
self.assertEqual(response['x-image-meta-owner'],
keystone_utils.pattieblack_id)
# Pattieblack should be able to manipulate is_public
headers = {'X-Auth-Token': keystone_utils.pattieblack_token,
@ -172,7 +174,7 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
data = json.loads(content)
self.assertEqual(data['image']['name'], "Image1")
self.assertEqual(data['image']['is_public'], True)
self.assertEqual(data['image']['owner'], 'pattieblack')
self.assertEqual(data['image']['owner'], keystone_utils.pattieblack_id)
# Pattieblack can't give the image away, however
headers = {'X-Auth-Token': keystone_utils.pattieblack_token,
@ -184,7 +186,7 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
data = json.loads(content)
self.assertEqual(data['image']['name'], "Image1")
self.assertEqual(data['image']['is_public'], True)
self.assertEqual(data['image']['owner'], 'pattieblack')
self.assertEqual(data['image']['owner'], keystone_utils.pattieblack_id)
# Now that the image is public, froggy can see it
headers = {'X-Auth-Token': keystone_utils.froggy_token}
@ -210,7 +212,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(data['images'][0]['size'], FIVE_KB)
self.assertEqual(data['images'][0]['name'], "Image1")
self.assertEqual(data['images'][0]['is_public'], True)
self.assertEqual(data['images'][0]['owner'], 'pattieblack')
self.assertEqual(data['images'][0]['owner'],
keystone_utils.pattieblack_id)
# Froggy can get the image metadata now...
headers = {'X-Auth-Token': keystone_utils.froggy_token}
@ -220,7 +223,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
self.assertEqual(response['x-image-meta-name'], "Image1")
self.assertEqual(response['x-image-meta-is_public'], "True")
self.assertEqual(response['x-image-meta-owner'], "pattieblack")
self.assertEqual(response['x-image-meta-owner'],
keystone_utils.pattieblack_id)
# And of course the image itself
headers = {'X-Auth-Token': keystone_utils.froggy_token}
@ -231,7 +235,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(content, "*" * FIVE_KB)
self.assertEqual(response['x-image-meta-name'], "Image1")
self.assertEqual(response['x-image-meta-is_public'], "True")
self.assertEqual(response['x-image-meta-owner'], "pattieblack")
self.assertEqual(response['x-image-meta-owner'],
keystone_utils.pattieblack_id)
# Froggy still can't change is-public
headers = {'X-Auth-Token': keystone_utils.froggy_token,
@ -289,7 +294,7 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(data['image']['size'], FIVE_KB)
self.assertEqual(data['image']['name'], "Image1")
self.assertEqual(data['image']['is_public'], False)
self.assertEqual(data['image']['owner'], 'pattieblack')
self.assertEqual(data['image']['owner'], keystone_utils.pattieblack_id)
# Make sure admin does not see image by default
headers = {'X-Auth-Token': keystone_utils.admin_token}
@ -334,7 +339,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(data['images'][0]['size'], FIVE_KB)
self.assertEqual(data['images'][0]['name'], "Image1")
self.assertEqual(data['images'][0]['is_public'], False)
self.assertEqual(data['images'][0]['owner'], 'pattieblack')
self.assertEqual(data['images'][0]['owner'],
keystone_utils.pattieblack_id)
# Admin should be able to get the image metadata
headers = {'X-Auth-Token': keystone_utils.admin_token}
@ -344,7 +350,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
self.assertEqual(response['x-image-meta-name'], "Image1")
self.assertEqual(response['x-image-meta-is_public'], "False")
self.assertEqual(response['x-image-meta-owner'], "pattieblack")
self.assertEqual(response['x-image-meta-owner'],
keystone_utils.pattieblack_id)
# And of course the image itself
headers = {'X-Auth-Token': keystone_utils.admin_token}
@ -355,7 +362,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(content, "*" * FIVE_KB)
self.assertEqual(response['x-image-meta-name'], "Image1")
self.assertEqual(response['x-image-meta-is_public'], "False")
self.assertEqual(response['x-image-meta-owner'], "pattieblack")
self.assertEqual(response['x-image-meta-owner'],
keystone_utils.pattieblack_id)
# Admin should be able to manipulate is_public
headers = {'X-Auth-Token': keystone_utils.admin_token,
@ -367,7 +375,8 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
data = json.loads(content)
self.assertEqual(data['image']['name'], "Image1")
self.assertEqual(data['image']['is_public'], True)
self.assertEqual(data['image']['owner'], 'pattieblack')
self.assertEqual(data['image']['owner'],
keystone_utils.pattieblack_id)
# Admin should also be able to change the ownership of the
# image
@ -466,7 +475,7 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
# Or give themselves ownership
headers = {'X-Auth-Token': keystone_utils.pattieblack_token,
'X-Image-Meta-Owner': 'pattieblack'}
'X-Image-Meta-Owner': keystone_utils.pattieblack_id}
path = "http://%s:%d/v1/images/1" % ("0.0.0.0", self.api_port)
http = httplib2.Http()
response, content = http.request(path, 'PUT', headers=headers)
@ -515,7 +524,7 @@ class TestPrivateImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(data['image']['size'], FIVE_KB)
self.assertEqual(data['image']['name'], "Image1")
self.assertEqual(data['image']['is_public'], False)
self.assertEqual(data['image']['owner'], 'pattieblack')
self.assertEqual(data['image']['owner'], keystone_utils.pattieblack_id)
# Make sure anonymous user can't list the image
path = "http://%s:%d/v1/images" % ("0.0.0.0", self.api_port)
@ -715,7 +724,8 @@ class TestPrivateImagesCli(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
self.assertEqual(response['x-image-meta-name'], "MyImage")
self.assertEqual(response['x-image-meta-is_public'], "False")
self.assertEqual(response['x-image-meta-owner'], "pattieblack")
self.assertEqual(response['x-image-meta-owner'],
keystone_utils.pattieblack_id)
# Test that we can update is_public through the CLI
cmd = ("bin/glance --port=%d --auth_token=%s update 1 is_public=True" %
@ -733,7 +743,8 @@ class TestPrivateImagesCli(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
self.assertEqual(response['x-image-meta-name'], "MyImage")
self.assertEqual(response['x-image-meta-is_public'], "True")
self.assertEqual(response['x-image-meta-owner'], "pattieblack")
self.assertEqual(response['x-image-meta-owner'],
keystone_utils.pattieblack_id)
# Test that admin can change the owner
cmd = ("bin/glance --port=%d --auth_token=%s update 1 owner=froggy" %

View File

@ -45,7 +45,7 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(data['image']['size'], FIVE_KB)
self.assertEqual(data['image']['name'], "Image1")
self.assertEqual(data['image']['is_public'], False)
self.assertEqual(data['image']['owner'], 'pattieblack')
self.assertEqual(data['image']['owner'], keystone_utils.pattieblack_id)
return content
def _request(self, path, method, auth_token, headers=None, body=None):
@ -66,8 +66,9 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
data = json.loads(self._push_image())
# Now add froggy as a shared image member
path = "http://%s:%d/v1/images/%s/members/%s" % \
("0.0.0.0", self.api_port, data['image']['id'], 'froggy')
args = ("0.0.0.0", self.api_port, data['image']['id'],
keystone_utils.froggy_id)
path = "http://%s:%d/v1/images/%s/members/%s" % args
response, _ = self._request(path, 'PUT',
keystone_utils.pattieblack_token)
@ -112,8 +113,9 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
image = data['image']
# Now add froggy as a shared image member
path = "http://%s:%d/v1/images/%s/members/%s" % \
("0.0.0.0", self.api_port, data['image']['id'], 'froggy')
args = ("0.0.0.0", self.api_port, data['image']['id'],
keystone_utils.froggy_id)
path = "http://%s:%d/v1/images/%s/members/%s" % args
response, _ = self._request(path, 'PUT',
keystone_utils.pattieblack_token)
@ -148,14 +150,20 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(content, '{"images": []}')
# Replace froggy with bacon
body = json.dumps({'memberships': [{'member_id': 'bacon',
'can_share': False}]})
body = {
'memberships': [
{
'member_id': keystone_utils.bacon_id,
'can_share': False,
},
],
}
path = "http://%s:%d/v1/images/%s/members" % \
("0.0.0.0", self.api_port, image['id'])
response, content = self._request(path, 'PUT',
keystone_utils.pattieblack_token,
body=body)
body=json.dumps(body))
self.assertEqual(response.status, 204)
# Ensure bacon can see the image
@ -186,8 +194,9 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
data = json.loads(self._push_image())
# Now add froggy as a shared image member
path = "http://%s:%d/v1/images/%s/members/%s" % \
("0.0.0.0", self.api_port, data['image']['id'], 'froggy')
args = ("0.0.0.0", self.api_port, data['image']['id'],
keystone_utils.froggy_id)
path = "http://%s:%d/v1/images/%s/members/%s" % args
response, _ = self._request(path, 'PUT',
keystone_utils.pattieblack_token)
@ -223,8 +232,9 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(content, '{"images": []}')
# Now remove froggy as a shared image member
path = "http://%s:%d/v1/images/%s/members/%s" % \
("0.0.0.0", self.api_port, image['id'], 'froggy')
args = ("0.0.0.0", self.api_port, image['id'],
keystone_utils.froggy_id)
path = "http://%s:%d/v1/images/%s/members/%s" % args
response, content = self._request(path, 'DELETE',
keystone_utils.pattieblack_token)
@ -266,8 +276,9 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
# Now add froggy as a shared image member
body = json.dumps({'member': {'can_share': True}})
path = "http://%s:%d/v1/images/%s/members/%s" % \
("0.0.0.0", self.api_port, data['image']['id'], 'froggy')
args = ("0.0.0.0", self.api_port, data['image']['id'],
keystone_utils.froggy_id)
path = "http://%s:%d/v1/images/%s/members/%s" % args
response, content = self._request(path, 'PUT',
keystone_utils.pattieblack_token,
@ -288,8 +299,8 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(data['images'][0]['name'], "Image1")
# Froggy is going to share with bacon
path = "http://%s:%d/v1/images/%s/members/%s" % \
("0.0.0.0", self.api_port, image['id'], 'bacon')
args = ("0.0.0.0", self.api_port, image['id'], keystone_utils.bacon_id)
path = "http://%s:%d/v1/images/%s/members/%s" % args
response, _ = self._request(path, 'PUT',
keystone_utils.froggy_token)
@ -329,11 +340,12 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
data = json.loads(self._push_image())
# Now add froggy as a shared image member
path = "http://%s:%d/v1/images/%s/members/%s" % \
("0.0.0.0", self.api_port, data['image']['id'], 'froggy')
args = ("0.0.0.0", self.api_port, data['image']['id'],
keystone_utils.froggy_id)
path = "http://%s:%d/v1/images/%s/members/%s" % args
response, content = self._request(path, 'PUT',
keystone_utils.pattieblack_token)
keystone_utils.pattieblack_token)
self.assertEqual(response.status, 204)
path = "http://%s:%d/v1/images/%s/members" % \
@ -344,7 +356,8 @@ class TestSharedImagesApi(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
body = json.loads(content)
self.assertEqual(body['members'][0]['can_share'], False)
self.assertEqual(body['members'][0]['member_id'], 'froggy')
self.assertEqual(body['members'][0]['member_id'],
keystone_utils.froggy_id)
self.stop_servers()
@ -365,7 +378,7 @@ class TestSharedImagesCli(keystone_utils.KeystoneTests):
self.assertEqual(data['image']['size'], FIVE_KB)
self.assertEqual(data['image']['name'], str(name))
self.assertEqual(data['image']['is_public'], False)
self.assertEqual(data['image']['owner'], 'pattieblack')
self.assertEqual(data['image']['owner'], keystone_utils.pattieblack_id)
return content
def _request(self, path, method, auth_token, headers=None, body=None):
@ -392,9 +405,9 @@ class TestSharedImagesCli(keystone_utils.KeystoneTests):
image_id = data['image']['id']
# Test that we can add froggy as a shared image member
cmd = ("bin/glance --port=%d --auth_token=%s member-add %s %s" %
(self.api_port, keystone_utils.pattieblack_token,
image_id, 'froggy'))
args = (self.api_port, keystone_utils.pattieblack_token,
image_id, keystone_utils.froggy_id)
cmd = "bin/glance --port=%d --auth_token=%s member-add %s %s" % args
exitcode, out, err = execute(cmd)
self.assertEqual(0, exitcode)
@ -407,14 +420,15 @@ class TestSharedImagesCli(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
data = json.loads(content)
self.assertEqual(len(data['members']), 1)
self.assertEqual(data['members'][0]['member_id'], 'froggy')
self.assertEqual(data['members'][0]['member_id'],
keystone_utils.froggy_id)
self.assertEqual(data['members'][0]['can_share'], False)
# Test that we can replace a shared image membership list
cmd = ("bin/glance --port=%d --auth_token=%s members-replace %s %s "
"--can-share" %
(self.api_port, keystone_utils.pattieblack_token,
image_id, 'bacon'))
image_id, keystone_utils.bacon_id))
exitcode, out, err = execute(cmd)
self.assertEqual(0, exitcode)
@ -427,13 +441,14 @@ class TestSharedImagesCli(keystone_utils.KeystoneTests):
self.assertEqual(response.status, 200)
data = json.loads(content)
self.assertEqual(len(data['members']), 1)
self.assertEqual(data['members'][0]['member_id'], 'bacon')
self.assertEqual(data['members'][0]['member_id'],
keystone_utils.bacon_id)
self.assertEqual(data['members'][0]['can_share'], True)
# Test that we can delete an image membership
cmd = ("bin/glance --port=%d --auth_token=%s member-delete %s %s" %
(self.api_port, keystone_utils.pattieblack_token,
image_id, 'bacon'))
image_id, keystone_utils.bacon_id))
exitcode, out, err = execute(cmd)
self.assertEqual(0, exitcode)
@ -467,24 +482,24 @@ class TestSharedImagesCli(keystone_utils.KeystoneTests):
# Share images with froggy and bacon
cmd = ("bin/glance --port=%d --auth_token=%s member-add %s %s" %
(self.api_port, keystone_utils.pattieblack_token,
image1_id, 'froggy'))
image1_id, keystone_utils.froggy_id))
exitcode, out, err = execute(cmd)
self.assertEqual(0, exitcode)
cmd = ("bin/glance --port=%d --auth_token=%s member-add %s %s" %
(self.api_port, keystone_utils.pattieblack_token,
image1_id, 'bacon'))
image1_id, keystone_utils.bacon_id))
exitcode, out, err = execute(cmd)
self.assertEqual(0, exitcode)
cmd = ("bin/glance --port=%d --auth_token=%s member-add %s %s "
"--can-share" %
(self.api_port, keystone_utils.pattieblack_token,
image2_id, 'froggy'))
image2_id, keystone_utils.froggy_id))
exitcode, out, err = execute(cmd)
self.assertEqual(0, exitcode)
cmd = ("bin/glance --port=%d --auth_token=%s member-add %s %s "
"--can-share" %
(self.api_port, keystone_utils.pattieblack_token,
image2_id, 'bacon'))
image2_id, keystone_utils.bacon_id))
exitcode, out, err = execute(cmd)
self.assertEqual(0, exitcode)
@ -495,8 +510,8 @@ class TestSharedImagesCli(keystone_utils.KeystoneTests):
self.assertEqual(0, exitcode)
result = self._outsplit(out)
self.assertTrue('froggy' in result)
self.assertTrue('bacon' in result)
self.assertTrue(keystone_utils.froggy_id in result)
self.assertTrue(keystone_utils.bacon_id in result)
# Try again for can_share
cmd = ("bin/glance --port=%d --auth_token=%s image-members %s" %
@ -506,12 +521,13 @@ class TestSharedImagesCli(keystone_utils.KeystoneTests):
result = self._outsplit(out)
self.assertEqual(result[-1], '(*: Can share image)')
self.assertTrue('froggy *' in result[:-2])
self.assertTrue('bacon *' in result[:-2])
self.assertTrue(keystone_utils.froggy_id + ' *' in result[:-2])
self.assertTrue(keystone_utils.bacon_id + ' *' in result[:-2])
# Get the list of member images
cmd = ("bin/glance --port=%d --auth_token=%s member-images %s" %
(self.api_port, keystone_utils.pattieblack_token, 'froggy'))
(self.api_port, keystone_utils.pattieblack_token,
keystone_utils.froggy_id))
exitcode, out, err = execute(cmd)
self.assertEqual(0, exitcode)