tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

measures_unittests.py (3002B)


      1 #!/usr/bin/env vpython3
      2 
      3 # Copyright 2024 The Chromium Authors
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 """File for testing measures.py."""
      7 
      8 import os
      9 import tempfile
     10 import unittest
     11 
     12 import google.protobuf.json_format as json_format
     13 
     14 from google.protobuf import any_pb2
     15 
     16 import measures
     17 
     18 from measure import Measure
     19 from test_script_metrics_pb2 import TestScriptMetric, TestScriptMetrics
     20 
     21 
     22 class MeasuresTest(unittest.TestCase):
     23  """Test measure.py."""
     24 
     25  def test_create_average(self) -> None:
     26    ave = measures.average('a', 'b', 'c')
     27    ave.record(1)
     28    ave.record(2)
     29    exp = TestScriptMetric()
     30    exp.name = 'a/b/c'
     31    exp.value = 1.5
     32    self.assertEqual(ave.dump(), exp)
     33 
     34  def test_create_single_name_piece(self) -> None:
     35    self.assertEqual(measures.average('a')._name, 'a')
     36 
     37  def test_create_no_name_piece(self) -> None:
     38    self.assertRaises(ValueError, lambda: measures.average())
     39 
     40  def test_create_none_in_name_pieces(self) -> None:
     41    self.assertRaises(TypeError, lambda: measures.average('a', None))
     42 
     43  def test_create_count(self) -> None:
     44    self.assertIsInstance(measures.count('a'), Measure)
     45 
     46  def test_create_data_points(self) -> None:
     47    self.assertIsInstance(measures.data_points('a'), Measure)
     48 
     49  def test_register(self) -> None:
     50    before = len(measures._metric._metrics)
     51    for x in range(3):
     52      measures.average('a')
     53    self.assertEqual(len(measures._metric._metrics), before + 3)
     54 
     55  def test_dump(self) -> None:
     56    before = len(measures._metric._metrics)
     57    count = measures.count('test', 'dump')
     58    for _ in range(101):
     59      count.record()
     60    with tempfile.TemporaryDirectory() as tmpdir:
     61      measures.dump(tmpdir)
     62      with open(os.path.join(tmpdir,
     63                             measures.TEST_SCRIPT_METRICS_JSONPB_FILENAME),
     64                'r',
     65                encoding='utf-8') as rf:
     66        any_msg = json_format.Parse(rf.read(), any_pb2.Any())
     67        message = TestScriptMetrics()
     68        self.assertTrue(any_msg.Unpack(message))
     69    self.assertEqual(len(message.metrics), before + 1)
     70    exp = TestScriptMetric()
     71    exp.name = 'test/dump'
     72    exp.value = 101
     73    self.assertEqual(message.metrics[-1], exp)
     74 
     75  def test_dump_with_type(self) -> None:
     76    with tempfile.TemporaryDirectory() as tmpdir:
     77      measures.dump(tmpdir)
     78      with open(os.path.join(tmpdir,
     79                             measures.TEST_SCRIPT_METRICS_JSONPB_FILENAME),
     80                'r',
     81                encoding='utf-8') as rf:
     82        txt = rf.read()
     83        self.assertTrue('"@type":' in txt)
     84        self.assertTrue(TestScriptMetrics().DESCRIPTOR.full_name in txt)
     85 
     86  def test_dump_create_dir(self) -> None:
     87    with tempfile.TemporaryDirectory() as tmpdir:
     88      dir_path = os.path.join(tmpdir, 'hello', 'this', 'dir', 'should', 'not',
     89                              'exist')
     90      measures.dump(dir_path)
     91      self.assertTrue(os.path.isdir(dir_path))
     92 
     93 
     94 if __name__ == '__main__':
     95  unittest.main()