compose-viz/tests/test_parse_file.py
2022-05-21 22:13:48 +08:00

1785 lines
62 KiB
Python

import pytest
from compose_viz.compose import Compose
from compose_viz.extends import Extends
from compose_viz.parser import Parser
from compose_viz.service import Service
from compose_viz.volume import Volume, VolumeType
@pytest.mark.parametrize(
"test_input, expected",
[
(
"tests/in/000001.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
),
]
),
),
(
"tests/in/000010.yaml",
Compose(
[
Service(
name="base",
image="busybox",
),
Service(
name="common",
extends=Extends(service_name="base"),
),
Service(
name="cli",
extends=Extends(service_name="common"),
),
]
),
),
(
"tests/in/000011.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
networks=["admin"],
extends=Extends(service_name="frontend"),
),
Service(
name="backend",
networks=["back-tier", "admin"],
extends=Extends(service_name="frontend"),
),
]
),
),
(
"tests/in/000100.yaml",
Compose(
[
Service(
name="web",
image="build from .",
ports=["8000:5000"],
),
Service(
name="redis",
image="redis:alpine",
),
]
),
),
(
"tests/in/000101.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
ports=["8000:5000"],
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
ports=["8000:5001"],
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
ports=["8000:5010"],
networks=["back-tier", "admin"],
),
]
),
),
(
"tests/in/000110.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
ports=["8000:5000"],
),
Service(
name="monitoring",
extends=Extends(service_name="frontend"),
),
Service(
name="backend",
extends=Extends(service_name="frontend"),
ports=["8000:5001"],
),
]
),
),
(
"tests/in/000111.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
ports=["8000:5000"],
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
networks=["admin"],
extends=Extends(service_name="frontend"),
),
Service(
name="backend",
ports=["8000:5001"],
networks=["back-tier", "admin"],
extends=Extends(service_name="frontend"),
),
]
),
),
(
"tests/in/001000.yaml",
Compose(
[
Service(
name="web",
image="build from .",
depends_on=["db", "redis"],
),
Service(
name="redis",
image="redis",
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/001001.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
depends_on=["monitoring", "backend"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
),
]
),
),
(
"tests/in/001010.yaml",
Compose(
[
Service(
name="web",
depends_on=["db", "redis"],
extends=Extends(service_name="redis"),
),
Service(
name="redis",
image="redis",
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/001011.yaml",
Compose(
[
Service(
name="frontend",
networks=["front-tier", "back-tier"],
depends_on=["monitoring", "backend"],
extends=Extends(service_name="backend"),
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
),
]
),
),
(
"tests/in/001100.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
ports=["8000:5000"],
),
Service(
name="monitoring",
image="awesome/monitoring",
depends_on=["backend"],
ports=["8000:5010"],
),
Service(
name="backend",
image="awesome/backend",
ports=["8000:5001"],
),
]
),
),
(
"tests/in/001101.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
depends_on=["backend"],
ports=["8000:5010"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
),
]
),
),
(
"tests/in/001110.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
ports=["8000:5000"],
),
Service(
name="monitoring",
depends_on=["backend"],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
),
Service(
name="backend",
extends=Extends(service_name="frontend"),
ports=["8000:5001"],
),
]
),
),
(
"tests/in/001111.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
networks=["admin"],
depends_on=["backend"],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
),
]
),
),
(
"tests/in/010000.yaml",
Compose(
[
Service(
name="backend",
image="awesome/backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
),
]
),
),
(
"tests/in/010001.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
),
]
),
),
(
"tests/in/010010.yaml",
Compose(
[
Service(
name="common",
image="busybox",
volumes=[Volume(source="common-volume", target="/var/lib/backup/data:rw")],
),
Service(
name="cli",
extends=Extends(service_name="common"),
volumes=[Volume(source="cli-volume", target="/var/lib/backup/data:ro")],
),
]
),
),
(
"tests/in/010011.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
extends=Extends(service_name="monitoring"),
),
]
),
),
(
"tests/in/010100.yaml",
Compose(
[
Service(
name="backend",
image="awesome/backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
ports=["8000:5000"],
),
]
),
),
(
"tests/in/010101.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
ports=["8000:5000"],
),
]
),
),
(
"tests/in/010110.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
extends=Extends(service_name="monitoring"),
ports=["8000:5000"],
),
]
),
),
(
"tests/in/010111.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
extends=Extends(service_name="monitoring"),
ports=["8000:5000"],
),
]
),
),
(
"tests/in/011000.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
depends_on=["backend"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
),
Service(
name="backend",
image="awesome/backend",
),
]
),
),
(
"tests/in/011001.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
),
]
),
),
(
"tests/in/011010.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
),
]
),
),
(
"tests/in/011011.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
),
]
),
),
(
"tests/in/011100.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
ports=["8000:5000"],
),
Service(
name="monitoring",
image="awesome/monitoring",
ports=["8000:5010"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["backend"],
),
Service(
name="backend",
image="awesome/backend",
ports=["8000:5001"],
),
]
),
),
(
"tests/in/011101.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
ports=["8000:5010"],
),
]
),
),
(
"tests/in/011110.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
),
]
),
),
(
"tests/in/011111.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
extends=Extends(service_name="monitoring"),
ports=["8000:5010"],
),
]
),
),
(
"tests/in/100000.yaml",
Compose(
[
Service(
name="web",
image="build from .",
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/100001.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/100010.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
extends=Extends(service_name="frontend"),
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/100011.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
extends=Extends(service_name="frontend"),
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/100100.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
image="awesome/backend",
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/100101.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/100110.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/100111.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/101000.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
image="awesome/backend",
depends_on=["monitoring"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/101001.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
depends_on=["monitoring"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/101010.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/101011.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/101100.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
image="awesome/backend",
depends_on=["monitoring"],
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/101101.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
depends_on=["monitoring"],
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/101110.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/101111.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/110000.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
links=["db:database"],
),
Service(
name="backend",
image="awesome/backend",
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/110001.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/110010.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
extends=Extends(service_name="frontend"),
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/110011.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
extends=Extends(service_name="frontend"),
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/110100.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
image="awesome/backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/110101.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/110110.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/110111.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/111000.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
depends_on=["backend"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
links=["db:database"],
),
Service(
name="backend",
image="awesome/backend",
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/111001.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/111010.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/111011.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/111100.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
image="awesome/backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/111101.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
image="awesome/backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/111110.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
),
Service(
name="monitoring",
image="awesome/monitoring",
),
Service(
name="backend",
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
(
"tests/in/111111.yaml",
Compose(
[
Service(
name="frontend",
image="awesome/webapp",
networks=["front-tier", "back-tier"],
),
Service(
name="monitoring",
image="awesome/monitoring",
networks=["admin"],
),
Service(
name="backend",
networks=["back-tier", "admin"],
volumes=[
Volume(source="db-data", target="/data"),
Volume(
source="/var/run/postgres/postgres.sock",
target="/var/run/postgres/postgres.sock",
type=VolumeType.bind,
),
],
depends_on=["monitoring"],
extends=Extends(service_name="frontend"),
ports=["8000:5010"],
links=["db:database"],
),
Service(
name="db",
image="postgres",
),
]
),
),
],
)
def test_parse_file(test_input: str, expected: Compose) -> None:
parser = Parser()
actual = parser.parse(test_input)
assert len(actual.services) == len(expected.services)
for actual_service, expected_service in zip(actual.services, expected.services):
assert actual_service.name == expected_service.name
assert actual_service.image == expected_service.image
assert actual_service.ports == expected_service.ports
assert actual_service.networks == expected_service.networks
assert len(actual_service.volumes) == len(expected_service.volumes)
for actual_volume, expected_volume in zip(actual_service.volumes, expected_service.volumes):
assert actual_volume.source == expected_volume.source
assert actual_volume.target == expected_volume.target
assert actual_volume.type == expected_volume.type
assert actual_service.depends_on == expected_service.depends_on
assert actual_service.links == expected_service.links
assert (actual_service.extends is not None) == (expected_service.extends is not None)
if (actual_service.extends is not None) and (expected_service.extends is not None):
assert actual_service.extends.service_name == expected_service.extends.service_name
assert actual_service.extends.from_file == expected_service.extends.from_file