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
This commit is contained in:
robk-tahoe 2008-04-03 18:43:46 -07:00
parent c838cfef44
commit 30eaaa7862

View File

@ -65,8 +65,9 @@ class KeyGenerator(service.MultiService, foolscap.Referenceable):
def remote_get_rsa_key_pair(self, key_size): def remote_get_rsa_key_pair(self, key_size):
self.vlog('%s remote_get_key' % (self,)) self.vlog('%s remote_get_key' % (self,))
if key_size != self.DEFAULT_KEY_SIZE or not self.keypool: if key_size != self.DEFAULT_KEY_SIZE or not self.keypool:
key = self.gen_key(key_size)
self.reset_timer() self.reset_timer()
return self.gen_key(key_size) return key
else: else:
self.reset_timer() self.reset_timer()
return self.keypool.pop() return self.keypool.pop()