config_unittest.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. # Copyright 2024 The Chromium Authors
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file.
  4. """Test the telemetry config."""
  5. from . import config
  6. import configparser
  7. import pathlib
  8. import tempfile
  9. import unittest
  10. class ConfigTest(unittest.TestCase):
  11. """Test Config class."""
  12. def test_create_missing_config_file(self) -> None:
  13. """Test Config to create missing config file."""
  14. with tempfile.TemporaryDirectory() as temp:
  15. path = pathlib.Path(temp) / "telemetry.cfg"
  16. cfg = config.Config(path)
  17. with open(path, 'r') as f:
  18. self.assertEqual(
  19. f.read(), "[root]\nnotice_countdown = 10\n\n[trace]\n\n")
  20. self.assertFalse(cfg.trace_config.enabled)
  21. self.assertFalse(cfg.trace_config.has_enabled())
  22. self.assertEqual("AUTO", cfg.trace_config.enabled_reason)
  23. self.assertEqual(10, cfg.root_config.notice_countdown)
  24. def test_load_config_file(self) -> None:
  25. """Test Config to load config file."""
  26. with tempfile.TemporaryDirectory() as temp:
  27. path = pathlib.Path(temp) / "telemetry.cfg"
  28. with open(path, 'w') as f:
  29. f.write(
  30. "[root]\nnotice_countdown = 3\n\n[trace]\nenabled = True\n\n"
  31. )
  32. cfg = config.Config(path)
  33. self.assertTrue(cfg.trace_config.enabled)
  34. self.assertEqual(3, cfg.root_config.notice_countdown)
  35. def test_flush_config_file_with_updates(self) -> None:
  36. """Test Config to write the config changes to file."""
  37. with tempfile.TemporaryDirectory() as temp:
  38. path = pathlib.Path(temp) / "telemetry.cfg"
  39. with open(path, 'w') as f:
  40. f.write(
  41. "[root]\nnotice_countdown = 7\n\n[trace]\nenabled = True\n\n"
  42. )
  43. cfg = config.Config(path)
  44. cfg.trace_config.update(enabled=False, reason="AUTO")
  45. cfg.root_config.update(notice_countdown=9)
  46. cfg.flush()
  47. with open(path, 'r') as f:
  48. self.assertEqual(
  49. f.read(),
  50. "\n".join([
  51. "[root]",
  52. "notice_countdown = 9",
  53. "",
  54. "[trace]",
  55. "enabled = False",
  56. "enabled_reason = AUTO",
  57. "",
  58. "",
  59. ]),
  60. )
  61. def test_default_trace_config() -> None:
  62. """Test TraceConfig to load default values."""
  63. cfg = configparser.ConfigParser()
  64. cfg[config.TRACE_SECTION_KEY] = {}
  65. trace_config = config.TraceConfig(cfg)
  66. assert not trace_config.has_enabled()
  67. def test_trace_config_update() -> None:
  68. """Test TraceConfig to update values."""
  69. cfg = configparser.ConfigParser()
  70. cfg[config.TRACE_SECTION_KEY] = {config.ENABLED_KEY: True}
  71. trace_config = config.TraceConfig(cfg)
  72. trace_config.update(enabled=False, reason="AUTO")
  73. assert not trace_config.enabled
  74. assert trace_config.enabled_reason == "AUTO"
  75. def test_trace_config() -> None:
  76. """Test TraceConfig to instantiate from passed dict."""
  77. cfg = configparser.ConfigParser()
  78. cfg[config.TRACE_SECTION_KEY] = {config.ENABLED_KEY: True}
  79. trace_config = config.TraceConfig(cfg)
  80. assert trace_config.enabled
  81. assert trace_config.has_enabled()
  82. assert trace_config.enabled_reason == "AUTO"
  83. def test_default_root_config() -> None:
  84. """Test RootConfig to load default values."""
  85. cfg = configparser.ConfigParser()
  86. cfg[config.ROOT_SECTION_KEY] = {}
  87. root_config = config.RootConfig(cfg)
  88. assert root_config.notice_countdown == 10
  89. def test_root_config_update() -> None:
  90. """Test RootConfig to update values."""
  91. cfg = configparser.ConfigParser()
  92. cfg[config.ROOT_SECTION_KEY] = {config.NOTICE_COUNTDOWN_KEY: True}
  93. root_config = config.RootConfig(cfg)
  94. root_config.update(notice_countdown=8)
  95. assert root_config.notice_countdown == 8
  96. def test_root_config() -> None:
  97. """Test RootConfig to instantiate from passed dict."""
  98. cfg = configparser.ConfigParser()
  99. cfg[config.ROOT_SECTION_KEY] = {config.NOTICE_COUNTDOWN_KEY: 9}
  100. root_config = config.RootConfig(cfg)
  101. assert root_config.notice_countdown == 9
  102. if __name__ == '__main__':
  103. unittest.main()