diff --git a/src/Kathara/cli/command/LconfigCommand.py b/src/Kathara/cli/command/LconfigCommand.py index 42246e4d..e925aaf4 100644 --- a/src/Kathara/cli/command/LconfigCommand.py +++ b/src/Kathara/cli/command/LconfigCommand.py @@ -74,7 +74,7 @@ def run(self, current_path: str, argv: List[str]) -> None: Kathara.get_instance().update_lab_from_api(lab) machine_name = args['name'] - device = lab.get_or_new_machine(machine_name) + device = lab.get_machine(machine_name) if args['to_add']: for cd in args['to_add']: diff --git a/src/Kathara/manager/docker/DockerMachine.py b/src/Kathara/manager/docker/DockerMachine.py index 3508f2e5..71f2be1e 100644 --- a/src/Kathara/manager/docker/DockerMachine.py +++ b/src/Kathara/manager/docker/DockerMachine.py @@ -17,7 +17,7 @@ from ... import utils from ...event.EventDispatcher import EventDispatcher from ...exceptions import MountDeniedError, MachineAlreadyExistsError, MachineNotFoundError, DockerPluginError, \ - MachineBinaryError + MachineBinaryError, MachineNotRunningError from ...model.Lab import Lab from ...model.Link import Link, BRIDGE_LINK_NAME from ...model.Machine import Machine, MACHINE_CAPABILITIES @@ -317,6 +317,9 @@ def connect_to_link(machine: Machine, link: Link) -> None: DockerPluginError: If Kathara has been left in an inconsistent state. APIError: If the Docker APIs return an error. """ + if not machine.api_object: + raise MachineNotRunningError(machine.name) + machine.api_object.reload() attached_networks = machine.api_object.attrs["NetworkSettings"]["Networks"] diff --git a/src/Kathara/parser/netkit/DepParser.py b/src/Kathara/parser/netkit/DepParser.py index b574243e..3213da39 100644 --- a/src/Kathara/parser/netkit/DepParser.py +++ b/src/Kathara/parser/netkit/DepParser.py @@ -39,7 +39,7 @@ def parse(path: str) -> Optional[List[str]]: dependencies = {} - # Reads lab.dep in memory so it is faster. + # Reads lab.dep in memory, so it is faster. try: with open(lab_dep_path, 'r') as dep_file: dep_mem_file = mmap.mmap(dep_file.fileno(), 0, access=mmap.ACCESS_READ) diff --git a/tests/cli/lconfig_command_test.py b/tests/cli/lconfig_command_test.py index 4b2fa8ee..2ea8d411 100644 --- a/tests/cli/lconfig_command_test.py +++ b/tests/cli/lconfig_command_test.py @@ -10,6 +10,7 @@ from src.Kathara.model.Machine import Machine from src.Kathara.model.Link import Link from src.Kathara.model.Lab import Lab +from src.Kathara.exceptions import MachineNotFoundError @pytest.fixture() @@ -127,6 +128,19 @@ def test_run_remove_two_links(mock_parse_lab, mock_docker_manager, mock_manager_ test_lab.get_or_new_link('B')) +@mock.patch("src.Kathara.manager.Kathara.Kathara.get_instance") +@mock.patch("src.Kathara.manager.docker.DockerManager.DockerManager") +@mock.patch("src.Kathara.parser.netkit.LabParser.LabParser.parse") +def test_run_machine_not_found_error(mock_parse_lab, mock_docker_manager, mock_manager_get_instance, test_lab): + mock_parse_lab.return_value = test_lab + mock_manager_get_instance.return_value = mock_docker_manager + command = LconfigCommand() + with pytest.raises(MachineNotFoundError): + command.run('.', ['-n', 'pc10', '--add', 'A']) + mock_parse_lab.assert_called_once_with(os.getcwd()) + mock_docker_manager.update_lab_from_api.assert_called_once_with(test_lab) + + def test_run_system_exit_error(): command = LconfigCommand() with pytest.raises(SystemExit): diff --git a/tests/manager/docker/docker_manager_test.py b/tests/manager/docker/docker_manager_test.py index a65c7cd7..bf0b798c 100644 --- a/tests/manager/docker/docker_manager_test.py +++ b/tests/manager/docker/docker_manager_test.py @@ -13,7 +13,8 @@ from src.Kathara.utils import generate_urlsafe_hash from src.Kathara.manager.docker.stats.DockerLinkStats import DockerLinkStats from src.Kathara.manager.docker.stats.DockerMachineStats import DockerMachineStats -from src.Kathara.exceptions import MachineNotFoundError, LabNotFoundError, InvocationError, LinkNotFoundError +from src.Kathara.exceptions import MachineNotFoundError, LabNotFoundError, InvocationError, LinkNotFoundError, \ + MachineNotRunningError # @@ -292,6 +293,13 @@ def test_connect_machine_to_link_no_link_lab(docker_manager, default_device, def docker_manager.connect_machine_to_link(default_device, default_link) +def test_connect_machine_to_link_machine_not_running_error(docker_manager, default_device, default_link): + default_device.api_object = None + + with pytest.raises(MachineNotRunningError): + docker_manager.connect_machine_to_link(default_device, default_link) + + # # TEST: disconnect_machine_from_link # diff --git a/tests/parser/lab_parser_test.py b/tests/parser/lab_parser_test.py index e1ef9db6..659c63fa 100644 --- a/tests/parser/lab_parser_test.py +++ b/tests/parser/lab_parser_test.py @@ -2,11 +2,10 @@ import pytest -from src.Kathara.exceptions import MachineCollisionDomainError -from src.Kathara.parser.netkit.LabParser import LabParser - sys.path.insert(0, './') +from src.Kathara.exceptions import MachineCollisionDomainError +from src.Kathara.parser.netkit.LabParser import LabParser def test_one_device(): lab = LabParser.parse("tests/parser/labconf/one_device")