fleshing out tests

This commit is contained in:
Sandy Walsh 2014-01-10 20:50:44 +00:00
parent 49f05ca5ac
commit cf27ef257b
2 changed files with 56 additions and 12 deletions

View File

@ -48,6 +48,10 @@ TODO: How will the ReadingRollManager know which files to read
from, and in which order, if the filename is templated? from, and in which order, if the filename is templated?
""" """
def now():
"""Broken out for testing."""
return datetime.datetime.utcnow()
class RollChecker(object): class RollChecker(object):
def start(self, archive): def start(self, archive):
@ -62,11 +66,11 @@ class TimeRollChecker(RollChecker):
self.timedelta = timedelta self.timedelta = timedelta
def start(self, archive): def start(self, archive):
self.start_time = datetime.datetime.utcnow() self.start_time = now()
self.end_time = self.start_time + self.timedelta self.end_time = self.start_time + self.timedelta
def check(self, archive): def check(self, archive):
return datetime.datetime.utcnow() >= self.end_time return now() >= self.end_time
class SizeRollChecker(RollChecker): class SizeRollChecker(RollChecker):
@ -75,7 +79,7 @@ class SizeRollChecker(RollChecker):
def check(self, archive): def check(self, archive):
size = archive._get_file_handle().tell() size = archive._get_file_handle().tell()
return size / 1073741824 > self.size_in_gb return size / 1073741824 >= self.size_in_gb
class RollManager(object): class RollManager(object):
@ -86,9 +90,9 @@ class RollManager(object):
self.active_archive = None self.active_archive = None
def _make_filename(self): def _make_filename(self):
now = datetime.datetime.utcnow() now = now()
return now.strftime(self.filename_template) return now.strftime(self.filename_template)
def get_active_archive(self): def get_active_archive(self):
if not self.active_archive: if not self.active_archive:
filename = self._make_filename() filename = self._make_filename()
@ -107,7 +111,7 @@ class RollManager(object):
class ReadingRollManager(RollManager): class ReadingRollManager(RollManager):
def __init__(self, filename_template, roll_checker): def __init__(self, filename_template, roll_checker):
super(ReadingRollManager, self).__init__(filename_template, super(ReadingRollManager, self).__init__(filename_template,
roll_checker) roll_checker)
self.archive_class = ArchiveReader self.archive_class = ArchiveReader
@ -123,7 +127,7 @@ class ReadingRollManager(RollManager):
class WritingRollManager(RollManager): class WritingRollManager(RollManager):
def __init__(self, filename_template, roll_checker): def __init__(self, filename_template, roll_checker):
super(ReadingRollManager, self).__init__(filename_template, super(ReadingRollManager, self).__init__(filename_template,
roll_checker) roll_checker)
self.archive_class = ArchiveWriter self.archive_class = ArchiveWriter
@ -152,7 +156,7 @@ class ArchiveWriter(object):
def write(self, payload): def write(self, payload):
pass pass
class ArchiveReader(object): class ArchiveReader(object):
"""The active Archive for consuming. """The active Archive for consuming.

View File

@ -1,3 +1,4 @@
import datetime
import mock import mock
import unittest import unittest
@ -5,9 +6,48 @@ from shoebox import shoebox
class TestRollChecker(unittest.TestCase): class TestRollChecker(unittest.TestCase):
def test_time_roll_checker_start(self):
one_hour = datetime.timedelta(hours=1)
x = shoebox.TimeRollChecker(one_hour)
now = datetime.datetime.utcnow()
with mock.patch.object(shoebox, 'now') as dt:
dt.return_value = now
x.start(None)
self.assertEqual(x.start_time, now)
self.assertEqual(x.end_time, now + one_hour)
def test_time_roll_checker(self): def test_time_roll_checker_end(self):
pass one_hour = datetime.timedelta(hours=1)
x = shoebox.TimeRollChecker(one_hour)
now = datetime.datetime.utcnow()
x.start_time = now
x.end_time = now + one_hour
with mock.patch.object(shoebox, 'now') as dt:
dt.return_value = now + one_hour
self.assertTrue(x.check(None))
#if __name__ == '__main__': with mock.patch.object(shoebox, 'now') as dt:
# unittest.main() dt.return_value = now
self.assertFalse(x.check(None))
with mock.patch.object(shoebox, 'now') as dt:
dt.return_value = now + one_hour - datetime.timedelta(seconds = 1)
self.assertFalse(x.check(None))
def test_size_roll_checker_end(self):
one_gig = 1073741824
x = shoebox.SizeRollChecker(10)
archive = mock.Mock()
archive._get_file_handle.return_value.tell.return_value = one_gig * 5
self.assertFalse(x.check(archive))
archive._get_file_handle.return_value.tell.return_value = one_gig * 10
self.assertTrue(x.check(archive))
archive._get_file_handle.return_value.tell.return_value = one_gig * 11
self.assertTrue(x.check(archive))
class TestRollManager(unittest.TestCase):
pass # Next ...