Coverage for tests/unit_tests/commands/test_apio_packages.py: 100%
53 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-06 10:20 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-06 10:20 +0000
1"""Test for the "apio packages" command."""
3from os import listdir, rename
4from tests.conftest import ApioRunner
5from apio.commands.apio import apio_top_cli as apio
6from apio.common.apio_console import cunstyle
9def test_packages(apio_runner: ApioRunner):
10 """Test "apio packages" with different parameters"""
12 with apio_runner.in_sandbox() as sb:
14 # -- Execute "apio packages"
15 result = sb.invoke_apio_cmd(apio, ["packages"])
16 sb.assert_result_ok(result)
17 assert "Subcommands:" in result.output
18 assert "apio packages update" in cunstyle(result.output)
19 assert "apio packages list" in cunstyle(result.output)
20 assert result.output != cunstyle(result.output) # Colored.
22 # -- Execute "apio packages list"
23 result = sb.invoke_apio_cmd(apio, ["packages", "list"])
24 sb.assert_result_ok(result)
27def test_packages_slow(apio_runner: ApioRunner):
28 """Tests listing, installation and uninstallation of packages."""
30 # -- This is a slow test. Skip it if running with --fast-only flag.
31 apio_runner.skip_test_if_fast_only()
33 with apio_runner.in_sandbox() as sb:
35 # -- Run 'apio packages list'
36 result = sb.invoke_apio_cmd(apio, ["packages", "list"])
37 sb.assert_result_ok(result)
38 assert "definitions" in result.output
39 assert "examples" in result.output
40 assert "oss-cad-suite" in result.output
42 # -- Run 'apio packages update'.
43 # -- Both 'examples' and 'oss-cad-suite' should exist, and
44 # -- possibly others, depending on the platform.
45 result = sb.invoke_apio_cmd(apio, ["packages", "update"])
46 sb.assert_result_ok(result)
47 assert "All Apio packages are installed OK" in result.output
48 assert listdir(sb.packages_dir / "definitions")
49 assert listdir(sb.packages_dir / "examples/alhambra-ii")
50 assert listdir(sb.packages_dir / "oss-cad-suite/bin")
52 # -- Delete a file from the examples package, we will use it as an
53 # -- indicator for the reinstallation of the package.
54 marker_file = sb.packages_dir / "examples/alhambra-ii/ledon/ledon.v"
55 assert marker_file.is_file()
56 marker_file.unlink()
57 assert not marker_file.exists()
59 # -- Run 'apio packages update'.
60 # -- This should not do anything since it's considered to be installed.
61 result = sb.invoke_apio_cmd(apio, ["packages", "update"])
62 sb.assert_result_ok(result)
63 assert "Package 'examples' installed" not in result.output
64 assert not marker_file.exists()
66 # -- Run 'apio packages update --force'
67 # -- This should recover the file.
68 result = sb.invoke_apio_cmd(apio, ["packages", "update", "--force"])
69 sb.assert_result_ok(result)
70 assert "Package 'examples' installed" in result.output
71 assert marker_file.is_file()
73 # -- Break the examples package by renaming it. This also creates an
74 # -- orphan dir.
75 example_package_dir = sb.packages_dir / "examples"
76 bad_package_dir = sb.packages_dir / "unknown-package"
77 rename(example_package_dir, bad_package_dir)
78 assert not example_package_dir.exists()
79 assert bad_package_dir.is_dir()
81 # -- Run 'apio packages update'. This should fix everything.
82 result = sb.invoke_apio_cmd(apio, ["packages", "update"])
83 sb.assert_result_ok(result)
84 assert "Uninstalling broken package 'examples'" in result.output
85 assert (
86 "Deleting unknown package dir 'unknown-package'" in result.output
87 )
88 assert "Package 'examples' installed successfully" in result.output
89 assert example_package_dir.is_dir()
90 assert marker_file.exists()
91 assert not bad_package_dir.exists()