3551: When testing keep clients, write keepstore/keepproxy logs to
[arvados.git] / sdk / python / tests / test_keep_client.py
index 6d0470ad41237c935a8978322840722cdef5eda7..8706e2193b7c3f249db3778c03b7ee598269b364 100644 (file)
@@ -2,9 +2,10 @@
 #
 # 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):
@@ -35,9 +36,10 @@ 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"))')
@@ -45,10 +47,10 @@ class KeepTestCase(unittest.TestCase):
     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>))')
@@ -58,10 +60,10 @@ class KeepTestCase(unittest.TestCase):
         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>))')
@@ -69,10 +71,10 @@ class KeepTestCase(unittest.TestCase):
     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>))')
@@ -105,21 +107,32 @@ class KeepPermissionTestCase(unittest.TestCase):
                          '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
@@ -237,9 +250,10 @@ class KeepProxyTestCase(unittest.TestCase):
         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"))')
@@ -259,9 +273,10 @@ class KeepProxyTestCase(unittest.TestCase):
         # 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"))')