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:
		
					parent
					
						
							
								d229d124e9
							
						
					
				
			
			
				commit
				
					
						06f372e56d
					
				
			
		
					 2 changed files with 54 additions and 39 deletions
				
			
		| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue