From 8e51643ed34bc1a8161daafbc055470aed87e9d5 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Wed, 19 Jul 2023 13:03:24 -0400 Subject: [PATCH 1/4] Test for upgrading from Foolscap to HTTP. --- src/allmydata/test/test_storage_client.py | 42 +++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/allmydata/test/test_storage_client.py b/src/allmydata/test/test_storage_client.py index 0671526ae..0df66a680 100644 --- a/src/allmydata/test/test_storage_client.py +++ b/src/allmydata/test/test_storage_client.py @@ -88,6 +88,7 @@ from allmydata.util import base32, yamlutil from allmydata.storage_client import ( IFoolscapStorageServer, NativeStorageServer, + HTTPNativeStorageServer, StorageFarmBroker, _FoolscapStorage, _NullStorage, @@ -625,6 +626,47 @@ storage: self.assertIdentical(s2, s) self.assertEqual(s2.get_permutation_seed(), permseed) + def test_upgrade_from_foolscap_to_http(self): + """ + When an announcement is initially Foolscap but then switches to HTTP, + HTTP is used, assuming HTTP is enabled. + """ + tub_maker = lambda _: new_tub() + config = config_from_string( + "/dev/null", "", "[client]\nforce_foolscap = False\n" + ) + broker = StorageFarmBroker(True, tub_maker, config) + broker.startService() + key_s = b'v0-1234-1' + + ones = str(base32.b2a(b"1"), "utf-8") + initial_announcement = { + "service-name": "storage", + "anonymous-storage-FURL": f"pb://{ones}@nowhere/fake2", + "permutation-seed-base32": "bbbbbbbbbbbbbbbbbbbbbbbb", + } + broker._got_announcement(key_s, initial_announcement) + initial_service = broker.servers[key_s] + self.assertIsInstance(initial_service, NativeStorageServer) + self.assertTrue(initial_service.running) + self.assertIdentical(initial_service.parent, broker) + + http_announcement = { + "service-name": "storage", + "anonymous-storage-FURL": f"pb://{ones}@nowhere/fake2", + "permutation-seed-base32": "bbbbbbbbbbbbbbbbbbbbbbbb", + ANONYMOUS_STORAGE_NURLS: [f"pb://{ones}@nowhere/fake2#v=1"], + } + broker._got_announcement(key_s, http_announcement) + self.assertFalse(initial_service.running) + self.assertEqual(initial_service.parent, None) + new_service = broker.servers[key_s] + self.assertIsInstance(new_service, HTTPNativeStorageServer) + self.assertTrue(new_service.running) + self.assertIdentical(new_service.parent, broker) + + return broker.stopService() + def test_static_permutation_seed_pubkey(self): broker = make_broker() server_id = b"v0-4uazse3xb6uu5qpkb7tel2bm6bpea4jhuigdhqcuvvse7hugtsia" From 0431c69cb84bf3021c61f324f1b44d188987d8d8 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Wed, 19 Jul 2023 13:03:43 -0400 Subject: [PATCH 2/4] News file. --- newsfragments/4047.minor | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 newsfragments/4047.minor diff --git a/newsfragments/4047.minor b/newsfragments/4047.minor new file mode 100644 index 000000000..e69de29bb From 152cadf54360c562961abbf5edebe2e69d72d794 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Thu, 17 Aug 2023 09:06:32 -0400 Subject: [PATCH 3/4] Less duplication, more accuracy in format. --- src/allmydata/test/test_storage_client.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/allmydata/test/test_storage_client.py b/src/allmydata/test/test_storage_client.py index d487408de..03c9fb9ae 100644 --- a/src/allmydata/test/test_storage_client.py +++ b/src/allmydata/test/test_storage_client.py @@ -671,12 +671,8 @@ storage: self.assertTrue(initial_service.running) self.assertIdentical(initial_service.parent, broker) - http_announcement = { - "service-name": "storage", - "anonymous-storage-FURL": f"pb://{ones}@nowhere/fake2", - "permutation-seed-base32": "bbbbbbbbbbbbbbbbbbbbbbbb", - ANONYMOUS_STORAGE_NURLS: [f"pb://{ones}@nowhere/fake2#v=1"], - } + http_announcement = initial_announcement.copy() + http_announcement[ANONYMOUS_STORAGE_NURLS] = {f"pb://{ones}@nowhere/fake2#v=1"} broker._got_announcement(key_s, http_announcement) self.assertFalse(initial_service.running) self.assertEqual(initial_service.parent, None) From 45e201a2821dcef63474dc682bd3ce0eb8e501f7 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 5 Sep 2023 09:33:44 -0400 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: Jean-Paul Calderone --- src/allmydata/test/test_storage_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/allmydata/test/test_storage_client.py b/src/allmydata/test/test_storage_client.py index 03c9fb9ae..13c6ccaea 100644 --- a/src/allmydata/test/test_storage_client.py +++ b/src/allmydata/test/test_storage_client.py @@ -657,6 +657,7 @@ storage: ) broker = StorageFarmBroker(True, tub_maker, config) broker.startService() + self.addCleanup(broker.stopService) key_s = b'v0-1234-1' ones = str(base32.b2a(b"1"), "utf-8") @@ -681,7 +682,6 @@ storage: self.assertTrue(new_service.running) self.assertIdentical(new_service.parent, broker) - return broker.stopService() def test_static_permutation_seed_pubkey(self): broker = make_broker()