| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  | import random | 
					
						
							|  |  |  | import string | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | from django.test import TestCase | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | from .models import OpenNebulaManager | 
					
						
							| 
									
										
										
										
											2017-06-01 22:25:10 +02:00
										 |  |  | from .serializers import VirtualMachineSerializer | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  | from utils.models import CustomUser | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | class OpenNebulaManagerTestCases(TestCase): | 
					
						
							|  |  |  |     """This class defines the test suite for the opennebula manager model.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         """Define the test client and other test variables.""" | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |         self.email = '{}@ungleich.ch'.format(''.join(random.choices(string.ascii_uppercase, k=10))) | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         self.password = ''.join(random.choices(string.ascii_uppercase + string.digits, k=20)) | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |         self.user = CustomUser.objects.create(name='test', email=self.email, | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |                                               password=self.password) | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self.vm_specs = {} | 
					
						
							|  |  |  |         self.vm_specs['cpu'] = 1 | 
					
						
							|  |  |  |         self.vm_specs['memory'] = 2 | 
					
						
							|  |  |  |         self.vm_specs['disk_size'] = 10 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         self.manager = OpenNebulaManager() | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |     def test_connect_to_server(self): | 
					
						
							|  |  |  |         """Test the opennebula manager can connect to a server.""" | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             ver = self.manager.oneadmin_client.version() | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         except: | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |             ver = None | 
					
						
							|  |  |  |         self.assertTrue(ver is not None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_get_user(self): | 
					
						
							|  |  |  |         """Test the opennebula manager can get a existing user.""" | 
					
						
							|  |  |  |         self.manager.create_user(self.user) | 
					
						
							|  |  |  |         user = self.manager._get_user(self.user) | 
					
						
							|  |  |  |         name = user.name | 
					
						
							|  |  |  |         self.assertNotEqual(name, None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_create_and_delete_user(self): | 
					
						
							|  |  |  |         """Test the opennebula manager can create and delete a new user.""" | 
					
						
							| 
									
										
										
										
											2017-05-09 17:15:12 +02:00
										 |  |  |         old_count = len(self.manager._get_user_pool()) | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  |         self.manager = OpenNebulaManager(email=self.email, | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |                                          password=self.password) | 
					
						
							| 
									
										
										
										
											2017-05-11 04:05:58 +02:00
										 |  |  |         user_pool = self.manager._get_user_pool() | 
					
						
							|  |  |  |         new_count = len(user_pool) | 
					
						
							|  |  |  |         # Remove the user afterwards | 
					
						
							|  |  |  |         user = user_pool.get_by_name(self.email) | 
					
						
							|  |  |  |         user.delete() | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  |         self.assertNotEqual(old_count, new_count) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |     def test_user_can_login(self): | 
					
						
							|  |  |  |         """ Test the manager can login to a new created user""" | 
					
						
							|  |  |  |         self.manager.create_user(self.user) | 
					
						
							|  |  |  |         user = self.manager._get_user(self.user) | 
					
						
							|  |  |  |         client = self.manager._get_client(self.user) | 
					
						
							|  |  |  |         version = client.version() | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         # Cleanup | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |         user.delete() | 
					
						
							|  |  |  |         self.assertNotEqual(version, None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_add_public_key_to_user(self): | 
					
						
							|  |  |  |         """ Test the manager can add a new public key to an user """ | 
					
						
							|  |  |  |         self.manager.create_user(self.user) | 
					
						
							|  |  |  |         user = self.manager._get_user(self.user) | 
					
						
							|  |  |  |         public_key = 'test' | 
					
						
							|  |  |  |         self.manager.add_public_key(self.user, public_key) | 
					
						
							|  |  |  |         # Fetch new user information from opennebula | 
					
						
							|  |  |  |         user.info() | 
					
						
							|  |  |  |         user_public_key = user.template.ssh_public_key | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         # Cleanup | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |         user.delete() | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |         self.assertEqual(user_public_key, public_key) | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 19:08:38 +02:00
										 |  |  |     def test_append_public_key_to_user(self): | 
					
						
							|  |  |  |         """ Test the manager can append a new public key to an user """ | 
					
						
							|  |  |  |         self.manager.create_user(self.user) | 
					
						
							|  |  |  |         user = self.manager._get_user(self.user) | 
					
						
							|  |  |  |         public_key = 'test' | 
					
						
							|  |  |  |         self.manager.add_public_key(self.user, public_key) | 
					
						
							|  |  |  |         # Fetch new user information from opennebula | 
					
						
							|  |  |  |         user.info() | 
					
						
							|  |  |  |         old_public_key = user.template.ssh_public_key | 
					
						
							|  |  |  |         self.manager.add_public_key(self.user, public_key, merge=True) | 
					
						
							|  |  |  |         user.info() | 
					
						
							|  |  |  |         new_public_key = user.template.ssh_public_key | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         # Cleanup | 
					
						
							| 
									
										
										
										
											2017-06-01 19:08:38 +02:00
										 |  |  |         user.delete() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         self.assertEqual(new_public_key, '{}\n{}'.format(old_public_key, | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |                                                          public_key)) | 
					
						
							| 
									
										
										
										
											2017-05-10 02:36:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 20:47:11 +02:00
										 |  |  |     def test_remove_public_key_to_user(self): | 
					
						
							|  |  |  |         """ Test the manager can remove a public key from an user """ | 
					
						
							|  |  |  |         self.manager.create_user(self.user) | 
					
						
							|  |  |  |         user = self.manager._get_user(self.user) | 
					
						
							|  |  |  |         public_key = 'test' | 
					
						
							|  |  |  |         self.manager.add_public_key(self.user, public_key) | 
					
						
							| 
									
										
										
										
											2017-06-01 22:25:10 +02:00
										 |  |  |         self.manager.add_public_key(self.user, public_key, merge=True) | 
					
						
							|  |  |  |         user.info() | 
					
						
							| 
									
										
										
										
											2017-06-01 20:47:11 +02:00
										 |  |  |         old_public_key = user.template.ssh_public_key | 
					
						
							|  |  |  |         self.manager.remove_public_key(self.user, public_key) | 
					
						
							|  |  |  |         user.info() | 
					
						
							|  |  |  |         new_public_key = user.template.ssh_public_key | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         # Cleanup | 
					
						
							| 
									
										
										
										
											2017-06-01 20:47:11 +02:00
										 |  |  |         user.delete() | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 22:25:10 +02:00
										 |  |  |         self.assertEqual(new_public_key, | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |                          old_public_key.replace('{}\n'.format(public_key), '', 1)) | 
					
						
							| 
									
										
										
										
											2017-05-10 02:36:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-31 18:01:54 +02:00
										 |  |  |     def test_requires_ssh_key_for_new_vm(self): | 
					
						
							|  |  |  |         """Test the opennebula manager requires the user to have a ssh key when
 | 
					
						
							|  |  |  |         creating a new vm"""
 | 
					
						
							| 
									
										
										
										
											2017-05-10 02:36:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 22:25:10 +02:00
										 |  |  | class VirtualMachineSerializerTestCase(TestCase): | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  |     def setUp(self): | 
					
						
							|  |  |  |         """Define the test client and other test variables.""" | 
					
						
							| 
									
										
										
										
											2017-06-01 22:25:10 +02:00
										 |  |  |         self.manager = OpenNebulaManager(email=None, password=None) | 
					
						
							| 
									
										
										
										
											2017-05-26 23:23:39 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_serializer_strips_of_public(self): | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         """ Test the serialized virtual machine object contains no 'public-'.""" | 
					
						
							| 
									
										
										
										
											2017-05-26 23:23:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 22:25:10 +02:00
										 |  |  |         for vm in self.manager.get_vms(): | 
					
						
							|  |  |  |             serialized = VirtualMachineSerializer(vm) | 
					
						
							|  |  |  |             self.assertEqual(serialized.data.get('name'), vm.name.strip('public-')) | 
					
						
							|  |  |  |             break |