import unittest from unittest.mock import patch from s3_uploader.metrics import Metrics class MetricsTestCase(unittest.TestCase): def test_add(self): m = Metrics() m.add('label', 123) self.assertEqual(123, m.value('label')) @patch('s3_uploader.metrics.time') def test_get_time(self, time): time.monotonic_ns.side_effect = [123456] m = Metrics() self.assertEqual(123456, m.get_time()) @patch('s3_uploader.metrics.time') def test_increment_time_since(self, time): m = Metrics() time.monotonic_ns.side_effect = [123456, 234567] m.increment_time_since('label', time.monotonic_ns()) self.assertEqual(111111, m.value('label')) def test_merge(self): m1 = Metrics() m2 = Metrics() m1.add('1', 2) m1.add('2', 3) m2.add('a', 45) m2.add('b', 99) m1.merge(m2) self.assertEqual(2, m1.value('1')) self.assertEqual(3, m1.value('2')) self.assertEqual(45, m1.value('a')) self.assertEqual(99, m1.value('b')) def test_values(self): m1 = Metrics() m1.add('1', 2) m1.add('2', 3) m1.add('a', 45) m1.add('b', 99) self.assertEqual(2, m1.value('1')) self.assertEqual(3, m1.value('2')) self.assertEqual(45, m1.value('a')) self.assertEqual(99, m1.value('b')) self.assertEqual({ '1': 2, '2': 3, 'a': 45, 'b': 99, }, m1.values) def test_str(self): m1 = Metrics() m1.add('1', 2097152) m1.add('2', 3145728) m1.add('a', 47185920) m1.add('b', 103809024) self.assertEqual("{'1 [MS]': 2, '2 [MS]': 3, 'a [MS]': 47, 'b [MS]': 103}", str(m1))