API for creating a VM

This commit is contained in:
Julien Duponchelle committed 2016-03-10 21:51:29 +01:00
1 parent 65de1b7b5e
commit 4326d412f9
14 files changed
+405 -48

No files matched your search

+20 -17
View File
@@ -34,35 +34,40 @@ def test_isEnabled(controller):
assert controller.isEnabled()
def test_addHypervisor(controller):
hypervisor1 = Hypervisor("test1")
controller.addHypervisor(hypervisor1)
def test_addHypervisor(controller, async_run):
async_run(controller.addHypervisor("test1"))
assert len(controller.hypervisors) == 1
controller.addHypervisor(Hypervisor("test1"))
async_run(controller.addHypervisor("test1"))
assert len(controller.hypervisors) == 1
controller.addHypervisor(Hypervisor("test2"))
async_run(controller.addHypervisor("test2"))
assert len(controller.hypervisors) == 2
def test_getHypervisor(controller, async_run):
hypervisor = async_run(controller.addHypervisor("test1"))
assert controller.getHypervisor("test1") == hypervisor
with pytest.raises(aiohttp.web.HTTPNotFound):
assert controller.getHypervisor("dsdssd")
def test_addProject(controller, async_run):
uuid1 = str(uuid.uuid4())
project1 = Project(project_id=uuid1)
uuid2 = str(uuid.uuid4())
async_run(controller.addProject(project1))
async_run(controller.addProject(project_id=uuid1))
assert len(controller.projects) == 1
async_run(controller.addProject(Project(project_id=uuid1)))
async_run(controller.addProject(project_id=uuid1))
assert len(controller.projects) == 1
async_run(controller.addProject(Project(project_id=uuid2)))
async_run(controller.addProject(project_id=uuid2))
assert len(controller.projects) == 2
def test_removeProject(controller, async_run):
uuid1 = str(uuid.uuid4())
project1 = Project(project_id=uuid1)
async_run(controller.addProject(project1))
project1 = async_run(controller.addProject(project_id=uuid1))
assert len(controller.projects) == 1
controller.removeProject(project1)
@@ -71,21 +76,19 @@ def test_removeProject(controller, async_run):
def test_addProject_with_hypervisor(controller, async_run):
uuid1 = str(uuid.uuid4())
project1 = Project(project_id=uuid1)
hypervisor = Hypervisor("test1")
hypervisor.post = MagicMock()
controller.addHypervisor(hypervisor)
controller._hypervisors = {"test1": hypervisor }
async_run(controller.addProject(project1))
project1 = async_run(controller.addProject(project_id=uuid1))
hypervisor.post.assert_called_with("/projects", project1)
def test_getProject(controller, async_run):
uuid1 = str(uuid.uuid4())
project = Project(project_id=uuid1)
async_run(controller.addProject(project))
project = async_run(controller.addProject(project_id=uuid1))
assert controller.getProject(uuid1) == project
with pytest.raises(aiohttp.web.HTTPNotFound):
assert controller.getProject("dsdssd")
+9
View File
@@ -16,6 +16,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from unittest.mock import MagicMock
from gns3server.controller.project import Project
@@ -31,3 +33,10 @@ def test_affect_uuid():
def test_json(tmpdir):
p = Project()
assert p.__json__() == {"name": p.name, "project_id": p.id, "temporary": False, "path": None}
def test_addVM(async_run):
hypervisor = MagicMock()
project = Project()
vm = async_run(project.addVM(hypervisor, None, name="test", vm_type="vpcs", startup_config="test.cfg"))
hypervisor.post.assert_called_with('/projects/{}/vpcs/vms'.format(project.id), data={'console': None, 'vm_id': vm.id, 'console_type': 'telnet', 'startup_config': 'test.cfg'})
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env python
#
# Copyright (C) 2016 GNS3 Technologies Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# 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 pytest
import uuid
from unittest.mock import MagicMock
from gns3server.controller.vm import VM
from gns3server.controller.project import Project
@pytest.fixture
def hypervisor():
s = MagicMock()
s.id = "http://test.com:42"
return s
@pytest.fixture
def vm(hypervisor):
project = Project(str(uuid.uuid4()))
vm = VM(project, hypervisor,
name="demo",
vm_id=str(uuid.uuid4()),
vm_type="vpcs",
console_type="vnc")
return vm
def test_json(vm, hypervisor):
assert vm.__json__() == {
"hypervisor_id": hypervisor.id,
"vm_id": vm.id,
"vm_type": vm.vm_type,
"name": "demo",
"console": vm.console,
"console_type": vm.console_type,
"properties": vm.properties
}
def test_init_without_uuid(project, hypervisor):
vm = VM(project, hypervisor,
vm_type="vpcs",
console_type="vnc")
assert vm.id is not None
def test_create(vm, hypervisor, project, async_run):
async_run(vm.create())
data = {
"console": None,
"console_type": "vnc",
"vm_id": vm.id
}
hypervisor.post.assert_called_with("/projects/{}/vpcs/vms".format(vm.project.id), data=data)