mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-11-05 09:00:01 +00:00
* Use Docker BuildKit to build addons * Improve error message as suggested by CodeRabbit * Fix container.remove() tests missing v=True * Ignore squash rather than falling back to legacy builder * Use version rather than tag to avoid confusion in run_command() * Fix tests differently * Use PropertyMock like other tests * Restore position of fix_label fn * Exempt addon builder image from unsupported checks * Refactor tests * Fix tests expecting wrong builder image * Remove harcoded paths * Fix tests * Remove get_addon_host_path() function * Use docker buildx build rather than docker build Co-authored-by: Stefan Agner <stefan@agner.ch> --------- Co-authored-by: Stefan Agner <stefan@agner.ch>
120 lines
4.0 KiB
Python
120 lines
4.0 KiB
Python
"""Test addon build."""
|
|
|
|
from unittest.mock import PropertyMock, patch
|
|
|
|
from awesomeversion import AwesomeVersion
|
|
|
|
from supervisor.addons.addon import Addon
|
|
from supervisor.addons.build import AddonBuild
|
|
from supervisor.coresys import CoreSys
|
|
|
|
from tests.common import is_in_list
|
|
|
|
|
|
async def test_platform_set(coresys: CoreSys, install_addon_ssh: Addon):
|
|
"""Test platform set in container build args."""
|
|
build = await AddonBuild(coresys, install_addon_ssh).load_config()
|
|
|
|
with (
|
|
patch.object(
|
|
type(coresys.arch), "supported", new=PropertyMock(return_value=["amd64"])
|
|
),
|
|
patch.object(
|
|
type(coresys.arch), "default", new=PropertyMock(return_value="amd64")
|
|
),
|
|
patch.object(
|
|
type(coresys.config),
|
|
"local_to_extern_path",
|
|
return_value="/addon/path/on/host",
|
|
),
|
|
):
|
|
args = await coresys.run_in_executor(
|
|
build.get_docker_args, AwesomeVersion("latest"), "test-image:latest"
|
|
)
|
|
|
|
assert is_in_list(["--platform", "linux/amd64"], args["command"])
|
|
|
|
|
|
async def test_dockerfile_evaluation(coresys: CoreSys, install_addon_ssh: Addon):
|
|
"""Test dockerfile path in container build args."""
|
|
build = await AddonBuild(coresys, install_addon_ssh).load_config()
|
|
|
|
with (
|
|
patch.object(
|
|
type(coresys.arch), "supported", new=PropertyMock(return_value=["amd64"])
|
|
),
|
|
patch.object(
|
|
type(coresys.arch), "default", new=PropertyMock(return_value="amd64")
|
|
),
|
|
patch.object(
|
|
type(coresys.config),
|
|
"local_to_extern_path",
|
|
return_value="/addon/path/on/host",
|
|
),
|
|
):
|
|
args = await coresys.run_in_executor(
|
|
build.get_docker_args, AwesomeVersion("latest"), "test-image:latest"
|
|
)
|
|
|
|
assert is_in_list(["--file", "Dockerfile"], args["command"])
|
|
assert str(await coresys.run_in_executor(build.get_dockerfile)).endswith(
|
|
"fixtures/addons/local/ssh/Dockerfile"
|
|
)
|
|
assert build.arch == "amd64"
|
|
|
|
|
|
async def test_dockerfile_evaluation_arch(coresys: CoreSys, install_addon_ssh: Addon):
|
|
"""Test dockerfile arch evaluation in container build args."""
|
|
build = await AddonBuild(coresys, install_addon_ssh).load_config()
|
|
|
|
with (
|
|
patch.object(
|
|
type(coresys.arch), "supported", new=PropertyMock(return_value=["aarch64"])
|
|
),
|
|
patch.object(
|
|
type(coresys.arch), "default", new=PropertyMock(return_value="aarch64")
|
|
),
|
|
patch.object(
|
|
type(coresys.config),
|
|
"local_to_extern_path",
|
|
return_value="/addon/path/on/host",
|
|
),
|
|
):
|
|
args = await coresys.run_in_executor(
|
|
build.get_docker_args, AwesomeVersion("latest"), "test-image:latest"
|
|
)
|
|
|
|
assert is_in_list(["--file", "Dockerfile.aarch64"], args["command"])
|
|
assert str(await coresys.run_in_executor(build.get_dockerfile)).endswith(
|
|
"fixtures/addons/local/ssh/Dockerfile.aarch64"
|
|
)
|
|
assert build.arch == "aarch64"
|
|
|
|
|
|
async def test_build_valid(coresys: CoreSys, install_addon_ssh: Addon):
|
|
"""Test platform set in docker args."""
|
|
build = await AddonBuild(coresys, install_addon_ssh).load_config()
|
|
with (
|
|
patch.object(
|
|
type(coresys.arch), "supported", new=PropertyMock(return_value=["aarch64"])
|
|
),
|
|
patch.object(
|
|
type(coresys.arch), "default", new=PropertyMock(return_value="aarch64")
|
|
),
|
|
):
|
|
assert await build.is_valid()
|
|
|
|
|
|
async def test_build_invalid(coresys: CoreSys, install_addon_ssh: Addon):
|
|
"""Test platform set in docker args."""
|
|
build = await AddonBuild(coresys, install_addon_ssh).load_config()
|
|
with (
|
|
patch.object(
|
|
type(coresys.arch), "supported", new=PropertyMock(return_value=["amd64"])
|
|
),
|
|
patch.object(
|
|
type(coresys.arch), "default", new=PropertyMock(return_value="amd64")
|
|
),
|
|
):
|
|
assert not await build.is_valid()
|