From f6ff9876526e21a990368c47beb955eee55b2c84 Mon Sep 17 00:00:00 2001 From: Pavel Repin Date: Fri, 2 Oct 2009 12:53:26 -0700 Subject: [PATCH] Unbreak unit tests of url_for. --- simples3.py | 9 ++++++++- tests.py | 14 ++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/simples3.py b/simples3.py index c1f5658..3e7cd95 100644 --- a/simples3.py +++ b/simples3.py @@ -537,6 +537,13 @@ def listdir(self, prefix=None, marker=None, limit=None, delimiter=None): if not data: break + @staticmethod + def _now(): + """ + Wraps datetime.now() for testability. + """ + return datetime.datetime.now() + def url_for(self, key, authenticated=False, expire=datetime.timedelta(minutes=5)): """Produce the URL for given S3 object key. @@ -568,7 +575,7 @@ def url_for(self, key, authenticated=False, expire = datetime.datetime.fromtimestamp(expire) else: # Assume timedelta. - expire = datetime.datetime.now() + expire + expire = self._now() + expire expire_desc = str(long(time.mktime(expire.timetuple()))) auth_descriptor = "".join(( "GET\n", diff --git a/tests.py b/tests.py index 1e050de..51ccc44 100755 --- a/tests.py +++ b/tests.py @@ -3,6 +3,7 @@ import time import unittest import simples3 +import datetime class S3BucketTests(unittest.TestCase): def setUp(self): @@ -26,19 +27,20 @@ def test_url_for_with_auth(self): "Signature=rucSbH0yNEcP9oM2XNlouVI3BH4%3D") self.assertEquals(x, self.bucket.url_for('photos/puppy.jpg', authenticated=True, - expires=1175139620)) + expire=1175139620)) - def test_url_for_with_auth_default_expires(self): + def test_url_for_with_auth_default_expire(self): # Poor man's dynamic scoping is used to - # stub out time.time() function. - _real_time_func = time.time - time.time = lambda: 1239800000.01234 + # stub out S3Bucket._now() method. + t0 = 1239800000.01234 + _orig_func = self.bucket._now + self.bucket._now = lambda: datetime.datetime.fromtimestamp(t0) try: # Note: expected expiration value is 300 seconds (5 min) greater. self.failUnless('Expires=1239800300' in self.bucket.url_for('file.txt', authenticated=True)) finally: - time.time = _real_time_func + self.bucket._now = _orig_func if __name__ == "__main__": import doctest