diff --git a/src/_secureaccesstokenauthorizer/_storage_server.py b/src/_secureaccesstokenauthorizer/_storage_server.py index e6425120c1f48007ea9d62317e363fefe34e14ab..a237e47eae64909abf29c7fb834905775e700443 100644 --- a/src/_secureaccesstokenauthorizer/_storage_server.py +++ b/src/_secureaccesstokenauthorizer/_storage_server.py @@ -129,6 +129,9 @@ class SecureAccessTokenAuthorizerStorageServer(Referenceable): def _validate_tokens(self, tokens): pass + def remote_get_version(self): + return self._original.remote_get_version() + def remote_allocate_buckets(self, tokens, *a, **kw): self._validate_tokens(tokens) return self._original.remote_allocate_buckets(*a, **kw) diff --git a/src/_secureaccesstokenauthorizer/tests/matchers.py b/src/_secureaccesstokenauthorizer/tests/matchers.py index 29dc8dd46b4070767ca0d896baaff19d0f61f12c..16d967a512f1ee976ac845750fdf476fc95958a6 100644 --- a/src/_secureaccesstokenauthorizer/tests/matchers.py +++ b/src/_secureaccesstokenauthorizer/tests/matchers.py @@ -20,6 +20,8 @@ import attr from testtools.matchers import ( Mismatch, + ContainsDict, + Always, ) @attr.s @@ -38,3 +40,17 @@ class Provides(object): return Mismatch("{} does not provide expected {}".format( obj, ", ".join(str(iface) for iface in missing), )) + + +def matches_version_dictionary(): + """ + Match the dictionary returned by Tahoe-LAFS' + ``RIStorageServer.get_version`` which is also the dictionary returned by + our own ``RITokenAuthorizedStorageServer.get_version``. + """ + return ContainsDict({ + # It has these two top-level keys, at least. Try not to be too + # fragile by asserting much more than that they are present. + b'application-version': Always(), + b'http://allmydata.org/tahoe/protocols/storage/v1': Always(), + }) diff --git a/src/_secureaccesstokenauthorizer/tests/test_storage_protocol.py b/src/_secureaccesstokenauthorizer/tests/test_storage_protocol.py index 106585b5b61832b365646bb1b494100d4543a52c..b7c8e22efb62decb900ac810dffe41df3716cc00 100644 --- a/src/_secureaccesstokenauthorizer/tests/test_storage_protocol.py +++ b/src/_secureaccesstokenauthorizer/tests/test_storage_protocol.py @@ -30,6 +30,9 @@ from testtools.matchers import ( Equals, HasLength, ) +from testtools.twistedsupport import ( + succeeded, +) from testtools.twistedsupport._deferred import ( # I'd rather use https://twistedmatrix.com/trac/ticket/8900 but efforts # there appear to have stalled. @@ -72,7 +75,9 @@ from .strategies import ( # Not really a strategy... bytes_for_share, ) - +from .matchers import ( + matches_version_dictionary, +) from ..api import ( SecureAccessTokenAuthorizerStorageServer, SecureAccessTokenAuthorizerStorageClient, @@ -106,6 +111,7 @@ class LocalRemote(object): ) + class ShareTests(TestCase): """ Tests for interaction with shares. @@ -127,6 +133,16 @@ class ShareTests(TestCase): get_tokens=get_tokens, ) + def test_get_version(self): + """ + Version information about the storage server can be retrieved using + *get_version*. + """ + self.assertThat( + self.client.get_version(), + succeeded(matches_version_dictionary()), + ) + @given( storage_index=storage_indexes(), renew_secret=lease_renew_secrets(),