From 6aca01bafbe28ef4250b569f276292661a07d699 Mon Sep 17 00:00:00 2001 From: Jeremy Fincher Date: Fri, 18 Feb 2005 07:04:48 +0000 Subject: [PATCH] Made utils.file.mktemp a little more stochastic. --- src/utils/file.py | 10 +++++++--- test/test_utils.py | 6 ++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/utils/file.py b/src/utils/file.py index 3710e526d..5fd1e71e5 100644 --- a/src/utils/file.py +++ b/src/utils/file.py @@ -42,10 +42,14 @@ def mktemp(suffix=''): m = md5.md5(suffix) r.seed(time.time()) s = str(r.getstate()) - for x in xrange(0, random.randrange(400), random.randrange(1, 5)): - m.update(str(x)) + period = random.random() + now = start = time.time() + while start + period < now: + time.sleep() # Induce a context switch, if possible. + now = time.time() + m.update(str(random.random())) m.update(s) - m.update(str(time.time())) + m.update(str(now)) s = m.hexdigest() return sha.sha(s + str(time.time())).hexdigest() + suffix diff --git a/test/test_utils.py b/test/test_utils.py index 31c34d08b..cf148e17b 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -458,6 +458,12 @@ class FileTest(SupyTestCase): self.assertEqual(list(utils.file.nonCommentNonEmptyLines(L)), ['foo', 'bar', 'biff']) + def testMktemp(self): + # This is mostly to test that it actually halts. + self.failUnless(utils.file.mktemp()) + self.failUnless(utils.file.mktemp()) + self.failUnless(utils.file.mktemp()) + class NetTest(SupyTestCase): def testEmailRe(self):