diff --git a/swh/model/tests/test_identifiers.py b/swh/model/tests/test_identifiers.py index ad6332664c9aed737d8bbfe95aa834d3ad8deba8..d5537d63476ab2a823c7f12b4463f687ea8b5a24 100644 --- a/swh/model/tests/test_identifiers.py +++ b/swh/model/tests/test_identifiers.py @@ -3,6 +3,7 @@ # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information +import binascii import datetime import unittest @@ -11,6 +12,80 @@ from nose.tools import istest from swh.model import hashutil, identifiers +class UtilityFunctionsIdentifier(unittest.TestCase): + def setUp(self): + self.str_id = 'c2e41aae41ac17bd4a650770d6ee77f62e52235b' + self.bytes_id = binascii.unhexlify(self.str_id) + self.bad_type_id = object() + + @istest + def identifier_to_bytes(self): + for id in [self.str_id, self.bytes_id]: + self.assertEqual(identifiers.identifier_to_bytes(id), + self.bytes_id) + + # wrong length + with self.assertRaises(ValueError) as cm: + identifiers.identifier_to_bytes(id[:-2]) + + self.assertIn('length', str(cm.exception)) + + with self.assertRaises(ValueError) as cm: + identifiers.identifier_to_bytes(self.bad_type_id) + + self.assertIn('type', str(cm.exception)) + + @istest + def identifier_to_str(self): + for id in [self.str_id, self.bytes_id]: + self.assertEqual(identifiers.identifier_to_str(id), + self.str_id) + + # wrong length + with self.assertRaises(ValueError) as cm: + identifiers.identifier_to_str(id[:-2]) + + self.assertIn('length', str(cm.exception)) + + with self.assertRaises(ValueError) as cm: + identifiers.identifier_to_str(self.bad_type_id) + + self.assertIn('type', str(cm.exception)) + + +class UtilityFunctionsDateOffset(unittest.TestCase): + def setUp(self): + self.date = datetime.datetime( + 2015, 11, 22, 16, 33, 56, tzinfo=datetime.timezone.utc) + self.date_int = int(self.date.timestamp()) + self.date_repr = b'1448210036' + + self.date_microseconds = datetime.datetime( + 2015, 11, 22, 16, 33, 56, 2342, tzinfo=datetime.timezone.utc) + self.date_microseconds_float = self.date_microseconds.timestamp() + self.date_microseconds_repr = b'1448210036.002342' + + self.offsets = { + 0: b'+0000', + -630: b'-1030', + 800: b'+1320', + } + + @istest + def format_date(self): + for date in [self.date, self.date_int]: + self.assertEqual(identifiers.format_date(date), self.date_repr) + + for date in [self.date_microseconds, self.date_microseconds_float]: + self.assertEqual(identifiers.format_date(date), + self.date_microseconds_repr) + + @istest + def format_offset(self): + for offset, res in self.offsets.items(): + self.assertEqual(identifiers.format_offset(offset), res) + + class ContentIdentifier(unittest.TestCase): def setUp(self): self.content = {