From e8a7729a0d3a790e180653353d435103161c2c40 Mon Sep 17 00:00:00 2001 From: Gerard Gine Date: Tue, 20 Feb 2018 14:15:31 -0800 Subject: [PATCH] Fix usage of multiple accounts in functional tests Some tests make use of multiple accounts without checking of they have been set up. This commit tries to fix some of these situations. Change-Id: I461679e78e19ce0866c7618c581a8cb573cca7f5 --- test/functional/test_slo.py | 55 +++++++----- test/functional/test_symlink.py | 4 + test/functional/test_tempurl.py | 41 +++++---- test/functional/test_versioned_writes.py | 108 +++++++++++++---------- test/functional/tests.py | 67 ++++++++------ 5 files changed, 159 insertions(+), 116 deletions(-) diff --git a/test/functional/test_slo.py b/test/functional/test_slo.py index 3dd5983dd4..6c63db47c1 100644 --- a/test/functional/test_slo.py +++ b/test/functional/test_slo.py @@ -64,19 +64,21 @@ class TestSloEnv(BaseEnv): super(TestSloEnv, cls).setUp() - config2 = deepcopy(tf.config) - config2['account'] = tf.config['account2'] - config2['username'] = tf.config['username2'] - config2['password'] = tf.config['password2'] - cls.conn2 = Connection(config2) - cls.conn2.authenticate() - cls.account2 = cls.conn2.get_account() - cls.account2.delete_containers() - config3 = tf.config.copy() - config3['username'] = tf.config['username3'] - config3['password'] = tf.config['password3'] - cls.conn3 = Connection(config3) - cls.conn3.authenticate() + if not tf.skip2: + config2 = deepcopy(tf.config) + config2['account'] = tf.config['account2'] + config2['username'] = tf.config['username2'] + config2['password'] = tf.config['password2'] + cls.conn2 = Connection(config2) + cls.conn2.authenticate() + cls.account2 = cls.conn2.get_account() + cls.account2.delete_containers() + if not tf.skip3: + config3 = tf.config.copy() + config3['username'] = tf.config['username3'] + config3['password'] = tf.config['password3'] + cls.conn3 = Connection(config3) + cls.conn3.authenticate() cls.container = cls.account.container(Utils.create_name()) cls.container2 = cls.account.container(Utils.create_name()) @@ -651,18 +653,19 @@ class TestSlo(Base): copied_contents = copied.read(parms={'multipart-manifest': 'get'}) self.assertEqual(4 * 1024 * 1024 + 1, len(copied_contents)) - # copy to different account - acct = self.env.conn2.account_name - dest_cont = self.env.account2.container(Utils.create_name()) - self.assertTrue(dest_cont.create(hdrs={ - 'X-Container-Write': self.env.conn.user_acl - })) - file_item = self.env.container.file("manifest-abcde") - file_item.copy_account(acct, dest_cont, "copied-abcde") + if not tf.skip2: + # copy to different account + acct = self.env.conn2.account_name + dest_cont = self.env.account2.container(Utils.create_name()) + self.assertTrue(dest_cont.create(hdrs={ + 'X-Container-Write': self.env.conn.user_acl + })) + file_item = self.env.container.file("manifest-abcde") + file_item.copy_account(acct, dest_cont, "copied-abcde") - copied = dest_cont.file("copied-abcde") - copied_contents = copied.read(parms={'multipart-manifest': 'get'}) - self.assertEqual(4 * 1024 * 1024 + 1, len(copied_contents)) + copied = dest_cont.file("copied-abcde") + copied_contents = copied.read(parms={'multipart-manifest': 'get'}) + self.assertEqual(4 * 1024 * 1024 + 1, len(copied_contents)) def test_slo_copy_the_manifest(self): source = self.env.container.file("manifest-abcde") @@ -797,6 +800,8 @@ class TestSlo(Base): self.assertEqual(slo_etag, actual['slo_etag']) def test_slo_copy_the_manifest_account(self): + if tf.skip2: + raise SkipTest('Account2 not set') acct = self.env.conn.account_name # same account file_item = self.env.container.file("manifest-abcde") @@ -1148,6 +1153,8 @@ class TestSlo(Base): self.assert_status(200) def test_slo_referer_on_segment_container(self): + if tf.skip3: + raise SkipTest('Username3 not set') # First the account2 (test3) should fail headers = {'X-Auth-Token': self.env.conn3.storage_token, 'Referer': 'http://blah.example.com'} diff --git a/test/functional/test_symlink.py b/test/functional/test_symlink.py index 8f82486a75..d21ab132b1 100755 --- a/test/functional/test_symlink.py +++ b/test/functional/test_symlink.py @@ -122,6 +122,8 @@ class TestSymlinkEnv(BaseEnv): enumerate([cls.containers(), [cls.link_cont]], 1)] # delete objects inside container for use_account, containers in delete_containers: + if use_account == 2 and tf.skip2: + continue for container in containers: while True: cont = container @@ -144,6 +146,8 @@ class TestSymlinkEnv(BaseEnv): # delete the containers for use_account, containers in delete_containers: + if use_account == 2 and tf.skip2: + continue for container in containers: resp = retry(cls._make_request, method='DELETE', container=container, diff --git a/test/functional/test_tempurl.py b/test/functional/test_tempurl.py index def4e0db63..5f490a3bea 100644 --- a/test/functional/test_tempurl.py +++ b/test/functional/test_tempurl.py @@ -410,24 +410,31 @@ class TestContainerTempurlEnv(BaseEnv): cls.tempurl_key = Utils.create_name() cls.tempurl_key2 = Utils.create_name() - # creating another account and connection - # for ACL tests - config2 = deepcopy(tf.config) - config2['account'] = tf.config['account2'] - config2['username'] = tf.config['username2'] - config2['password'] = tf.config['password2'] - cls.conn2 = Connection(config2) - cls.conn2.authenticate() - cls.account2 = Account( - cls.conn2, config2.get('account', config2['username'])) - cls.account2 = cls.conn2.get_account() + if not tf.skip2: + # creating another account and connection + # for ACL tests + config2 = deepcopy(tf.config) + config2['account'] = tf.config['account2'] + config2['username'] = tf.config['username2'] + config2['password'] = tf.config['password2'] + cls.conn2 = Connection(config2) + cls.conn2.authenticate() + cls.account2 = Account( + cls.conn2, config2.get('account', config2['username'])) + cls.account2 = cls.conn2.get_account() cls.container = cls.account.container(Utils.create_name()) - if not cls.container.create({ - 'x-container-meta-temp-url-key': cls.tempurl_key, - 'x-container-meta-temp-url-key-2': cls.tempurl_key2, - 'x-container-read': cls.account2.name}): - raise ResponseError(cls.conn.response) + if not tf.skip2: + if not cls.container.create({ + 'x-container-meta-temp-url-key': cls.tempurl_key, + 'x-container-meta-temp-url-key-2': cls.tempurl_key2, + 'x-container-read': cls.account2.name}): + raise ResponseError(cls.conn.response) + else: + if not cls.container.create({ + 'x-container-meta-temp-url-key': cls.tempurl_key, + 'x-container-meta-temp-url-key-2': cls.tempurl_key2}): + raise ResponseError(cls.conn.response) cls.obj = cls.container.file(Utils.create_name()) cls.obj.write("obj contents") @@ -583,6 +590,8 @@ class TestContainerTempurl(Base): @requires_acls def test_tempurl_keys_hidden_from_acl_readonly(self): + if tf.skip2: + raise SkipTest('Account2 not set') metadata = self.env.container.info(cfg={ 'use_token': self.env.conn2.storage_token}) diff --git a/test/functional/test_versioned_writes.py b/test/functional/test_versioned_writes.py index 5de994e558..205ba06633 100644 --- a/test/functional/test_versioned_writes.py +++ b/test/functional/test_versioned_writes.py @@ -45,13 +45,14 @@ class TestObjectVersioningEnv(BaseEnv): @classmethod def setUp(cls): super(TestObjectVersioningEnv, cls).setUp() - # Second connection for ACL tests - config2 = deepcopy(tf.config) - config2['account'] = tf.config['account2'] - config2['username'] = tf.config['username2'] - config2['password'] = tf.config['password2'] - cls.conn2 = Connection(config2) - cls.conn2.authenticate() + if not tf.skip2: + # Second connection for ACL tests + config2 = deepcopy(tf.config) + config2['account'] = tf.config['account2'] + config2['username'] = tf.config['username2'] + config2['password'] = tf.config['password2'] + cls.conn2 = Connection(config2) + cls.conn2.authenticate() # avoid getting a prefix that stops halfway through an encoded # character @@ -74,24 +75,26 @@ class TestObjectVersioningEnv(BaseEnv): # if versioning is off, then cls.location_header_key won't persist cls.versioning_enabled = 'versions' in container_info - # setup another account to test ACLs - config2 = deepcopy(tf.config) - config2['account'] = tf.config['account2'] - config2['username'] = tf.config['username2'] - config2['password'] = tf.config['password2'] - cls.conn2 = Connection(config2) - cls.storage_url2, cls.storage_token2 = cls.conn2.authenticate() - cls.account2 = cls.conn2.get_account() - cls.account2.delete_containers() + if not tf.skip2: + # setup another account to test ACLs + config2 = deepcopy(tf.config) + config2['account'] = tf.config['account2'] + config2['username'] = tf.config['username2'] + config2['password'] = tf.config['password2'] + cls.conn2 = Connection(config2) + cls.storage_url2, cls.storage_token2 = cls.conn2.authenticate() + cls.account2 = cls.conn2.get_account() + cls.account2.delete_containers() - # setup another account with no access to anything to test ACLs - config3 = deepcopy(tf.config) - config3['account'] = tf.config['account'] - config3['username'] = tf.config['username3'] - config3['password'] = tf.config['password3'] - cls.conn3 = Connection(config3) - cls.storage_url3, cls.storage_token3 = cls.conn3.authenticate() - cls.account3 = cls.conn3.get_account() + if not tf.skip3: + # setup another account with no access to anything to test ACLs + config3 = deepcopy(tf.config) + config3['account'] = tf.config['account'] + config3['username'] = tf.config['username3'] + config3['password'] = tf.config['password3'] + cls.conn3 = Connection(config3) + cls.storage_url3, cls.storage_token3 = cls.conn3.authenticate() + cls.account3 = cls.conn3.get_account() @classmethod def tearDown(cls): @@ -131,13 +134,14 @@ class TestCrossPolicyObjectVersioningEnv(BaseEnv): policy = cls.policies.select() version_policy = cls.policies.exclude(name=policy['name']).select() - # Second connection for ACL tests - config2 = deepcopy(tf.config) - config2['account'] = tf.config['account2'] - config2['username'] = tf.config['username2'] - config2['password'] = tf.config['password2'] - cls.conn2 = Connection(config2) - cls.conn2.authenticate() + if not tf.skip2: + # Second connection for ACL tests + config2 = deepcopy(tf.config) + config2['account'] = tf.config['account2'] + config2['username'] = tf.config['username2'] + config2['password'] = tf.config['password2'] + cls.conn2 = Connection(config2) + cls.conn2.authenticate() # avoid getting a prefix that stops halfway through an encoded # character @@ -161,24 +165,26 @@ class TestCrossPolicyObjectVersioningEnv(BaseEnv): # if versioning is off, then X-Versions-Location won't persist cls.versioning_enabled = 'versions' in container_info - # setup another account to test ACLs - config2 = deepcopy(tf.config) - config2['account'] = tf.config['account2'] - config2['username'] = tf.config['username2'] - config2['password'] = tf.config['password2'] - cls.conn2 = Connection(config2) - cls.storage_url2, cls.storage_token2 = cls.conn2.authenticate() - cls.account2 = cls.conn2.get_account() - cls.account2.delete_containers() + if not tf.skip2: + # setup another account to test ACLs + config2 = deepcopy(tf.config) + config2['account'] = tf.config['account2'] + config2['username'] = tf.config['username2'] + config2['password'] = tf.config['password2'] + cls.conn2 = Connection(config2) + cls.storage_url2, cls.storage_token2 = cls.conn2.authenticate() + cls.account2 = cls.conn2.get_account() + cls.account2.delete_containers() - # setup another account with no access to anything to test ACLs - config3 = deepcopy(tf.config) - config3['account'] = tf.config['account'] - config3['username'] = tf.config['username3'] - config3['password'] = tf.config['password3'] - cls.conn3 = Connection(config3) - cls.storage_url3, cls.storage_token3 = cls.conn3.authenticate() - cls.account3 = cls.conn3.get_account() + if not tf.skip3: + # setup another account with no access to anything to test ACLs + config3 = deepcopy(tf.config) + config3['account'] = tf.config['account'] + config3['username'] = tf.config['username3'] + config3['password'] = tf.config['password3'] + cls.conn3 = Connection(config3) + cls.storage_url3, cls.storage_token3 = cls.conn3.authenticate() + cls.account3 = cls.conn3.get_account() @classmethod def tearDown(cls): @@ -485,6 +491,8 @@ class TestObjectVersioning(Base): self.assertEqual("old content", man_file.read()) def test_versioning_container_acl(self): + if tf.skip2: + raise SkipTest('Account2 not set') # create versions container and DO NOT give write access to account2 versions_container = self.env.account.container(Utils.create_name()) location_header_val = quote(str(versions_container)) @@ -623,6 +631,8 @@ class TestObjectVersioning(Base): return versioned_obj def test_versioning_check_acl(self): + if tf.skip2: + raise SkipTest('Account2 not set') versioned_obj = self._test_versioning_check_acl_setup() versioned_obj.delete() self.assertEqual("aaaaa", versioned_obj.read()) @@ -896,6 +906,8 @@ class TestObjectVersioningHistoryMode(TestObjectVersioning): self.assertEqual(expected, bodies) def test_versioning_check_acl(self): + if tf.skip2: + raise SkipTest('Account2 not set') versioned_obj = self._test_versioning_check_acl_setup() versioned_obj.delete() with self.assertRaises(ResponseError) as cm: diff --git a/test/functional/tests.py b/test/functional/tests.py index 4779a7adb4..29fea5afb1 100644 --- a/test/functional/tests.py +++ b/test/functional/tests.py @@ -1189,17 +1189,18 @@ class TestFileEnv(BaseEnv): @classmethod def setUp(cls): super(TestFileEnv, cls).setUp() - # creating another account and connection - # for account to account copy tests - config2 = deepcopy(tf.config) - config2['account'] = tf.config['account2'] - config2['username'] = tf.config['username2'] - config2['password'] = tf.config['password2'] - cls.conn2 = Connection(config2) - cls.conn2.authenticate() + if not tf.skip2: + # creating another account and connection + # for account to account copy tests + config2 = deepcopy(tf.config) + config2['account'] = tf.config['account2'] + config2['username'] = tf.config['username2'] + config2['password'] = tf.config['password2'] + cls.conn2 = Connection(config2) + cls.conn2.authenticate() - cls.account2 = cls.conn2.get_account() - cls.account2.delete_containers() + cls.account2 = cls.conn2.get_account() + cls.account2.delete_containers() cls.container = cls.account.container(Utils.create_name()) if not cls.container.create(): @@ -1214,7 +1215,8 @@ class TestFileEnv(BaseEnv): # not have been known. So we ensure that the project domain id is # in sysmeta by making a POST to the accounts using an admin role. cls.account.update_metadata() - cls.account2.update_metadata() + if not tf.skip2: + cls.account2.update_metadata() class TestFileDev(Base): @@ -1495,28 +1497,29 @@ class TestFile(Base): self.assertTrue(file_item.initialize()) self.assertEqual(metadata, file_item.metadata) - dest_cont = self.env.account2.container(Utils.create_name()) - self.assertTrue(dest_cont.create(hdrs={ - 'X-Container-Write': self.env.conn.user_acl - })) + if not tf.skip2: + dest_cont = self.env.account2.container(Utils.create_name()) + self.assertTrue(dest_cont.create(hdrs={ + 'X-Container-Write': self.env.conn.user_acl + })) - acct = self.env.conn2.account_name - # copy both with and without initial slash - for prefix in ('', '/'): - dest_filename = Utils.create_name() + acct = self.env.conn2.account_name + # copy both with and without initial slash + for prefix in ('', '/'): + dest_filename = Utils.create_name() - file_item = self.env.container.file(source_filename) - file_item.copy_account(acct, - '%s%s' % (prefix, dest_cont), - dest_filename) + file_item = self.env.container.file(source_filename) + file_item.copy_account(acct, + '%s%s' % (prefix, dest_cont), + dest_filename) - self.assertIn(dest_filename, dest_cont.files()) + self.assertIn(dest_filename, dest_cont.files()) - file_item = dest_cont.file(dest_filename) + file_item = dest_cont.file(dest_filename) - self.assertEqual(data, file_item.read()) - self.assertTrue(file_item.initialize()) - self.assertEqual(metadata, file_item.metadata) + self.assertEqual(data, file_item.read()) + self.assertTrue(file_item.initialize()) + self.assertEqual(metadata, file_item.metadata) def testCopy404s(self): source_filename = Utils.create_name() @@ -1559,6 +1562,8 @@ class TestFile(Base): Utils.create_name()) def testCopyAccount404s(self): + if tf.skip2: + raise SkipTest('Account2 not set') acct = self.env.conn.account_name acct2 = self.env.conn2.account_name source_filename = Utils.create_name() @@ -1686,6 +1691,8 @@ class TestFile(Base): self.assertEqual(metadata, file_item.metadata) def testCopyFromAccountHeader(self): + if tf.skip2: + raise SkipTest('Account2 not set') acct = self.env.conn.account_name src_cont = self.env.account.container(Utils.create_name()) self.assertTrue(src_cont.create(hdrs={ @@ -1761,6 +1768,8 @@ class TestFile(Base): self.assert_status(404) def testCopyFromAccountHeader404s(self): + if tf.skip2: + raise SkipTest('Account2 not set') acct = self.env.conn2.account_name src_cont = self.env.account2.container(Utils.create_name()) self.assertTrue(src_cont.create(hdrs={ @@ -1805,6 +1814,8 @@ class TestFile(Base): self.assert_status(404) def testCopyFromAccountHeader403s(self): + if tf.skip2: + raise SkipTest('Account2 not set') acct = self.env.conn2.account_name src_cont = self.env.account2.container(Utils.create_name()) self.assertTrue(src_cont.create()) # Primary user has no access