#
# ARVADOS_API_TOKEN=abc ARVADOS_API_HOST=arvados.local python -m unittest discover
+import os
import unittest
+
import arvados
-import os
import run_test_server
class KeepTestCase(unittest.TestCase):
def test_KeepBasicRWTest(self):
foo_locator = arvados.Keep.put('foo')
- self.assertEqual(foo_locator,
- 'acbd18db4cc2f85cedef654fccc4a4d8+3',
- 'wrong md5 hash from Keep.put("foo"): ' + foo_locator)
+ self.assertRegexpMatches(
+ foo_locator,
+ '^acbd18db4cc2f85cedef654fccc4a4d8\+3',
+ 'wrong md5 hash from Keep.put("foo"): ' + foo_locator)
self.assertEqual(arvados.Keep.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)
- self.assertEqual(blob_locator,
- '7fc7c53b45e53926ba52821140fef396+6',
- ('wrong locator from Keep.put(<binarydata>):' +
- blob_locator))
+ self.assertRegexpMatches(
+ blob_locator,
+ '^7fc7c53b45e53926ba52821140fef396\+6',
+ ('wrong locator from Keep.put(<binarydata>):' + blob_locator))
self.assertEqual(arvados.Keep.get(blob_locator),
blob_str,
'wrong content from Keep.get(md5(<binarydata>))')
for i in range(0,23):
blob_str = blob_str + blob_str
blob_locator = arvados.Keep.put(blob_str)
- self.assertEqual(blob_locator,
- '84d90fc0d8175dd5dcfab04b999bc956+67108864',
- ('wrong locator from Keep.put(<binarydata>): ' +
- blob_locator))
+ self.assertRegexpMatches(
+ blob_locator,
+ '^84d90fc0d8175dd5dcfab04b999bc956\+67108864',
+ ('wrong locator from Keep.put(<binarydata>): ' + blob_locator))
self.assertEqual(arvados.Keep.get(blob_locator),
blob_str,
'wrong content from Keep.get(md5(<binarydata>))')
def test_KeepSingleCopyRWTest(self):
blob_str = '\xff\xfe\xfd\xfc\x00\x01\x02\x03'
blob_locator = arvados.Keep.put(blob_str, copies=1)
- self.assertEqual(blob_locator,
- 'c902006bc98a3eb4a3663b65ab4a6fab+8',
- ('wrong locator from Keep.put(<binarydata>): ' +
- blob_locator))
+ self.assertRegexpMatches(
+ blob_locator,
+ '^c902006bc98a3eb4a3663b65ab4a6fab\+8',
+ ('wrong locator from Keep.put(<binarydata>): ' + blob_locator))
self.assertEqual(arvados.Keep.get(blob_locator),
blob_str,
'wrong content from Keep.get(md5(<binarydata>))')
'foo',
'wrong content from Keep.get(md5("foo"))')
- # With Keep permissions enabled, a GET request without a signature will fail.
+ # GET with an unsigned locator => NotFound
bar_locator = arvados.Keep.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,
- "37b51d194a7513e45b56f6524f2d51f2")
+ unsigned_bar_locator)
- # A request without an API token will also fail.
+ # GET from a different user => NotFound
+ run_test_server.authorize_with('spectator')
+ self.assertRaises(arvados.errors.NotFoundError,
+ arvados.Keep.get,
+ bar_locator)
+
+ # Unauthenticated GET for a signed locator => NotFound
+ # Unauthenticated GET for an unsigned locator => NotFound
del arvados.config.settings()["ARVADOS_API_TOKEN"]
self.assertRaises(arvados.errors.NotFoundError,
arvados.Keep.get,
bar_locator)
+ self.assertRaises(arvados.errors.NotFoundError,
+ arvados.Keep.get,
+ unsigned_bar_locator)
# KeepOptionalPermission: starts Keep with --permission-key-file
# but not --enforce-permissions (i.e. generate signatures on PUT
arvados.config._settings = None
baz_locator = arvados.Keep.put('baz')
- self.assertEqual(baz_locator,
- '73feffa4b7f6bb68e44cf984c85f6e88+3',
- 'wrong md5 hash from Keep.put("baz"): ' + baz_locator)
+ self.assertRegexpMatches(
+ baz_locator,
+ '^73feffa4b7f6bb68e44cf984c85f6e88\+3',
+ 'wrong md5 hash from Keep.put("baz"): ' + baz_locator)
self.assertEqual(arvados.Keep.get(baz_locator),
'baz',
'wrong content from Keep.get(md5("baz"))')
# keep_services/accessible
baz_locator = arvados.Keep.put('baz2')
- self.assertEqual(baz_locator,
- '91f372a266fe2bf2823cb8ec7fda31ce+4',
- 'wrong md5 hash from Keep.put("baz2"): ' + baz_locator)
+ self.assertRegexpMatches(
+ baz_locator,
+ '^91f372a266fe2bf2823cb8ec7fda31ce\+4',
+ 'wrong md5 hash from Keep.put("baz2"): ' + baz_locator)
self.assertEqual(arvados.Keep.get(baz_locator),
'baz2',
'wrong content from Keep.get(md5("baz2"))')