diff options
-rwxr-xr-x | smoketest/scripts/cli/test_container.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/smoketest/scripts/cli/test_container.py b/smoketest/scripts/cli/test_container.py new file mode 100755 index 000000000..f16dbd219 --- /dev/null +++ b/smoketest/scripts/cli/test_container.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import unittest +import json + +from base_vyostest_shim import VyOSUnitTestSHIM + +from vyos.configsession import ConfigSession +from vyos.configsession import ConfigSessionError +from vyos.util import cmd +from vyos.util import process_named_running +from vyos.util import read_file + +base_path = ['container'] +cont_image = 'busybox' +prefix = '192.0.2.0/24' +net_name = 'NET01' +PROCESS_NAME = 'podman' + +def cmd_to_json(command): + c = cmd(command + ' --format=json') + data = json.loads(c)[0] + + return data + + +class TesContainer(VyOSUnitTestSHIM.TestCase): + def setUp(self): + self.cli_set(['interfaces', 'ethernet', 'eth0', 'address', 'dhcp']) + + def tearDown(self): + self.cli_delete(['interfaces', 'ethernet', 'eth0', 'address', 'dhcp']) + self.cli_delete(base_path) + self.cli_commit() + + def test_01_basic_container(self): + cont_name = 'c1' + self.cli_set(base_path + ['name', cont_name, 'image', cont_image]) + self.cli_set(base_path + ['name', cont_name, 'allow-host-networks']) + + # commit changes + self.cli_commit() + + # Check for running process + self.assertTrue(process_named_running(PROCESS_NAME)) + + def test_02_container_network(self): + cont_name = 'c2' + cont_ip = '192.0.2.25' + self.cli_set(base_path + ['network', net_name, 'ipv4-prefix', prefix]) + self.cli_set(base_path + ['name', cont_name, 'image', cont_image]) + self.cli_set(base_path + ['name', cont_name, 'network', net_name, 'address', cont_ip]) + + # commit changes + self.cli_commit() + + n = cmd_to_json(f'sudo podman network inspect {net_name}') + json_subnet = n['plugins'][0]['ipam']['ranges'][0][0]['subnet'] + + c = cmd_to_json(f'sudo podman container inspect {cont_name}') + json_ip = c['NetworkSettings']['Networks'][net_name]['IPAddress'] + + self.assertEqual(json_subnet, prefix) + self.assertEqual(json_ip, cont_ip) + +if __name__ == '__main__': + unittest.main(verbosity=2) |