From 41fa8238d55b79be6f8ec013a17f5cf06d0d3912 Mon Sep 17 00:00:00 2001 From: meejah Date: Sat, 7 Nov 2020 03:26:05 -0700 Subject: [PATCH] more unittests --- src/allmydata/grid_manager.py | 2 +- src/allmydata/storage_client.py | 3 ++ src/allmydata/test/test_grid_manager.py | 51 +++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/allmydata/grid_manager.py b/src/allmydata/grid_manager.py index dadf3b361..6c5230901 100644 --- a/src/allmydata/grid_manager.py +++ b/src/allmydata/grid_manager.py @@ -328,7 +328,7 @@ def create_grid_manager_verifier(keys, certs, now_fn=None, bad_cert=None): # validate the signatures on any certificates we have (not yet the expiry dates) for alleged_cert in certs: for key in keys: - cert = _validate_grid_manager_certificate(key, alleged_cert) + cert = validate_grid_manager_certificate(key, alleged_cert) if cert is not None: valid_certs.append(cert) else: diff --git a/src/allmydata/storage_client.py b/src/allmydata/storage_client.py index 49c20866b..c17fbe4f7 100644 --- a/src/allmydata/storage_client.py +++ b/src/allmydata/storage_client.py @@ -66,6 +66,9 @@ from allmydata.interfaces import ( IStorageServer, IFoolscapStoragePlugin, ) +from allmydata.grid_manager import ( + create_grid_manager_verifier, +) from allmydata.util import log, base32, connection_status from allmydata.util.assertutil import precondition from allmydata.util.observer import ObserverList diff --git a/src/allmydata/test/test_grid_manager.py b/src/allmydata/test/test_grid_manager.py index 893941f7d..a420385f0 100644 --- a/src/allmydata/test/test_grid_manager.py +++ b/src/allmydata/test/test_grid_manager.py @@ -24,6 +24,8 @@ from allmydata.grid_manager import ( load_grid_manager, save_grid_manager, create_grid_manager, + parse_grid_manager_certificate, + create_grid_manager_verifier, ) from .common import SyncTestCase @@ -272,3 +274,52 @@ class GridManagerVerifier(SyncTestCase): "No 'public_key' for storage server", str(ctx.exception), ) + + def test_parse_cert(self): + """ + Parse an ostensibly valid storage certificate + """ + js = parse_grid_manager_certificate('{"certificate": "", "signature": ""}') + self.assertEqual( + set(js.keys()), + {"certificate", "signature"} + ) + # the signature isn't *valid*, but that's checked in a + # different function + + def test_parse_cert_not_dict(self): + """ + Certificate data not even a dict + """ + with self.assertRaises(ValueError) as ctx: + parse_grid_manager_certificate("[]") + self.assertIn( + "must be a dict", + str(ctx.exception), + ) + + def test_parse_cert_missing_signature(self): + """ + Missing the signature + """ + with self.assertRaises(ValueError) as ctx: + parse_grid_manager_certificate('{"certificate": ""}') + self.assertIn( + "must contain", + str(ctx.exception), + ) + + def test_validate_cert(self): + """ + Validate a correctly-signed certificate + """ + priv0, pub0 = ed25519.create_signing_keypair() + self.gm.add_storage_server("test0", pub0) + cert0 = self.gm.sign("test0", 86400) + + verify = create_grid_manager_verifier( + [self.gm._public_key], + [cert0], + ) + + self.assertTrue(verify())