| # Copyright 2024 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| import io | |
| from pathlib import Path | |
| import tempfile | |
| import unittest | |
| from iree.build import * | |
| TEST_URL = None | |
| # Arbitrary URLs to download from via HTTP requests. These should require no | |
| # authentication to access and should ideally sit behind a CDN that can handle | |
| # random CI and developer traffic. We could also mock the fetching to make the | |
| # tests hermetic. | |
| TEST_URL_1 = "https://raw.githubusercontent.com/iree-org/iree/82724905d64eebb2f62bcc0e41626a7b5156fd8f/.gitignore" | |
| TEST_URL_2 = "https://raw.githubusercontent.com/iree-org/iree/82724905d64eebb2f62bcc0e41626a7b5156fd8f/.gitmodules" | |
| @entrypoint | |
| def file_via_http(): | |
| return fetch_http( | |
| name="file.txt", | |
| url=TEST_URL, | |
| ) | |
| class BasicTest(unittest.TestCase): | |
| def setUp(self): | |
| self._temp_dir = tempfile.TemporaryDirectory(ignore_cleanup_errors=True) | |
| self._temp_dir.__enter__() | |
| self.output_path = Path(self._temp_dir.name) | |
| def tearDown(self) -> None: | |
| self._temp_dir.__exit__(None, None, None) | |
| def test_fetch_http(self): | |
| # This just does a sanity check that rich console mode does not crash. Actual | |
| # behavior can really only be completely verified visually. | |
| out = None | |
| err = None | |
| global TEST_URL | |
| path = self.output_path / "genfiles" / "file_via_http" / "file.txt" | |
| def run(): | |
| nonlocal out | |
| nonlocal err | |
| try: | |
| out_io = io.StringIO() | |
| err_io = io.StringIO() | |
| iree_build_main( | |
| args=[ | |
| "file_via_http", | |
| "--output-dir", | |
| str(self.output_path), | |
| "--test-force-console", | |
| ], | |
| stderr=err_io, | |
| stdout=out_io, | |
| ) | |
| finally: | |
| out = out_io.getvalue() | |
| err = err_io.getvalue() | |
| print(f"::test_fetch_http err: {err!r}") | |
| print(f"::test_fetch_http out: {out!r}") | |
| def assertExists(): | |
| self.assertTrue(path.exists(), msg=f"Path {path} exists") | |
| # First run should fetch. | |
| TEST_URL = TEST_URL_1 | |
| run() | |
| self.assertIn("Fetching URL: https://", err) | |
| assertExists() | |
| # Second run should not fetch. | |
| TEST_URL = TEST_URL_1 | |
| run() | |
| self.assertNotIn("Fetching URL: https://", err) | |
| assertExists() | |
| # Fetching a different URL should download again. | |
| TEST_URL = TEST_URL_2 | |
| run() | |
| self.assertIn("Fetching URL: https://", err) | |
| assertExists() | |
| # Removing the file should fetch again. | |
| TEST_URL = TEST_URL_2 | |
| path.unlink() | |
| run() | |
| self.assertIn("Fetching URL: https://", err) | |
| assertExists() | |
| if __name__ == "__main__": | |
| unittest.main() |