blob: a0be9243cd94742e8eb4b6ecf3911fc342ceb6aa [file] [log] [blame] [edit]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2024 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit-tests for remote_services_utils.py functions."""
import os
import sys
import tempfile
import unittest
from pathlib import Path
# Import regenerator.py as a module.
_SCRIPT_DIR = os.path.dirname(__file__)
sys.path.insert(0, _SCRIPT_DIR)
import remote_services_utils
class RemoteServicesUtilsTest(unittest.TestCase):
def setUp(self):
self._td = tempfile.TemporaryDirectory()
self._dir = Path(self._td.name)
self.source_dir = self._dir / "source"
self.source_dir.mkdir()
self.cfg_file1 = (
self.source_dir / remote_services_utils.RBE_CONFIG_FILES[0]
)
self.cfg_file2 = (
self.source_dir / remote_services_utils.RBE_CONFIG_FILES[1]
)
self.cfg_file1.parent.mkdir(parents=True)
self.cfg_file1.write_text(
"\n" + "# foo=bar\n" # empty line # comment line should be ignored
"instance=projects/test_project_name/instances/test_instance_name\n"
)
self.cfg_file2.parent.mkdir(exist_ok=True)
self.cfg_file2.write_text(
"platform=container-image=docker://gcr.io/test_project/debian11,something_else\n"
)
def tearDown(self):
self._td.cleanup()
def test_generate_rbe_config(self):
config_dict, input_files = remote_services_utils.generate_rbe_config(
self.source_dir
)
self.assertDictEqual(
config_dict,
{
"instance": "projects/test_project_name/instances/test_instance_name",
"platform": "container-image=docker://gcr.io/test_project/debian11,something_else",
},
)
self.assertSetEqual(input_files, set([self.cfg_file1, self.cfg_file2]))
def test_generate_rbe_template_substitutions(self):
_TEST_CASES = [
{
"name": "simple_project",
"config_dict": {
"instance": "projects/test_project1/instances/1",
"platform": "foo=bar,container-image=docker://something/else,zoo=qux",
},
"remote_download_outputs": "all",
"expected": {
"remote_download_outputs": "all",
"remote_instance_name": "projects/test_project1/instances/1",
"rbe_project": "test_project1",
"container_image": "docker://something/else",
},
},
]
for test_case in _TEST_CASES:
msg = f'For {test_case["name"]} case'
result = remote_services_utils.generate_rbe_template_substitutions(
test_case["config_dict"], test_case["remote_download_outputs"]
)
self.assertDictEqual(result, test_case["expected"], msg=msg)
def test_generate_remote_services_bazelrc(self):
output_file = self._dir / "remote_services.bazelrc"
template_file = (
self.source_dir / remote_services_utils.RBE_TEMPLATE_FILE
)
template_file.parent.mkdir(parents=True)
template_file.write_text(
r"""# AUTO-GENERATED
my_download_outputs={remote_download_outputs}
my_remote_instance_name={remote_instance_name}
my_rbe_project={rbe_project}
my_container_image={container_image}
"""
)
input_files = remote_services_utils.generate_remote_services_bazelrc(
fuchsia_dir=self.source_dir,
output_path=output_file,
download_outputs="find-me",
)
self.assertEqual(
output_file.read_text(),
"""# AUTO-GENERATED
my_download_outputs=find-me
my_remote_instance_name=projects/test_project_name/instances/test_instance_name
my_rbe_project=test_project_name
my_container_image=docker://gcr.io/test_project/debian11
""",
)
self.assertSetEqual(
input_files, {template_file, self.cfg_file1, self.cfg_file2}
)
if __name__ == "__main__":
unittest.main()