def test_fetch(self): """ fetch info from database """ # Don't use AssertRaisesException due to a super obscure bug in # python2.6 which returns an IOError in the 2nd argument of __exit__ # in a context manager as a tuple. See this for a minimal reproducer: # http://git.io/cKz30g with self.assertRaises(IOError): # check a db that doesnt exist whisper.fetch("this_db_does_not_exist", 0) # SECOND MINUTE HOUR DAY retention = [(1, 60), (60, 60), (3600, 24), (86400, 365)] whisper.create(self.filename, retention) # check a db with an invalid time range now = int(time.time()) past = now - 6000 msg = "Invalid time interval: from time '{0}' is after until time '{1}'" with AssertRaisesException(whisper.InvalidTimeInterval(msg.format(now, past))): whisper.fetch(self.filename, now, past) fetch = whisper.fetch(self.filename, 0) # check time range self.assertEqual(fetch[0][1] - fetch[0][0], retention[-1][0] * retention[-1][1]) # check number of points self.assertEqual(len(fetch[1]), retention[-1][1]) # check step size self.assertEqual(fetch[0][2], retention[-1][0])
def test_file_fetch_edge_cases(self): """ Test some of the edge cases in file_fetch() that should return None or raise an exception """ whisper.create(self.filename, [(1, 60)]) with open(self.filename, 'rb') as fh: msg = "Invalid time interval: from time '{0}' is after until time '{1}'" until_time = 0 from_time = int(time.time()) + 100 with AssertRaisesException( whisper.InvalidTimeInterval(msg.format(from_time, until_time))): whisper.file_fetch(fh, fromTime=from_time, untilTime=until_time) # fromTime > now aka metrics from the future self.assertIsNone( whisper.file_fetch(fh, fromTime=int(time.time()) + 100, untilTime=int(time.time()) + 200), ) # untilTime > oldest time stored in the archive headers = whisper.info(self.filename) the_past = int(time.time()) - headers['maxRetention'] - 200 self.assertIsNone( whisper.file_fetch(fh, fromTime=the_past - 1, untilTime=the_past), ) # untilTime > now, change untilTime to now now = int(time.time()) self.assertEqual( whisper.file_fetch(fh, fromTime=now, untilTime=now + 200, now=now), ((now + 1, now + 2, 1), [None]), )