From 30eaaa78623487dc9234dd44c7fa4bbe82fbb6a5 Mon Sep 17 00:00:00 2001
From: robk-tahoe <robk-tahoe@allmydata.com>
Date: Thu, 3 Apr 2008 18:43:46 -0700
Subject: [PATCH] key_generator: fix timing, make tests more robust

previously there was an edge case in the timing of expected behaviour
of the key_generator (w.r.t. the refresh delay and twisted/foolscap
delivery).  if it took >6s for a key to be generated, then it was
possible for the pool refresh delay to transpire _during_ the
synchronous creation of a key in remote_get_rsa_key_pair.  this could
lead to the timer elapsing during key creation and hence the pool
being refilled before control returned to the client.

this change ensures that the time window from a get key request
until the key gen reactor blocks to refill the pool is the time
since a request was answered, not since a request was asked.
this causes the behaviour to match expectations, as embodied in
test_keygen, even if the delay window is dropped to 0.1s
---
 src/allmydata/key_generator.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/allmydata/key_generator.py b/src/allmydata/key_generator.py
index 964b2b38..61fa9b2e 100644
--- a/src/allmydata/key_generator.py
+++ b/src/allmydata/key_generator.py
@@ -65,8 +65,9 @@ class KeyGenerator(service.MultiService, foolscap.Referenceable):
     def remote_get_rsa_key_pair(self, key_size):
         self.vlog('%s remote_get_key' % (self,))
         if key_size != self.DEFAULT_KEY_SIZE or not self.keypool:
+            key = self.gen_key(key_size)
             self.reset_timer()
-            return self.gen_key(key_size)
+            return key
         else:
             self.reset_timer()
             return self.keypool.pop()
-- 
2.45.2