def test_immediate_delete(self): """ test that images get deleted immediately by default """ self.cleanup() self.start_servers() client = self._get_client() meta = client.add_image(TEST_IMAGE_META, TEST_IMAGE_DATA) id = meta['id'] sql = "SELECT * FROM images WHERE status = 'pending_delete'" recs = list(self.run_sql_cmd(sql)) self.assertFalse(recs) client.delete_image(id) recs = list(self.run_sql_cmd(sql)) self.assertFalse(recs) sql = "SELECT * FROM images WHERE id = '%s'" % id recs = list(self.run_sql_cmd(sql)) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'deleted') self.stop_servers()
def test_immediate_delete(self): """ test that images get deleted immediately by default """ self.cleanup() self.start_servers(**self.__dict__.copy()) client = self._get_client() registry = self._get_registry_client() meta = client.add_image(TEST_IMAGE_META, TEST_IMAGE_DATA) id = meta['id'] filters = {'deleted': True, 'is_public': 'none', 'status': 'pending_delete'} recs = registry.get_images_detailed(filters=filters) self.assertFalse(recs) client.delete_image(id) recs = registry.get_images_detailed(filters=filters) self.assertFalse(recs) filters = {'deleted': True, 'is_public': 'none', 'status': 'deleted'} recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'deleted') self.stop_servers()
def test_immediate_delete(self): """ test that images get deleted immediately by default """ self.cleanup() self.start_servers(**self.__dict__.copy()) client = self._get_client() registry = self._get_registry_client() meta = client.add_image(TEST_IMAGE_META, TEST_IMAGE_DATA) id = meta['id'] filters = { 'deleted': True, 'is_public': 'none', 'status': 'pending_delete' } recs = registry.get_images_detailed(filters=filters) self.assertFalse(recs) client.delete_image(id) recs = registry.get_images_detailed(filters=filters) self.assertFalse(recs) filters = {'deleted': True, 'is_public': 'none', 'status': 'deleted'} recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'deleted') self.stop_servers()
def test_delayed_delete(self): """ test that images don't get deleted immediatly and that the scrubber scrubs them """ self.cleanup() self.start_servers(delayed_delete=True, daemon=True) client = self._get_client() registry = self._get_registry_client() meta = client.add_image(TEST_IMAGE_META, TEST_IMAGE_DATA) id = meta['id'] filters = { 'deleted': True, 'is_public': 'none', 'status': 'pending_delete' } recs = registry.get_images_detailed(filters=filters) self.assertFalse(recs) client.delete_image(id) recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) filters = {'deleted': True, 'is_public': 'none'} recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'pending_delete') # NOTE(jkoelker) The build servers sometimes take longer than # 15 seconds to scrub. Give it up to 5 min, checking # checking every 15 seconds. When/if it flips to # deleted, bail immediatly. deleted = set() recs = [] for _ in xrange(3): time.sleep(5) recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) # NOTE(jkoelker) Reset the deleted set for this loop deleted = set() for rec in recs: deleted.add(rec['status'] == 'deleted') if False not in deleted: break self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'deleted') self.stop_servers()
def test_delayed_delete(self): """ test that images don't get deleted immediatly and that the scrubber scrubs them """ self.cleanup() registry_db = self.registry_server.sql_connection self.start_servers(delayed_delete=True, sql_connection=registry_db, daemon=True) client = self._get_client() meta = client.add_image(TEST_IMAGE_META, TEST_IMAGE_DATA) id = meta['id'] sql = "SELECT * FROM images WHERE status = 'pending_delete'" recs = list(self.run_sql_cmd(sql)) self.assertFalse(recs) client.delete_image(id) recs = self.run_sql_cmd(sql) self.assertTrue(recs) sql = "SELECT * FROM images WHERE id = '%s'" % id recs = list(self.run_sql_cmd(sql)) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'pending_delete') # NOTE(jkoelker) The build servers sometimes take longer than # 15 seconds to scrub. Give it up to 5 min, checking # checking every 15 seconds. When/if it flips to # deleted, bail immediatly. deleted = set() recs = [] for _ in xrange(3): time.sleep(5) recs = list(self.run_sql_cmd(sql)) self.assertTrue(recs) # NOTE(jkoelker) Reset the deleted set for this loop deleted = set() for rec in recs: deleted.add(rec['status'] == 'deleted') if False not in deleted: break self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'deleted') self.stop_servers()
def test_delayed_delete(self): """ test that images don't get deleted immediatly and that the scrubber scrubs them """ self.cleanup() self.start_servers(delayed_delete=True, daemon=True) client = self._get_client() registry = self._get_registry_client() meta = client.add_image(TEST_IMAGE_META, TEST_IMAGE_DATA) id = meta['id'] filters = {'deleted': True, 'is_public': 'none', 'status': 'pending_delete'} recs = registry.get_images_detailed(filters=filters) self.assertFalse(recs) client.delete_image(id) recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) filters = {'deleted': True, 'is_public': 'none'} recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'pending_delete') # NOTE(jkoelker) The build servers sometimes take longer than # 15 seconds to scrub. Give it up to 5 min, checking # checking every 15 seconds. When/if it flips to # deleted, bail immediatly. deleted = set() recs = [] for _ in xrange(3): time.sleep(5) recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) # NOTE(jkoelker) Reset the deleted set for this loop deleted = set() for rec in recs: deleted.add(rec['status'] == 'deleted') if False not in deleted: break self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'deleted') self.stop_servers()
def test_scrubber_app(self): """ test that the glance-scrubber script runs successfully when not in daemon mode """ self.cleanup() self.start_servers(delayed_delete=True, daemon=False) client = self._get_client() registry = self._get_registry_client() # add some images and ensure it was successful img_ids = [] for i in range(0, 3): meta = client.add_image(TEST_IMAGE_META, TEST_IMAGE_DATA) id = meta['id'] img_ids.append(id) filters = { 'deleted': True, 'is_public': 'none', 'status': 'pending_delete' } recs = registry.get_images_detailed(filters=filters) self.assertFalse(recs) # delete those images for img_id in img_ids: client.delete_image(img_id) recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) filters = {'deleted': True, 'is_public': 'none'} recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'pending_delete') # wait for the scrub time on the image to pass time.sleep(self.api_server.scrub_time) # scrub images and make sure they get deleted cmd = ("bin/glance-scrubber --config-file %s" % self.scrubber_daemon.conf_file_name) exitcode, out, err = execute(cmd, raise_error=False) self.assertEqual(0, exitcode) filters = {'deleted': True, 'is_public': 'none'} recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'deleted') self.stop_servers()
def test_scrubber_app(self): """ test that the glance-scrubber script runs successfully when not in daemon mode """ self.cleanup() self.start_servers(delayed_delete=True, daemon=False) client = self._get_client() registry = self._get_registry_client() # add some images and ensure it was successful img_ids = [] for i in range(0, 3): meta = client.add_image(TEST_IMAGE_META, TEST_IMAGE_DATA) id = meta['id'] img_ids.append(id) filters = {'deleted': True, 'is_public': 'none', 'status': 'pending_delete'} recs = registry.get_images_detailed(filters=filters) self.assertFalse(recs) # delete those images for img_id in img_ids: client.delete_image(img_id) recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) filters = {'deleted': True, 'is_public': 'none'} recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'pending_delete') # wait for the scrub time on the image to pass time.sleep(self.api_server.scrub_time) # scrub images and make sure they get deleted cmd = ("bin/glance-scrubber --config-file %s" % self.scrubber_daemon.conf_file_name) exitcode, out, err = execute(cmd, raise_error=False) self.assertEqual(0, exitcode) filters = {'deleted': True, 'is_public': 'none'} recs = registry.get_images_detailed(filters=filters) self.assertTrue(recs) for rec in recs: self.assertEqual(rec['status'], 'deleted') self.stop_servers()