def test_add_with_location_and_id(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) image_id = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 1a. Add public image cmd = minimal_add_command(api_port, 'MyImage', 'id=%s' % image_id, 'location=http://example.com') exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) expected = 'Added new image with ID: %s' % image_id self.assertTrue(expected in out) # 1b. Add public image with non-uuid id cmd = minimal_add_command(api_port, 'MyImage', 'id=12345', 'location=http://example.com') exitcode, out, err = execute(cmd, expected_exitcode=1) self.assertEqual(1, exitcode) self.assertTrue('Invalid image id format' in out) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] image_id, name, disk_format, container_format, size = \ [c.strip() for c in line.split()] self.assertEqual('MyImage', name) self.assertEqual('0', size, "Expected image to be 0 bytes in size, " "but got %s. " % size) self.stop_servers()
def test_add_with_location_and_id(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) image_id = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 1a. Add public image cmd = minimal_add_command(api_port, 'MyImage', 'id=%s' % image_id, 'location=http://example.com') exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) expected = 'Added new image with ID: %s' % image_id self.assertTrue(expected in out) # 1b. Add public image with non-uuid id cmd = minimal_add_command(api_port, 'MyImage', 'id=12345', 'location=http://example.com') exitcode, out, err = execute(cmd, expected_exitcode=1) self.assertEqual(1, exitcode) self.assertTrue('Invalid image id format' in out) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] image_id, name, disk_format, container_format, size = \ [c.strip() for c in line.split()] self.assertEqual('MyImage', name) self.assertEqual('0', size, "Expected image to be 0 bytes in size, " "but got %s. " % size)
def test_add_location_without_checksum(self): """ We test the following: 1. Add an image with location and no checksum 2. Run SQL against DB to verify checksum is NULL """ self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 1. Add public image cmd = minimal_add_command(api_port, 'MyImage', 'location=http://example.com') exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) image_id = out.split(":")[1].strip() sql = 'SELECT checksum FROM images WHERE id = "%s"' % image_id recs = self.run_sql_cmd(sql) self.assertEqual(None, recs.first()[0]) self.stop_servers()
def test_glance_cli_noauth_strategy(self): """ Test the CLI with the noauth strategy defaulted to. """ suffix = '--auth_token=%s' % keystone_utils.pattieblack_token cmd = minimal_add_command(self.api_port, 'MyImage', suffix, False) self._do_test_glance_cli(cmd)
def test_api_treats_size_as_a_normal_property(self): """ A test for LP bug #825024 -- glance client currently treats size as a normal property. """ self.cleanup() self.start_servers() # 1. POST /images with public image named Image1 # attribute and no custom properties. Verify a 200 OK is returned with tempfile.NamedTemporaryFile() as image_file: image_file.write("XXX") image_file.flush() image_file_name = image_file.name suffix = 'size=12345 --silent-upload < %s' % image_file_name cmd = minimal_add_command(self.api_port, 'MyImage', suffix) exitcode, out, err = execute(cmd) image_id = out.strip().split(':')[1].strip() self.assertEqual(0, exitcode) self.assertTrue('Found non-settable field size. Removing.' in out) self.assertTrue('Added new image with ID: %s' % image_id in out) # 2. Verify image added as public image cmd = "bin/glance --port=%d show %s" % (self.api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertFalse("12345" in out) self.stop_servers()
def _create_by_admin(self, owner): # ownership set by admin user (defaults as such due to no-auth) cmd = minimal_add_command(self.api_port, 'MyImage', '--silent-upload owner=%s' % owner) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) return out.strip().replace('Added new image with ID: ', '')
def test_glance_cli_keystone_strategy_environment(self): """ Test the CLI with the keystone strategy enabled via environment variables. """ os.environ['OS_AUTH_URL'] = 'http://localhost:%d/v1.0' % self.auth_port os.environ['OS_AUTH_STRATEGY'] = 'keystone' os.environ['OS_AUTH_USER'] = '******' os.environ['OS_AUTH_KEY'] = 'secrete' os.environ['OS_REGION_NAME'] = 'RegionOne' cmd = minimal_add_command(self.api_port, 'MyImage', public=False) self._do_test_glance_cli(cmd)
def test_glance_cli_keystone_strategy_switches(self): """ Test the CLI with the keystone (v1) strategy enabled via command line switches. """ substitutions = (self.auth_port, 'keystone', 'pattieblack', 'secrete') suffix = ("--auth_url=http://localhost:%d/v1.0 " "--auth_strategy=%s --username=%s --password=%s " % substitutions) cmd = minimal_add_command(self.api_port, 'MyImage', suffix, False) self._do_test_glance_cli(cmd)
def test_show_image_format(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 1. Add public image with tempfile.NamedTemporaryFile() as image_file: image_file.write("XXX") image_file.flush() image_file_name = image_file.name suffix = ' --silent-upload < %s' % image_file_name cmd = minimal_add_command(api_port, 'MyImage', suffix) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) image_id = out.strip().rsplit(' ', 1)[1] # 2. Verify image added as public image cmd = "bin/glance --port=%d show %s" % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[:-1] expected_lines = [ 'URI: http://0.0.0.0:%s/v1/images/%s' % (api_port, image_id), 'Id: %s' % image_id, 'Public: Yes', 'Name: MyImage', 'Status: active', 'Size: 3', 'Disk format: raw', 'Container format: ovf', 'Minimum Ram Required (MB): 0', 'Minimum Disk Required (GB): 0', ] self.assertTrue(set(lines) >= set(expected_lines)) # 3. Delete the image cmd = "bin/glance --port=%d --force delete %s" % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('Deleted image %s' % image_id, out.strip()) self.stop_servers()
def test_add_with_location_and_stdin(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image with tempfile.NamedTemporaryFile() as image_file: image_file.write("XXX") image_file.flush() file_name = image_file.name cmd = minimal_add_command(api_port, 'MyImage', 'location=http://localhost:0 < %s' % file_name) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] img_info = [c.strip() for c in line.split()] image_id, name, disk_format, container_format, size = img_info self.assertEqual('MyImage', name) self.assertEqual('0', size, "Expected image to be 0 bytes in size, " "but got %s. " % size) self.stop_servers()
def test_add_clear(self): """ We test the following: 1. Add a couple images with metadata 2. Clear the images 3. Verify no public images found 4. Run SQL against DB to verify no undeleted properties """ self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 1. Add some images for i in range(1, 5): cmd = minimal_add_command(api_port, 'MyImage', 'foo=bar') exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().find('Added new image with ID:') > -1) # 2. Clear all images cmd = "bin/glance --port=%d --force clear" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) # 3. Verify no public images are found cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n") first_line = lines[0] self.assertEqual('', first_line) # 4. Lastly we manually verify with SQL that image properties are # also getting marked as deleted. sql = "SELECT COUNT(*) FROM image_properties WHERE deleted = 0" recs = self.run_sql_cmd(sql) for rec in recs: self.assertEqual(0, rec[0]) self.stop_servers()
def test_add_with_location_and_stdin(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image with tempfile.NamedTemporaryFile() as image_file: image_file.write("XXX") image_file.flush() file_name = image_file.name cmd = minimal_add_command( api_port, 'MyImage', 'location=http://localhost:0 < %s' % file_name) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] img_info = [c.strip() for c in line.split()] image_id, name, disk_format, container_format, size = img_info self.assertEqual('MyImage', name) self.assertEqual( '0', size, "Expected image to be 0 bytes in size, " "but got %s. " % size) self.stop_servers()
def test_add_with_owner_admin(self): """Test setting ownership of new image by admin user""" self.cleanup() self.start_servers(**self.__dict__.copy()) # ownership set by admin user (defaults as such due to no-auth) cmd = minimal_add_command(self.api_port, 'MyImage', '--silent-upload owner=42') exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) image_id = out.strip().replace('Added new image with ID: ', '') self._verify_owner('42', image_id)
def test_add_copying_from(self): self.cleanup() self.start_servers(**self.__dict__.copy()) setup_http(self) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image suffix = 'copy_from=%s' % get_http_uri(self, 'foobar') cmd = minimal_add_command(api_port, 'MyImage', suffix) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] image_id, name, disk_format, container_format, size = \ [c.strip() for c in line.split()] self.assertEqual('MyImage', name) self.assertEqual( '5120', size, "Expected image to be 5120 bytes " " in size, but got %s. " % size) self.stop_servers()
def test_add_copying_from(self): self.cleanup() self.start_servers(**self.__dict__.copy()) setup_http(self) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image suffix = 'copy_from=%s' % get_http_uri(self, 'foobar') cmd = minimal_add_command(api_port, 'MyImage', suffix) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] image_id, name, disk_format, container_format, size = \ [c.strip() for c in line.split()] self.assertEqual('MyImage', name) self.assertEqual('5120', size, "Expected image to be 5120 bytes " " in size, but got %s. " % size) self.stop_servers()
def test_add_with_location(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image cmd = minimal_add_command(api_port, 'MyImage', 'location=http://example.com') exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] image_id, name, disk_format, container_format, size = \ [c.strip() for c in line.split()] self.assertEqual('MyImage', name) self.assertEqual('0', size, "Expected image to be 0 bytes in size, " "but got %s. " % size)
def test_add_with_location(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image cmd = minimal_add_command(api_port, 'MyImage', 'location=http://example.com') exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Added new image with ID:')) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] image_id, name, disk_format, container_format, size = \ [c.strip() for c in line.split()] self.assertEqual('MyImage', name) self.assertEqual( '0', size, "Expected image to be 0 bytes in size, " "but got %s. " % size)
def test_add_list_update_list(self): """ Test for LP Bugs #736295, #767203 We test the following: 0. Verify no public images in index 1. Add a NON-public image 2. Check that image does not appear in index 3. Update the image to be public 4. Check that image now appears in index 5. Update the image's Name attribute 6. Verify the updated name is shown """ self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image cmd = minimal_add_command(api_port, 'MyImage', 'location=http://example.com', public=False) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) msg = out.split('\n') self.assertTrue(msg[0].startswith('Added new image with ID:')) image_id = out.strip().split(':')[1].strip() # 2. Verify image does not appear as a public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 3. Update the image to make it public cmd = "bin/glance --port=%d update %s is_public=True" % ( api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('Updated image %s' % image_id, out.strip()) # 4. Verify image 1 in list of public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(len(lines), 1) self.assertTrue('MyImage' in lines[0]) # 5. Update the image's Name attribute updated_image_name = "Updated image name" cmd = ("bin/glance --port=%d update %s is_public=True name=\"%s\"" % (api_port, image_id, updated_image_name)) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('Updated image %s' % image_id, out.strip()) # 6. Verify updated name shown cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(updated_image_name in out, "%s not found in %s" % (updated_image_name, out)) self.stop_servers()
def test_add_list_delete_list(self): """ We test the following: 0. Verify no public images in index 1. Add a public image 2. Check that image exists in index 3. Delete the image 4. Verify no longer in index """ self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image with tempfile.NamedTemporaryFile() as image_file: image_file.write("XXX") image_file.flush() image_file_name = image_file.name suffix = '--silent-upload < %s' % image_file_name cmd = minimal_add_command(api_port, 'MyImage', suffix) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) msg = out.split("\n") self._assertStartsWith(msg[0], 'Added new image with ID:') # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] img_info = [c.strip() for c in line.split()] image_id, name, disk_format, container_format, size = img_info self.assertEqual('MyImage', name) self.assertEqual('3', size, "Expected image to be 3 bytes in size, but got %s. " "Make sure you're running the correct version " "of webob." % size) # 3. Delete the image cmd = "bin/glance --port=%d --force delete %s" % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('Deleted image %s' % image_id, out.strip()) # 4. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) self.stop_servers()
def test_protected_image(self): """ We test the following: 0. Verify no public images in index 1. Add a public image with a location attr protected and no image data 2. Check that image exists in index 3. Attempt to delete the image 4. Remove protection from image 5. Delete the image 6. Verify no longer in index """ self.cleanup() self.start_servers() api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image cmd = ("echo testdata | " + minimal_add_command(api_port, 'MyImage', 'protected=True')) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) msg = out.split("\n") self.assertTrue(msg[3].startswith('Added new image with ID:')) # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] img_info = [c.strip() for c in line.split()] image_id, name, disk_format, container_format, size = img_info self.assertEqual('MyImage', name) # 3. Delete the image cmd = "bin/glance --port=%d --force delete %s" % (api_port, image_id) exitcode, out, err = execute(cmd, raise_error=False) self.assertNotEqual(0, exitcode) self.assertTrue(out.startswith('You do not have permission')) # 4. Remove image protection cmd = ("bin/glance --port=%d --force update %s " "protected=False" % (api_port, image_id)) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Updated image')) # 5. Delete the image cmd = "bin/glance --port=%d --force delete %s" % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(out.strip().startswith('Deleted image')) # 6. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) self.stop_servers()
def test_add_member(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port image_id = "11111111-1111-1111-1111-111111111111" member_id = "21111111-2111-2111-2111-211111111111" member2_id = "31111111-3111-3111-3111-311111111111" # 0. Add an image cmd = minimal_add_command(api_port, 'MyImage', 'id=%s' % image_id, 'location=http://example.com') exitcode, out, err = execute(cmd) # 1. Add an image member cmd = "bin/glance --port=%d member-add %s %s" % (api_port, image_id, member_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 2. Verify image-members cmd = "bin/glance --port=%d image-members %s " % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(member_id in out) # 3. Verify member-images cmd = "bin/glance --port=%d member-images %s " % (api_port, member_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(image_id in out) # 4. Replace image members cmd = "bin/glance --port=%d members-replace %s %s" % (api_port, image_id, member2_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 5. Verify member-images again for member2 cmd = "bin/glance --port=%d member-images %s " % (api_port, member2_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(image_id in out) # 6. Verify member-images again for member1 (should not be present) cmd = "bin/glance --port=%d member-images %s " % (api_port, member_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(image_id not in out) # 7. Delete the member cmd = "bin/glance --port=%d member-delete %s %s" % (api_port, image_id, member2_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 8. Verify image-members is empty cmd = "bin/glance --port=%d image-members %s " % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) self.stop_servers()
def test_add_list_update_list(self): """ Test for LP Bugs #736295, #767203 We test the following: 0. Verify no public images in index 1. Add a NON-public image 2. Check that image does not appear in index 3. Update the image to be public 4. Check that image now appears in index 5. Update the image's Name attribute 6. Verify the updated name is shown """ self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image cmd = minimal_add_command(api_port, 'MyImage', 'location=http://example.com', public=False) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) msg = out.split('\n') self.assertTrue(msg[0].startswith('Added new image with ID:')) image_id = out.strip().split(':')[1].strip() # 2. Verify image does not appear as a public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 3. Update the image to make it public cmd = "bin/glance --port=%d update %s is_public=True" % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('Updated image %s' % image_id, out.strip()) # 4. Verify image 1 in list of public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(len(lines), 1) self.assertTrue('MyImage' in lines[0]) # 5. Update the image's Name attribute updated_image_name = "Updated image name" cmd = ("bin/glance --port=%d update %s is_public=True name=\"%s\"" % (api_port, image_id, updated_image_name)) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('Updated image %s' % image_id, out.strip()) # 6. Verify updated name shown cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(updated_image_name in out, "%s not found in %s" % (updated_image_name, out)) self.stop_servers()
def test_add_list_delete_list(self): """ We test the following: 0. Verify no public images in index 1. Add a public image 2. Check that image exists in index 3. Delete the image 4. Verify no longer in index """ self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port # 0. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 1. Add public image with tempfile.NamedTemporaryFile() as image_file: image_file.write("XXX") image_file.flush() image_file_name = image_file.name suffix = '--silent-upload < %s' % image_file_name cmd = minimal_add_command(api_port, 'MyImage', suffix) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) msg = out.split("\n") self._assertStartsWith(msg[0], 'Added new image with ID:') # 2. Verify image added as public image cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) lines = out.split("\n")[2:-1] self.assertEqual(1, len(lines)) line = lines[0] img_info = [c.strip() for c in line.split()] image_id, name, disk_format, container_format, size = img_info self.assertEqual('MyImage', name) self.assertEqual( '3', size, "Expected image to be 3 bytes in size, but got %s. " "Make sure you're running the correct version " "of webob." % size) # 3. Delete the image cmd = "bin/glance --port=%d --force delete %s" % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('Deleted image %s' % image_id, out.strip()) # 4. Verify no public images cmd = "bin/glance --port=%d index" % api_port exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) self.stop_servers()
def test_add_member(self): self.cleanup() self.start_servers(**self.__dict__.copy()) api_port = self.api_port registry_port = self.registry_port image_id = "11111111-1111-1111-1111-111111111111" member_id = "21111111-2111-2111-2111-211111111111" member2_id = "31111111-3111-3111-3111-311111111111" # 0. Add an image cmd = minimal_add_command(api_port, 'MyImage', 'id=%s' % image_id, 'location=http://example.com') exitcode, out, err = execute(cmd) # 1. Add an image member cmd = "bin/glance --port=%d member-add %s %s" % (api_port, image_id, member_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 2. Verify image-members cmd = "bin/glance --port=%d image-members %s " % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(member_id in out) # 3. Verify member-images cmd = "bin/glance --port=%d member-images %s " % (api_port, member_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(image_id in out) # 4. Replace image members cmd = "bin/glance --port=%d members-replace %s %s" % ( api_port, image_id, member2_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 5. Verify member-images again for member2 cmd = "bin/glance --port=%d member-images %s " % (api_port, member2_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(image_id in out) # 6. Verify member-images again for member1 (should not be present) cmd = "bin/glance --port=%d member-images %s " % (api_port, member_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertTrue(image_id not in out) # 7. Delete the member cmd = "bin/glance --port=%d member-delete %s %s" % (api_port, image_id, member2_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) # 8. Verify image-members is empty cmd = "bin/glance --port=%d image-members %s " % (api_port, image_id) exitcode, out, err = execute(cmd) self.assertEqual(0, exitcode) self.assertEqual('', out.strip()) self.stop_servers()