Fix tests, add remove_public_key

The tests for VitualMachineSerializer were wrong. The manager now
contains a function to remove public keys from a user
This commit is contained in:
modulos 2017-06-01 22:25:10 +02:00
parent d229d124e9
commit 06f372e56d
2 changed files with 54 additions and 39 deletions

View file

@ -479,3 +479,45 @@ class OpenNebulaManager():
except ConnectionError: except ConnectionError:
raise raise
def remove_public_key(self, user, public_key=''):
"""
Args:
user (CustomUser): Dynamicweb user
public_key (string): Public key to be removed to the user
Raises:
KeyDoesNotExistsError: If replace is False and the user already has a
public key
WrongNameError: If no openebula user with this credentials exists
ConnectionError: If the connection to the opennebula server can't be
established
Returns:
True if public_key was removed
"""
try:
open_user = self._get_user(user)
try:
old_key = open_user.template.ssh_public_key
if public_key not in old_key:
raise KeyDoesNotExistsError()
if '\n{}'.format(public_key) in old_key:
public_key = old_key.replace('\n{}'.format(public_key), '')
else:
public_key = old_key.replace(public_key, '')
except AttributeError:
raise KeyDoesNotExistsError()
self.oneadmin_client.call('user.update', open_user.id,
'<CONTEXT><SSH_PUBLIC_KEY>{key}</SSH_PUBLIC_KEY></CONTEXT>'.format(key=public_key))
return True
except WrongNameError:
raise
except ConnectionError:
raise

View file

@ -5,6 +5,7 @@ import string
from django.test import TestCase from django.test import TestCase
from .models import OpenNebulaManager from .models import OpenNebulaManager
from .serializers import VirtualMachineSerializer
from utils.models import CustomUser from utils.models import CustomUser
class OpenNebulaManagerTestCases(TestCase): class OpenNebulaManagerTestCases(TestCase):
@ -105,6 +106,8 @@ class OpenNebulaManagerTestCases(TestCase):
user = self.manager._get_user(self.user) user = self.manager._get_user(self.user)
public_key = 'test' public_key = 'test'
self.manager.add_public_key(self.user, public_key) self.manager.add_public_key(self.user, public_key)
self.manager.add_public_key(self.user, public_key, merge=True)
user.info()
old_public_key = user.template.ssh_public_key old_public_key = user.template.ssh_public_key
self.manager.remove_public_key(self.user, public_key) self.manager.remove_public_key(self.user, public_key)
user.info() user.info()
@ -112,7 +115,8 @@ class OpenNebulaManagerTestCases(TestCase):
# Cleanup # Cleanup
user.delete() user.delete()
self.assertEqual(new_public_key, old_public_key.replace(public_key, '')) self.assertEqual(new_public_key,
old_public_key.replace('{}\n'.format(public_key), '', 1))
def test_requires_ssh_key_for_new_vm(self): def test_requires_ssh_key_for_new_vm(self):
@ -120,49 +124,18 @@ class OpenNebulaManagerTestCases(TestCase):
creating a new vm""" creating a new vm"""
class VirtualMachineTestCase(TestCase): class VirtualMachineSerializerTestCase(TestCase):
def setUp(self): def setUp(self):
"""Define the test client and other test variables.""" """Define the test client and other test variables."""
self.template_name = "Standard" self.manager = OpenNebulaManager(email=None, password=None)
self.base_price = 0.0
self.core_price = 5.0
self.memory_price = 2.0
self.disk_size_price = 0.6
self.cores = 1
self.memory = 1
self.disk_size = 10.0
self.manager = OpenNebulaManager(email=None, password=None, create_user=False)
self.opennebula_id = self.manager.create_template(name=self.template_name,
cores=self.cores,
memory=self.memory,
disk_size=self.disk_size)
self.template = VirtualMachineTemplate(opennebula_id=self.opennebula_id,
base_price=self.base_price,
memory_price=self.memory_price,
core_price=self.core_price,
disk_size_price=self.disk_size_price)
self.template_id = self.template.opennebula_id()
self.opennebula_id = self.manager.create_virtualmachine(template_id=self.template_id)
self.virtualmachine = VirtualMachine(opennebula_id=self.opennebula_id,
template=self.template)
def test_serializer_strips_of_public(self): def test_serializer_strips_of_public(self):
""" Test the serialized object contains no 'public-'.""" """ Test the serialized virtual machine object contains no 'public-'."""
template = self.manager.get_templates().first() for vm in self.manager.get_vms():
serialized = VirtualMachineTemplateSerializer(template) serialized = VirtualMachineSerializer(vm)
self.assertEqual(serialized.data.name, template.name.strip('public-')) self.assertEqual(serialized.data.get('name'), vm.name.strip('public-'))
break
def test_model_can_create_a_virtualmachine(self):
"""Test the virtualmachine model can create a virtualmachine."""
old_count = VirtualMachine.objects.count()
self.virtualmachine.save()
new_count = VirtualMachine.objects.count()
self.assertNotEqual(old_count, new_count)