| #!/usr/bin/env python3 |
| # Copyright 2021 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """The unit test suite for the Fingerprint Study Tool.""" |
| |
| from __future__ import print_function |
| |
| import os |
| import unittest |
| import unittest.mock |
| |
| import study_serve |
| |
| |
| class TestStudyServeEnvironmentVariableParsing(unittest.TestCase): |
| """Test the |environment_parameters| function.""" |
| |
| PARAMS = { |
| "first": "first-value", |
| "second": True, |
| "third": 1, |
| "fourth": "", |
| "fifth": 1.78, |
| } |
| |
| PARAMS_NEW = { |
| "first": "new-value", |
| "second": False, |
| "third": 98, |
| "fourth": "new-value", |
| "fifth": 2.0, |
| } |
| |
| PARAMS_ENV = { |
| "FIRST": str(PARAMS_NEW["first"]), |
| "SECOND": str(PARAMS_NEW["second"]), |
| "THIRD": str(PARAMS_NEW["third"]), |
| "FOURTH": str(PARAMS_NEW["fourth"]), |
| "FIFTH": str(PARAMS_NEW["fifth"]), |
| } |
| |
| def test_environment_parameters_no_touch(self): |
| with unittest.mock.patch.dict(os.environ, {}, clear=True): |
| env = study_serve.environment_parameters(self.PARAMS.copy()) |
| |
| for param, value in self.PARAMS.items(): |
| self.assertEqual( |
| env[param], |
| value, |
| f'Param "{param}" was ' f'overwritten with "{env[param]}".', |
| ) |
| |
| def test_environment_parameters_name_translation(self): |
| default_params = { |
| "log-dir": "default", |
| } |
| with unittest.mock.patch.dict( |
| os.environ, {"LOG_DIR": "new-value"}, clear=True |
| ): |
| env = study_serve.environment_parameters(default_params) |
| |
| self.assertEqual(env["log-dir"], "new-value") |
| |
| def test_environment_parameters_types(self): |
| with unittest.mock.patch.dict(os.environ, self.PARAMS_ENV, clear=True): |
| env = study_serve.environment_parameters(self.PARAMS.copy()) |
| |
| for param, value in self.PARAMS_NEW.items(): |
| self.assertEqual(env[param], value, f'Param "{param}" was invalid.') |
| |
| def test_environment_parameters_types_error(self): |
| default_params = { |
| "port": 9000, |
| } |
| environ = { |
| "PORT": "not-a-number", |
| } |
| with unittest.mock.patch.dict(os.environ, environ, clear=True): |
| with self.assertRaisesRegex(ValueError, "PORT"): |
| _ = study_serve.environment_parameters(default_params) |
| |
| def test_environment_parameters_bools(self): |
| """Test the parsing of bools from environment variable.""" |
| |
| # Parse "True" from env. |
| with unittest.mock.patch.dict( |
| os.environ, {"SYSLOG": "True"}, clear=True |
| ): |
| env = study_serve.environment_parameters({"syslog": False}) |
| self.assertEqual(env["syslog"], True) |
| |
| # Parse "False" from env. |
| with unittest.mock.patch.dict( |
| os.environ, {"SYSLOG": "False"}, clear=True |
| ): |
| env = study_serve.environment_parameters({"syslog": True}) |
| self.assertEqual(env["syslog"], False) |
| |
| # Parse "yes" from env. |
| with unittest.mock.patch.dict( |
| os.environ, {"SYSLOG": "yes"}, clear=True |
| ): |
| env = study_serve.environment_parameters({"syslog": False}) |
| self.assertEqual(env["syslog"], True) |
| |
| # Parse "no" from env. |
| with unittest.mock.patch.dict(os.environ, {"SYSLOG": "no"}, clear=True): |
| env = study_serve.environment_parameters({"syslog": True}) |
| self.assertEqual(env["syslog"], False) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |