From 40d92dda0dd3e31cbfd5b887ea8465f9940b7540 Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Wed, 20 Aug 2014 09:24:22 -0400 Subject: [PATCH] 2800: Use local KeepClients in Python SDK tests. This improves test isolation, and demonstrates the preferred way to use the API. --- sdk/python/tests/test_collections.py | 84 +++++++------- sdk/python/tests/test_keep_client.py | 165 ++++++++++++--------------- 2 files changed, 119 insertions(+), 130 deletions(-) diff --git a/sdk/python/tests/test_collections.py b/sdk/python/tests/test_collections.py index 68c9698c32..1300c6c7dc 100644 --- a/sdk/python/tests/test_collections.py +++ b/sdk/python/tests/test_collections.py @@ -29,9 +29,12 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, def setUpClass(cls): super(ArvadosCollectionsTest, cls).setUpClass() run_test_server.authorize_with('active') + cls.api_client = arvados.api('v1') + cls.keep_client = arvados.KeepClient(api_client=cls.api_client, + local_store=cls.local_store) def write_foo_bar_baz(self): - cw = arvados.CollectionWriter() + cw = arvados.CollectionWriter(self.api_client) self.assertEqual(cw.current_stream_name(), '.', 'current_stream_name() should be "." now') cw.set_current_file_name('foo.txt') @@ -46,8 +49,8 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, return cw.finish() def test_keep_local_store(self): - self.assertEqual(arvados.Keep.put('foo'), 'acbd18db4cc2f85cedef654fccc4a4d8+3', 'wrong md5 hash from Keep.put') - self.assertEqual(arvados.Keep.get('acbd18db4cc2f85cedef654fccc4a4d8+3'), 'foo', 'wrong data from Keep.get') + self.assertEqual(self.keep_client.put('foo'), 'acbd18db4cc2f85cedef654fccc4a4d8+3', 'wrong md5 hash from Keep.put') + self.assertEqual(self.keep_client.get('acbd18db4cc2f85cedef654fccc4a4d8+3'), 'foo', 'wrong data from Keep.get') def test_local_collection_writer(self): self.assertEqual(self.write_foo_bar_baz(), @@ -56,7 +59,8 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, def test_local_collection_reader(self): self.write_foo_bar_baz() - cr = arvados.CollectionReader('d6c3b8e571f1b81ebb150a45ed06c884+114+Xzizzle') + cr = arvados.CollectionReader( + 'd6c3b8e571f1b81ebb150a45ed06c884+114+Xzizzle', self.api_client) got = [] for s in cr.all_streams(): for f in s.all_files(): @@ -78,7 +82,7 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, 'reading zero bytes should have returned empty string') def _test_subset(self, collection, expected): - cr = arvados.CollectionReader(collection) + cr = arvados.CollectionReader(collection, self.api_client) for s in cr.all_streams(): for ex in expected: if ex[0] == s: @@ -95,29 +99,29 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, [3, '.', 'foo.txt', 'foo'], [3, './baz', 'baz.txt', 'baz']]) self._test_subset((". %s %s 0:3:foo.txt 3:3:bar.txt\n" % - (arvados.Keep.put("foo"), - arvados.Keep.put("bar"))), + (self.keep_client.put("foo"), + self.keep_client.put("bar"))), [[3, '.', 'bar.txt', 'bar'], [3, '.', 'foo.txt', 'foo']]) self._test_subset((". %s %s 0:2:fo.txt 2:4:obar.txt\n" % - (arvados.Keep.put("foo"), - arvados.Keep.put("bar"))), + (self.keep_client.put("foo"), + self.keep_client.put("bar"))), [[2, '.', 'fo.txt', 'fo'], [4, '.', 'obar.txt', 'obar']]) self._test_subset((". %s %s 0:2:fo.txt 2:0:zero.txt 2:2:ob.txt 4:2:ar.txt\n" % - (arvados.Keep.put("foo"), - arvados.Keep.put("bar"))), + (self.keep_client.put("foo"), + self.keep_client.put("bar"))), [[2, '.', 'ar.txt', 'ar'], [2, '.', 'fo.txt', 'fo'], [2, '.', 'ob.txt', 'ob'], [0, '.', 'zero.txt', '']]) def _test_readline(self, what_in, what_out): - cw = arvados.CollectionWriter() + cw = arvados.CollectionWriter(self.api_client) cw.start_new_file('test.txt') cw.write(what_in) test1 = cw.finish() - cr = arvados.CollectionReader(test1) + cr = arvados.CollectionReader(test1, self.api_client) got = [] for x in list(cr.all_files())[0].readlines(): got += [x] @@ -132,13 +136,13 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, ["ab\n", "cd\n"]) def test_collection_empty_file(self): - cw = arvados.CollectionWriter() + cw = arvados.CollectionWriter(self.api_client) cw.start_new_file('zero.txt') cw.write('') self.assertEqual(cw.manifest_text(), ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:zero.txt\n") self.check_manifest_file_sizes(cw.manifest_text(), [0]) - cw = arvados.CollectionWriter() + cw = arvados.CollectionWriter(self.api_client) cw.start_new_file('zero.txt') cw.write('') cw.start_new_file('one.txt') @@ -149,7 +153,7 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, self.check_manifest_file_sizes(cw.manifest_text(), [1,0,0]) def check_manifest_file_sizes(self, manifest_text, expect_sizes): - cr = arvados.CollectionReader(manifest_text) + cr = arvados.CollectionReader(manifest_text, self.api_client) got_sizes = [] for f in cr.all_files(): got_sizes += [f.size()] @@ -161,12 +165,12 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, for x in xrange(0, 18): data_in += data_in compressed_data_in = bz2.compress(data_in) - cw = arvados.CollectionWriter() + cw = arvados.CollectionWriter(self.api_client) cw.start_new_file('test.bz2') cw.write(compressed_data_in) bz2_manifest = cw.manifest_text() - cr = arvados.CollectionReader(bz2_manifest) + cr = arvados.CollectionReader(bz2_manifest, self.api_client) got = 0 for x in list(cr.all_files())[0].readlines(): @@ -188,12 +192,12 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, shell=False, close_fds=True) compressed_data_in, stderrdata = p.communicate(data_in) - cw = arvados.CollectionWriter() + cw = arvados.CollectionWriter(self.api_client) cw.start_new_file('test.gz') cw.write(compressed_data_in) gzip_manifest = cw.manifest_text() - cr = arvados.CollectionReader(gzip_manifest) + cr = arvados.CollectionReader(gzip_manifest, self.api_client) got = 0 for x in list(cr.all_files())[0].readlines(): self.assertEqual(x, "abc\n", "decompression returned wrong data: %s" % x) @@ -206,25 +210,25 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, m1 = """. 5348b82a029fd9e971a811ce1f71360b+43 0:43:md5sum.txt . 085c37f02916da1cad16f93c54d899b7+41 0:41:md5sum.txt . 8b22da26f9f433dea0a10e5ec66d73ba+43 0:43:md5sum.txt""" - self.assertEqual(arvados.CollectionReader(m1).manifest_text(), + self.assertEqual(arvados.CollectionReader(m1, self.api_client).manifest_text(), """. 5348b82a029fd9e971a811ce1f71360b+43 085c37f02916da1cad16f93c54d899b7+41 8b22da26f9f433dea0a10e5ec66d73ba+43 0:127:md5sum.txt """) m2 = """. 204e43b8a1185621ca55a94839582e6f+67108864 b9677abbac956bd3e86b1deb28dfac03+67108864 fc15aff2a762b13f521baf042140acec+67108864 323d2a3ce20370c4ca1d3462a344f8fd+25885655 0:227212247:var-GS000016015-ASM.tsv.bz2 """ - self.assertEqual(arvados.CollectionReader(m2).manifest_text(), m2) + self.assertEqual(arvados.CollectionReader(m2, self.api_client).manifest_text(), m2) m3 = """. 5348b82a029fd9e971a811ce1f71360b+43 3:40:md5sum.txt . 085c37f02916da1cad16f93c54d899b7+41 0:41:md5sum.txt . 8b22da26f9f433dea0a10e5ec66d73ba+43 0:43:md5sum.txt""" - self.assertEqual(arvados.CollectionReader(m3).manifest_text(), + self.assertEqual(arvados.CollectionReader(m3, self.api_client).manifest_text(), """. 5348b82a029fd9e971a811ce1f71360b+43 085c37f02916da1cad16f93c54d899b7+41 8b22da26f9f433dea0a10e5ec66d73ba+43 3:124:md5sum.txt """) m4 = """. 204e43b8a1185621ca55a94839582e6f+67108864 0:3:foo/bar ./zzz 204e43b8a1185621ca55a94839582e6f+67108864 0:999:zzz ./foo 323d2a3ce20370c4ca1d3462a344f8fd+25885655 0:3:bar""" - self.assertEqual(arvados.CollectionReader(m4).manifest_text(), + self.assertEqual(arvados.CollectionReader(m4, self.api_client).manifest_text(), """./foo 204e43b8a1185621ca55a94839582e6f+67108864 323d2a3ce20370c4ca1d3462a344f8fd+25885655 0:3:bar 67108864:3:bar ./zzz 204e43b8a1185621ca55a94839582e6f+67108864 0:999:zzz """) @@ -232,22 +236,22 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, m5 = """. 204e43b8a1185621ca55a94839582e6f+67108864 0:3:foo/bar ./zzz 204e43b8a1185621ca55a94839582e6f+67108864 0:999:zzz ./foo 204e43b8a1185621ca55a94839582e6f+67108864 3:3:bar""" - self.assertEqual(arvados.CollectionReader(m5).manifest_text(), + self.assertEqual(arvados.CollectionReader(m5, self.api_client).manifest_text(), """./foo 204e43b8a1185621ca55a94839582e6f+67108864 0:6:bar ./zzz 204e43b8a1185621ca55a94839582e6f+67108864 0:999:zzz """) with self.data_file('1000G_ref_manifest') as f6: m6 = f6.read() - self.assertEqual(arvados.CollectionReader(m6).manifest_text(), m6) + self.assertEqual(arvados.CollectionReader(m6, self.api_client).manifest_text(), m6) with self.data_file('jlake_manifest') as f7: m7 = f7.read() - self.assertEqual(arvados.CollectionReader(m7).manifest_text(), m7) + self.assertEqual(arvados.CollectionReader(m7, self.api_client).manifest_text(), m7) m8 = """./a\\040b\\040c 59ca0efa9f5633cb0371bbc0355478d8+13 0:13:hello\\040world.txt """ - self.assertEqual(arvados.CollectionReader(m8).manifest_text(), m8) + self.assertEqual(arvados.CollectionReader(m8, self.api_client).manifest_text(), m8) def test_locators_and_ranges(self): blocks2 = [['a', 10, 0], @@ -472,22 +476,22 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, . 085c37f02916da1cad16f93c54d899b7+41 5348b82a029fd9e971a811ce1f71360b+43 8b22da26f9f433dea0a10e5ec66d73ba+43 47:80:md8sum.txt . 085c37f02916da1cad16f93c54d899b7+41 5348b82a029fd9e971a811ce1f71360b+43 8b22da26f9f433dea0a10e5ec66d73ba+43 40:80:md9sum.txt""" - m2 = arvados.CollectionReader(m1) + m2 = arvados.CollectionReader(m1, self.api_client) self.assertEqual(m2.manifest_text(), ". 5348b82a029fd9e971a811ce1f71360b+43 085c37f02916da1cad16f93c54d899b7+41 8b22da26f9f433dea0a10e5ec66d73ba+43 0:43:md5sum.txt 43:41:md6sum.txt 84:43:md7sum.txt 6:37:md8sum.txt 84:43:md8sum.txt 83:1:md9sum.txt 0:43:md9sum.txt 84:36:md9sum.txt\n") - self.assertEqual(arvados.CollectionReader(m1).all_streams()[0].files()['md5sum.txt'].as_manifest(), + self.assertEqual(arvados.CollectionReader(m1, self.api_client).all_streams()[0].files()['md5sum.txt'].as_manifest(), ". 5348b82a029fd9e971a811ce1f71360b+43 0:43:md5sum.txt\n") - self.assertEqual(arvados.CollectionReader(m1).all_streams()[0].files()['md6sum.txt'].as_manifest(), + self.assertEqual(arvados.CollectionReader(m1, self.api_client).all_streams()[0].files()['md6sum.txt'].as_manifest(), ". 085c37f02916da1cad16f93c54d899b7+41 0:41:md6sum.txt\n") - self.assertEqual(arvados.CollectionReader(m1).all_streams()[0].files()['md7sum.txt'].as_manifest(), + self.assertEqual(arvados.CollectionReader(m1, self.api_client).all_streams()[0].files()['md7sum.txt'].as_manifest(), ". 8b22da26f9f433dea0a10e5ec66d73ba+43 0:43:md7sum.txt\n") - self.assertEqual(arvados.CollectionReader(m1).all_streams()[0].files()['md9sum.txt'].as_manifest(), + self.assertEqual(arvados.CollectionReader(m1, self.api_client).all_streams()[0].files()['md9sum.txt'].as_manifest(), ". 085c37f02916da1cad16f93c54d899b7+41 5348b82a029fd9e971a811ce1f71360b+43 8b22da26f9f433dea0a10e5ec66d73ba+43 40:80:md9sum.txt\n") def test_write_directory_tree(self): - cwriter = arvados.CollectionWriter() + cwriter = arvados.CollectionWriter(self.api_client) cwriter.write_directory_tree(self.build_directory_tree( ['basefile', 'subdir/subfile'])) self.assertEqual(cwriter.manifest_text(), @@ -495,7 +499,7 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, ./subdir 1ca4dec89403084bf282ad31e6cf7972+14 0:14:subfile\n""") def test_write_named_directory_tree(self): - cwriter = arvados.CollectionWriter() + cwriter = arvados.CollectionWriter(self.api_client) cwriter.write_directory_tree(self.build_directory_tree( ['basefile', 'subdir/subfile']), 'root') self.assertEqual( @@ -504,7 +508,7 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, ./root/subdir 1ca4dec89403084bf282ad31e6cf7972+14 0:14:subfile\n""") def test_write_directory_tree_in_one_stream(self): - cwriter = arvados.CollectionWriter() + cwriter = arvados.CollectionWriter(self.api_client) cwriter.write_directory_tree(self.build_directory_tree( ['basefile', 'subdir/subfile']), max_manifest_depth=0) self.assertEqual(cwriter.manifest_text(), @@ -512,7 +516,7 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, ./subdir 4ace875ffdc6824a04950f06858f4465+22 8:14:subfile\n""") def test_write_directory_tree_with_limited_recursion(self): - cwriter = arvados.CollectionWriter() + cwriter = arvados.CollectionWriter(self.api_client) cwriter.write_directory_tree( self.build_directory_tree(['f1', 'd1/f2', 'd1/d2/f3']), max_manifest_depth=1) @@ -522,7 +526,7 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, ./d1/d2 50170217e5b04312024aa5cd42934494+13 0:8:f3\n""") def test_write_one_file(self): - cwriter = arvados.CollectionWriter() + cwriter = arvados.CollectionWriter(self.api_client) with self.make_test_file() as testfile: cwriter.write_file(testfile.name) self.assertEqual( @@ -531,14 +535,14 @@ class ArvadosCollectionsTest(run_test_server.TestCaseWithServers, os.path.basename(testfile.name))) def test_write_named_file(self): - cwriter = arvados.CollectionWriter() + cwriter = arvados.CollectionWriter(self.api_client) with self.make_test_file() as testfile: cwriter.write_file(testfile.name, 'foo') self.assertEqual(cwriter.manifest_text(), ". 098f6bcd4621d373cade4e832627b4f6+4 0:4:foo\n") def test_write_multiple_files(self): - cwriter = arvados.CollectionWriter() + cwriter = arvados.CollectionWriter(self.api_client) for letter in 'ABC': with self.make_test_file(letter) as testfile: cwriter.write_file(testfile.name, letter) diff --git a/sdk/python/tests/test_keep_client.py b/sdk/python/tests/test_keep_client.py index fb52ab4ab5..6198919e8b 100644 --- a/sdk/python/tests/test_keep_client.py +++ b/sdk/python/tests/test_keep_client.py @@ -2,51 +2,42 @@ # # ARVADOS_API_TOKEN=abc ARVADOS_API_HOST=arvados.local python -m unittest discover -import contextlib import os import unittest import arvados import run_test_server -@contextlib.contextmanager -def unauthenticated_client(keep_client=None): - if keep_client is None: - keep_client = arvados.keep.global_client_object - if not hasattr(keep_client, 'api_token'): - yield keep_client - else: - orig_token = keep_client.api_token - keep_client.api_token = '' - yield keep_client - keep_client.api_token = orig_token - class KeepTestCase(run_test_server.TestCaseWithServers): MAIN_SERVER = {} KEEP_SERVER = {} - def setUp(self): - arvados.keep.global_client_object = None + @classmethod + def setUpClass(cls): + super(KeepTestCase, cls).setUpClass() run_test_server.authorize_with("admin") + cls.api_client = arvados.api('v1') + cls.keep_client = arvados.KeepClient(api_client=cls.api_client, + proxy='', local_store='') def test_KeepBasicRWTest(self): - foo_locator = arvados.Keep.put('foo') + foo_locator = self.keep_client.put('foo') self.assertRegexpMatches( foo_locator, '^acbd18db4cc2f85cedef654fccc4a4d8\+3', 'wrong md5 hash from Keep.put("foo"): ' + foo_locator) - self.assertEqual(arvados.Keep.get(foo_locator), + self.assertEqual(self.keep_client.get(foo_locator), 'foo', 'wrong content from Keep.get(md5("foo"))') def test_KeepBinaryRWTest(self): blob_str = '\xff\xfe\xf7\x00\x01\x02' - blob_locator = arvados.Keep.put(blob_str) + blob_locator = self.keep_client.put(blob_str) self.assertRegexpMatches( blob_locator, '^7fc7c53b45e53926ba52821140fef396\+6', ('wrong locator from Keep.put():' + blob_locator)) - self.assertEqual(arvados.Keep.get(blob_locator), + self.assertEqual(self.keep_client.get(blob_locator), blob_str, 'wrong content from Keep.get(md5())') @@ -54,23 +45,23 @@ class KeepTestCase(run_test_server.TestCaseWithServers): blob_str = '\xff\xfe\xfd\xfc\x00\x01\x02\x03' for i in range(0,23): blob_str = blob_str + blob_str - blob_locator = arvados.Keep.put(blob_str) + blob_locator = self.keep_client.put(blob_str) self.assertRegexpMatches( blob_locator, '^84d90fc0d8175dd5dcfab04b999bc956\+67108864', ('wrong locator from Keep.put(): ' + blob_locator)) - self.assertEqual(arvados.Keep.get(blob_locator), + self.assertEqual(self.keep_client.get(blob_locator), blob_str, 'wrong content from Keep.get(md5())') def test_KeepSingleCopyRWTest(self): blob_str = '\xff\xfe\xfd\xfc\x00\x01\x02\x03' - blob_locator = arvados.Keep.put(blob_str, copies=1) + blob_locator = self.keep_client.put(blob_str, copies=1) self.assertRegexpMatches( blob_locator, '^c902006bc98a3eb4a3663b65ab4a6fab\+8', ('wrong locator from Keep.put(): ' + blob_locator)) - self.assertEqual(arvados.Keep.get(blob_locator), + self.assertEqual(self.keep_client.get(blob_locator), blob_str, 'wrong content from Keep.get(md5())') @@ -82,24 +73,25 @@ class KeepPermissionTestCase(run_test_server.TestCaseWithServers): def test_KeepBasicRWTest(self): run_test_server.authorize_with('active') - foo_locator = arvados.Keep.put('foo') + keep_client = arvados.KeepClient() + foo_locator = keep_client.put('foo') self.assertRegexpMatches( foo_locator, r'^acbd18db4cc2f85cedef654fccc4a4d8\+3\+A[a-f0-9]+@[a-f0-9]+$', 'invalid locator from Keep.put("foo"): ' + foo_locator) - self.assertEqual(arvados.Keep.get(foo_locator), + self.assertEqual(keep_client.get(foo_locator), 'foo', 'wrong content from Keep.get(md5("foo"))') # GET with an unsigned locator => NotFound - bar_locator = arvados.Keep.put('bar') + bar_locator = keep_client.put('bar') unsigned_bar_locator = "37b51d194a7513e45b56f6524f2d51f2+3" self.assertRegexpMatches( bar_locator, r'^37b51d194a7513e45b56f6524f2d51f2\+3\+A[a-f0-9]+@[a-f0-9]+$', 'invalid locator from Keep.put("bar"): ' + bar_locator) self.assertRaises(arvados.errors.NotFoundError, - arvados.Keep.get, + keep_client.get, unsigned_bar_locator) # GET from a different user => NotFound @@ -110,13 +102,13 @@ class KeepPermissionTestCase(run_test_server.TestCaseWithServers): # Unauthenticated GET for a signed locator => NotFound # Unauthenticated GET for an unsigned locator => NotFound - with unauthenticated_client(): - self.assertRaises(arvados.errors.NotFoundError, - arvados.Keep.get, - bar_locator) - self.assertRaises(arvados.errors.NotFoundError, - arvados.Keep.get, - unsigned_bar_locator) + keep_client.api_token = '' + self.assertRaises(arvados.errors.NotFoundError, + keep_client.get, + bar_locator) + self.assertRaises(arvados.errors.NotFoundError, + keep_client.get, + unsigned_bar_locator) # KeepOptionalPermission: starts Keep with --permission-key-file @@ -133,57 +125,54 @@ class KeepOptionalPermission(run_test_server.TestCaseWithServers): KEEP_SERVER = {'blob_signing_key': 'abcdefghijk0123456789', 'enforce_permissions': False} - def test_KeepAuthenticatedSignedTest(self): - run_test_server.authorize_with('active') - signed_locator = arvados.Keep.put('foo') + @classmethod + def setUpClass(cls): + super(KeepOptionalPermission, cls).setUpClass() + run_test_server.authorize_with("admin") + cls.api_client = arvados.api('v1') + + def setUp(self): + super(KeepOptionalPermission, self).setUp() + self.keep_client = arvados.KeepClient(api_client=self.api_client, + proxy='', local_store='') + + def _put_foo_and_check(self): + signed_locator = self.keep_client.put('foo') self.assertRegexpMatches( signed_locator, r'^acbd18db4cc2f85cedef654fccc4a4d8\+3\+A[a-f0-9]+@[a-f0-9]+$', 'invalid locator from Keep.put("foo"): ' + signed_locator) - self.assertEqual(arvados.Keep.get(signed_locator), + return signed_locator + + def test_KeepAuthenticatedSignedTest(self): + signed_locator = self._put_foo_and_check() + self.assertEqual(self.keep_client.get(signed_locator), 'foo', 'wrong content from Keep.get(md5("foo"))') def test_KeepAuthenticatedUnsignedTest(self): - run_test_server.authorize_with('active') - signed_locator = arvados.Keep.put('foo') - self.assertRegexpMatches( - signed_locator, - r'^acbd18db4cc2f85cedef654fccc4a4d8\+3\+A[a-f0-9]+@[a-f0-9]+$', - 'invalid locator from Keep.put("foo"): ' + signed_locator) - self.assertEqual(arvados.Keep.get("acbd18db4cc2f85cedef654fccc4a4d8"), + signed_locator = self._put_foo_and_check() + self.assertEqual(self.keep_client.get("acbd18db4cc2f85cedef654fccc4a4d8"), 'foo', 'wrong content from Keep.get(md5("foo"))') def test_KeepUnauthenticatedSignedTest(self): - # Since --enforce-permissions is not in effect, GET requests - # need not be authenticated. - run_test_server.authorize_with('active') - signed_locator = arvados.Keep.put('foo') - self.assertRegexpMatches( - signed_locator, - r'^acbd18db4cc2f85cedef654fccc4a4d8\+3\+A[a-f0-9]+@[a-f0-9]+$', - 'invalid locator from Keep.put("foo"): ' + signed_locator) - - with unauthenticated_client(): - self.assertEqual(arvados.Keep.get(signed_locator), - 'foo', - 'wrong content from Keep.get(md5("foo"))') + # Check that signed GET requests work even when permissions + # enforcement is off. + signed_locator = self._put_foo_and_check() + self.keep_client.api_token = '' + self.assertEqual(self.keep_client.get(signed_locator), + 'foo', + 'wrong content from Keep.get(md5("foo"))') def test_KeepUnauthenticatedUnsignedTest(self): # Since --enforce-permissions is not in effect, GET requests # need not be authenticated. - run_test_server.authorize_with('active') - signed_locator = arvados.Keep.put('foo') - self.assertRegexpMatches( - signed_locator, - r'^acbd18db4cc2f85cedef654fccc4a4d8\+3\+A[a-f0-9]+@[a-f0-9]+$', - 'invalid locator from Keep.put("foo"): ' + signed_locator) - - with unauthenticated_client(): - self.assertEqual(arvados.Keep.get("acbd18db4cc2f85cedef654fccc4a4d8"), - 'foo', - 'wrong content from Keep.get(md5("foo"))') + signed_locator = self._put_foo_and_check() + self.keep_client.api_token = '' + self.assertEqual(self.keep_client.get("acbd18db4cc2f85cedef654fccc4a4d8"), + 'foo', + 'wrong content from Keep.get(md5("foo"))') class KeepProxyTestCase(run_test_server.TestCaseWithServers): @@ -194,43 +183,39 @@ class KeepProxyTestCase(run_test_server.TestCaseWithServers): @classmethod def setUpClass(cls): super(KeepProxyTestCase, cls).setUpClass() - cls.proxy_addr = os.environ['ARVADOS_KEEP_PROXY'] + cls.api_client = arvados.api('v1') - def setUp(self): - arvados.keep.global_client_object = None - os.environ['ARVADOS_KEEP_PROXY'] = self.proxy_addr - os.environ.pop('ARVADOS_EXTERNAL_CLIENT', None) + def tearDown(self): + arvados.config.settings().pop('ARVADOS_EXTERNAL_CLIENT', None) + super(KeepProxyTestCase, self).tearDown() def test_KeepProxyTest1(self): # Will use ARVADOS_KEEP_PROXY environment variable that is set by # setUpClass(). - baz_locator = arvados.Keep.put('baz') + keep_client = arvados.KeepClient(api_client=self.api_client, + local_store='') + baz_locator = keep_client.put('baz') self.assertRegexpMatches( baz_locator, '^73feffa4b7f6bb68e44cf984c85f6e88\+3', 'wrong md5 hash from Keep.put("baz"): ' + baz_locator) - self.assertEqual(arvados.Keep.get(baz_locator), + self.assertEqual(keep_client.get(baz_locator), 'baz', 'wrong content from Keep.get(md5("baz"))') - - self.assertEqual(True, arvados.Keep.global_client_object().using_proxy) + self.assertTrue(keep_client.using_proxy) def test_KeepProxyTest2(self): - # We don't want to use ARVADOS_KEEP_PROXY from run_keep_proxy() in - # setUpClass(), so clear it and set ARVADOS_EXTERNAL_CLIENT which will - # contact the API server. - os.environ["ARVADOS_KEEP_PROXY"] = "" - os.environ["ARVADOS_EXTERNAL_CLIENT"] = "true" - - # Will send X-External-Client to server and get back the proxy from - # keep_services/accessible - baz_locator = arvados.Keep.put('baz2') + # Don't instantiate the proxy directly, but set the X-External-Client + # header. The API server should direct us to the proxy. + arvados.config.settings()['ARVADOS_EXTERNAL_CLIENT'] = 'true' + keep_client = arvados.KeepClient(api_client=self.api_client, + proxy='', local_store='') + baz_locator = keep_client.put('baz2') self.assertRegexpMatches( baz_locator, '^91f372a266fe2bf2823cb8ec7fda31ce\+4', 'wrong md5 hash from Keep.put("baz2"): ' + baz_locator) - self.assertEqual(arvados.Keep.get(baz_locator), + self.assertEqual(keep_client.get(baz_locator), 'baz2', 'wrong content from Keep.get(md5("baz2"))') - - self.assertEqual(True, arvados.Keep.global_client_object().using_proxy) + self.assertTrue(keep_client.using_proxy) -- 2.30.2