# SPDX-License-Identifier: GPL-2.0

import json
import os
import unittest

from tests.integration.test_podman_compose import podman_compose_path
from tests.integration.test_podman_compose import test_path
from tests.integration.test_utils import RunSubprocessMixin


def compose_yaml_path():
    return os.path.join(os.path.join(test_path(), "ipam_default"), "docker-compose.yaml")


class TestComposeIpamDefault(unittest.TestCase, RunSubprocessMixin):
    def test_ipam_default(self):
        try:
            self.run_subprocess_assert_returncode(
                [podman_compose_path(), "-f", compose_yaml_path(), "up", "-d"],
            )

            output, _ = self.run_subprocess_assert_returncode([
                podman_compose_path(),
                "-f",
                compose_yaml_path(),
                "logs",
            ])
            # when container is created, its command echoes 'ipamtest'
            # BUG: figure out why echo is called twice
            self.assertIn("ipamtest", str(output))

            output, _ = self.run_subprocess_assert_returncode(
                [
                    "podman",
                    "inspect",
                    "ipam_default_testipam_1",
                ],
            )
            network_info = json.loads(output.decode('utf-8'))[0]
            network_name = next(iter(network_info["NetworkSettings"]["Networks"].keys()))

            output, _ = self.run_subprocess_assert_returncode([
                "podman",
                "network",
                "inspect",
                "{}".format(network_name),
            ])
            network_info = json.loads(output.decode('utf-8'))[0]
            # bridge is the default network driver
            self.assertEqual(network_info['driver'], "bridge")
            self.assertEqual(network_info['ipam_options'], {'driver': 'host-local'})
        finally:
            self.run_subprocess_assert_returncode([
                podman_compose_path(),
                "-f",
                compose_yaml_path(),
                "down",
            ])