def setUpClass(cls): """Run class setup for running tests.""" cls.region1_model_alias = 'swift_gr_region1' cls.region1_proxy_app = 'swift-proxy-region1' cls.region2_model_alias = 'swift_gr_region2' cls.region2_proxy_app = 'swift-proxy-region2' super(SwiftGlobalReplicationTests, cls).setUpClass( application_name=cls.region1_proxy_app, model_alias=cls.region1_model_alias) cls.region1_model_name = cls.model_aliases[cls.region1_model_alias] cls.region2_model_name = cls.model_aliases[cls.region2_model_alias] cls.storage_topology = swift_utils.get_swift_storage_topology( model_name=cls.region1_model_name) cls.storage_topology.update( swift_utils.get_swift_storage_topology( model_name=cls.region2_model_name)) cls.swift_session = openstack_utils.get_keystone_session_from_relation( cls.region1_proxy_app, model_name=cls.region1_model_name) cls.swift_region1 = openstack_utils.get_swift_session_client( cls.swift_session, region_name='RegionOne') cls.swift_region2 = openstack_utils.get_swift_session_client( cls.swift_session, region_name='RegionTwo')
def test_multisite_failover(self): """Verify object storage failover/failback. Verify that the slave radosgw can be promoted to master status """ if not self.multisite: raise unittest.SkipTest('Skipping multisite failover test') logging.info('Checking multisite failover/failback') keystone_session = zaza_openstack.get_overcloud_keystone_session() source_client = zaza_openstack.get_swift_session_client( keystone_session, region_name='east-1', cacert=self.cacert, ) target_client = zaza_openstack.get_swift_session_client( keystone_session, region_name='west-1', cacert=self.cacert, ) zaza_model.run_action_on_leader( 'slave-ceph-radosgw', 'promote', action_params={}, ) self.wait_for_sync('ceph-radosgw') _container = 'demo-container-for-failover' _test_data = 'Test data from Zaza on Slave' target_client.put_container(_container) target_client.put_object(_container, 'testfile', contents=_test_data, content_type='text/plain') _, target_content = target_client.get_object(_container, 'testfile') zaza_model.run_action_on_leader( 'ceph-radosgw', 'promote', action_params={}, ) self.wait_for_sync('slave-ceph-radosgw') @tenacity.retry(wait=tenacity.wait_exponential(multiplier=1, max=60), reraise=True, stop=tenacity.stop_after_attempt(12)) def _source_get_object(): return source_client.get_object(_container, 'testfile') _, source_content = _source_get_object() self.assertEqual(target_content.decode('UTF-8'), source_content.decode('UTF-8'))
def test_object_storage_multisite(self): """Verify object storage replication. Verify that the object storage replication works as expected. """ if not self.multisite: raise unittest.SkipTest('Skipping multisite replication test') logging.info('Checking multisite replication') keystone_session = zaza_openstack.get_overcloud_keystone_session() source_client = zaza_openstack.get_swift_session_client( keystone_session, region_name='east-1', cacert=self.cacert, ) _container = 'demo-container' _test_data = 'Test data from Zaza' source_client.put_container(_container) source_client.put_object(_container, 'testfile', contents=_test_data, content_type='text/plain') _, source_content = source_client.get_object(_container, 'testfile') self.assertEqual(source_content.decode('UTF-8'), _test_data) target_client = zaza_openstack.get_swift_session_client( keystone_session, region_name='east-1', cacert=self.cacert, ) @tenacity.retry(wait=tenacity.wait_exponential(multiplier=1, max=60), reraise=True, stop=tenacity.stop_after_attempt(12)) def _target_get_object(): return target_client.get_object(_container, 'testfile') _, target_content = _target_get_object() self.assertEqual(target_content.decode('UTF-8'), source_content.decode('UTF-8')) target_client.delete_object(_container, 'testfile') try: source_client.head_object(_container, 'testfile') except ClientException as e: self.assertEqual(e.http_status, 404) else: self.fail('object not deleted on source radosgw')
def test_object_storage(self): """Verify object storage API. Verify that the object storage API works as expected. """ if self.multisite: raise unittest.SkipTest('Skipping REST API test, ' 'multisite configuration') logging.info('Checking Swift REST API') keystone_session = zaza_openstack.get_overcloud_keystone_session() region_name = 'RegionOne' swift_client = zaza_openstack.get_swift_session_client( keystone_session, region_name, cacert=self.cacert, ) _container = 'demo-container' _test_data = 'Test data from Zaza' swift_client.put_container(_container) swift_client.put_object(_container, 'testfile', contents=_test_data, content_type='text/plain') _, content = swift_client.get_object(_container, 'testfile') self.assertEqual(content.decode('UTF-8'), _test_data)
def setUpClass(cls): """Run class setup for running glance tests.""" super(GlanceCephRGWBackendTest, cls).setUpClass() swift_session = openstack_utils.get_keystone_session_from_relation( 'ceph-radosgw') cls.swift = openstack_utils.get_swift_session_client(swift_session) cls.glance_client = openstack_utils.get_glance_session_client( cls.keystone_session)
def setUpClass(cls): """Run class setup for running tests.""" super(SwiftImageCreateTest, cls).setUpClass() cls.image_name = 'zaza-swift-lts' swift_session = openstack_utils.get_keystone_session_from_relation( 'swift-proxy') cls.swift = openstack_utils.get_swift_session_client(swift_session) cls.glance_client = openstack_utils.get_glance_session_client( cls.keystone_session)