From 99128e7713519044bf2634228eb9725d24a29304 Mon Sep 17 00:00:00 2001 From: grossmj Date: Fri, 10 Jul 2020 17:44:38 +0930 Subject: [PATCH] Fix Key Error "vendor_id" is missing when configuring GNS3 VM with VirtualBox. Fixes https://github.com/GNS3/gns3-gui/issues/3018 --- gns3server/controller/gns3vm/virtualbox_gns3_vm.py | 2 +- requirements.txt | 2 +- tests/controller/gns3vm/test_virtualbox_gns3_vm.py | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gns3server/controller/gns3vm/virtualbox_gns3_vm.py b/gns3server/controller/gns3vm/virtualbox_gns3_vm.py index bef509dc..874cca36 100644 --- a/gns3server/controller/gns3vm/virtualbox_gns3_vm.py +++ b/gns3server/controller/gns3vm/virtualbox_gns3_vm.py @@ -92,7 +92,7 @@ class VirtualBoxGNS3VM(BaseGNS3VM): raise VirtualBoxError("Can't access to VirtualBox API version:\n{}".format(self._system_properties)) from cpuinfo import get_cpu_info cpu_info = await wait_run_in_executor(get_cpu_info) - vendor_id = cpu_info['vendor_id'] + vendor_id = cpu_info.get('vendor_id_raw') if vendor_id == "GenuineIntel": if parse_version(self._system_properties["API version"]) < parse_version("6_1"): raise VirtualBoxError("VirtualBox version 6.1 or above is required to run the GNS3 VM with nested virtualization enabled on Intel processors") diff --git a/requirements.txt b/requirements.txt index 2fba1cd1..cac7e6a6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,4 @@ sentry-sdk>=0.14.4 psutil==5.7.0 async-timeout==3.0.1 distro>=1.3.0 -py-cpuinfo==6.0.0 +py-cpuinfo==7.0.0 diff --git a/tests/controller/gns3vm/test_virtualbox_gns3_vm.py b/tests/controller/gns3vm/test_virtualbox_gns3_vm.py index 74c4b8b3..eb90dce0 100644 --- a/tests/controller/gns3vm/test_virtualbox_gns3_vm.py +++ b/tests/controller/gns3vm/test_virtualbox_gns3_vm.py @@ -19,6 +19,7 @@ import pytest import asyncio from tests.utils import asyncio_patch, AsyncioMagicMock +from gns3server.utils.asyncio import wait_run_in_executor from unittest.mock import patch from gns3server.controller.gns3vm.virtualbox_gns3_vm import VirtualBoxGNS3VM @@ -65,3 +66,11 @@ GuestMemoryBalloon=0 # res = await gns3vm._look_for_interface("dummy") # assert mock.called # assert res == -1 + + +async def test_cpu_vendor_id(gns3vm): + + from cpuinfo import get_cpu_info + cpu_info = await wait_run_in_executor(get_cpu_info) + vendor_id = cpu_info.get('vendor_id_raw') + assert vendor_id # vendor id should not be empty