diff --git a/apollo/publishing_tools/apollo_tree.py b/apollo/publishing_tools/apollo_tree.py index 344a36d..eb6a5a9 100644 --- a/apollo/publishing_tools/apollo_tree.py +++ b/apollo/publishing_tools/apollo_tree.py @@ -270,14 +270,40 @@ async def update_repomd_xml(repomd_xml_path: str, updateinfo: dict): os.remove(existing_updateinfo_path) -async def main(args): - base_paths = await scan_path( - args.path, - args.base_format, - args.ignore, - ) - print(args) - pass +async def run_apollo_tree( + base_format: str, + manual: bool, + auto_scan: bool, + path: str, + ignore: list, + product_name: str, +): + if manual: + raise Exception("Manual mode not implemented yet") + + if auto_scan: + repos = await scan_path( + path, + base_format, + ignore, + ) + + for _, repo_variants in repos.items(): + for repo in repo_variants: + updateinfo = await fetch_updateinfo_from_apollo( + repo, + product_name, + ) + + gzipped = await gzip_updateinfo(updateinfo) + await write_updateinfo_to_file( + repo["found_path"], + gzipped, + ) + await update_repomd_xml( + repo["found_path"], + gzipped, + ) if __name__ == "__main__": @@ -343,4 +369,13 @@ if __name__ == "__main__": if p_args.auto_scan and not p_args.path: parser.error("Must specify path to scan for repos in auto-scan mode") - asyncio.run(main(p_args)) + asyncio.run( + run_apollo_tree( + p_args.base_format, + p_args.manual, + p_args.auto_scan, + p_args.path, + p_args.ignore, + p_args.product_name, + ) + ) diff --git a/apollo/tests/publishing_tools/test_apollo_tree.py b/apollo/tests/publishing_tools/test_apollo_tree.py index 0843cac..a41c100 100644 --- a/apollo/tests/publishing_tools/test_apollo_tree.py +++ b/apollo/tests/publishing_tools/test_apollo_tree.py @@ -332,7 +332,6 @@ async def test_fetch_updateinfo_from_apollo_mock(mocker): updateinfo = await apollo_tree.fetch_updateinfo_from_apollo( repo, "Rocky Linux 8 x86_64", - True, ) assert updateinfo == updateinfo_xml @@ -363,7 +362,6 @@ async def test_gzip_updateinfo(mocker): updateinfo = await apollo_tree.fetch_updateinfo_from_apollo( repo, "Rocky Linux 8 x86_64", - True, ) assert updateinfo == updateinfo_xml @@ -399,7 +397,6 @@ async def test_write_updateinfo_to_file(mocker): updateinfo = await apollo_tree.fetch_updateinfo_from_apollo( repo, "Rocky Linux 8 x86_64", - True, ) assert updateinfo == updateinfo_xml @@ -452,7 +449,6 @@ async def test_update_repomd_xml(mocker): updateinfo = await apollo_tree.fetch_updateinfo_from_apollo( repo, "Rocky Linux 8 x86_64", - True, ) assert updateinfo == updateinfo_xml @@ -496,3 +492,51 @@ async def test_update_repomd_xml(mocker): actual_repomd_xml = f.read() assert actual_repomd_xml == expected_repomd_xml + + +@pytest.mark.asyncio +async def test_run_apollo_tree(mocker): + with tempfile.TemporaryDirectory() as directory: + repos = await _setup_test_baseos(directory) + + # Read data/updateinfo__test__1.xml + with open( + path.join( + path.dirname(__file__), "data", "updateinfo__test__1.xml" + ), + "r", + encoding="utf-8", + ) as f: + updateinfo_xml = f.read() + + resp = MockResponse(updateinfo_xml, 200) + mocker.patch("aiohttp.ClientSession.get", return_value=resp) + + mocker.patch("time.time", return_value=1674284973) + await apollo_tree.run_apollo_tree( + "$reponame/$arch/os/repodata/repomd.xml", + False, + True, + directory, + [], + "Rocky Linux 8 x86_64", + ) + + for _, repo_variants in repos.items(): + for repo in repo_variants: + # Check that the repomd.xml file matches baseos__base__repomd__x86_64_with_updateinfo.xml from data + with open( + path.join( + path.dirname(__file__), + "data", + "baseos__base__repomd__x86_64_with_updateinfo.xml", + ), + "r", + encoding="utf-8", + ) as f: + expected_repomd_xml = f.read() + + with open(repo["found_path"], "r", encoding="utf-8") as f: + actual_repomd_xml = f.read() + + assert actual_repomd_xml == expected_repomd_xml