def test_inf_addresources_without_credentials(self): """Deploy single virtual machine without credentials to check that it raises the correct exception.""" radl = RADL() radl.add( system( "s0", [Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er")])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure("", auth0) vms = IM.AddResource(infId, str(radl), auth0) self.assertEqual(vms, [0]) res = IM.GetInfrastructureState(infId, auth0) self.assertEqual(res['state'], VirtualMachine.FAILED) res = IM.GetVMContMsg(infId, 0, auth0) self.assertEqual(res, ( "Error launching the VMs of type s0 to cloud ID cloud0 of type Dummy." " No username for deploy: s0\n")) IM.DestroyInfrastructure(infId, auth0)
def test_inf_addresources0(self): """Deploy single virtual machines and test reference.""" radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure("", auth0) vms = IM.AddResource(infId, str(radl), auth0) self.assertEqual(vms, [0]) # Test references radl = RADL() radl.add(system("s0", reference=True)) radl.add(deploy("s0", 1)) vms = IM.AddResource(infId, str(radl), auth0) self.assertEqual(vms, [1]) IM.DestroyInfrastructure(infId, auth0)
def RESTCreateInfrastructure(): try: auth = get_auth_header() except: return return_error(401, "No authentication data provided") try: content_type = get_media_type('Content-Type') radl_data = bottle.request.body.read() if content_type: if "application/json" in content_type: radl_data = parse_radl_json(radl_data) elif "text/plain" in content_type or "*/*" in content_type or "text/*" in content_type: content_type = "text/plain" else: return return_error(415, "Unsupported Media Type %s" % content_type) inf_id = InfrastructureManager.CreateInfrastructure(radl_data, auth) bottle.response.headers['InfID'] = inf_id bottle.response.content_type = "text/uri-list" protocol = "http://" if Config.REST_SSL: protocol = "https://" res = protocol + \ bottle.request.environ['HTTP_HOST'] + \ "/infrastructures/" + str(inf_id) return format_output(res, "text/uri-list", "uri") except InvaliddUserException, ex: return return_error(401, "Error Getting Inf. info: " + str(ex))
def test_altervm(self): """Test AlterVM""" radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("cpu.count", "=", 1), Feature("memory.size", "=", 512, "M"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure(str(radl), auth0) radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("cpu.count", "=", 2), Feature("memory.size", "=", 1024, "M"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) radl_info = IM.AlterVM(infId, "0", str(radl), auth0) parsed_radl_info = parse_radl(str(radl_info)) self.assertEqual(parsed_radl_info.systems[0].getValue("cpu.count"), 2) self.assertEqual( parsed_radl_info.systems[0].getFeature('memory.size').getValue( 'M'), 1024) IM.DestroyInfrastructure(infId, auth0)
def test_create_disk_snapshot(self): """Test CreateDiskSnapshot """ radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) new_url = "mock0://linux.for.ev.er/test" cloud0 = self.get_cloud_connector_mock("MyMock0") cloud0.create_snapshot = Mock(return_value=(True, new_url)) self.register_cloudconnector("Mock0", cloud0) auth0 = self.getAuth([0], [], [("Mock0", 0)]) infId = IM.CreateInfrastructure(str(radl), auth0) InfrastructureList.infrastructure_list[infId].vm_list[ 0].cloud_connector = cloud0 res = IM.CreateDiskSnapshot(infId, 0, 0, "test", True, auth0) self.assertEqual(res, new_url) self.assertEqual(cloud0.create_snapshot.call_count, 1)
def test_inf_cloud_order(self, suds_cli): """Test cloud selection in base of the auth data order.""" n0, n1 = 1, 1 # Machines to deploy radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("cpu.count", "=", 1), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", n0)) radl.add( system("s1", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("cpu.count", "=", 1), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s1", n1)) cloud0 = self.get_cloud_connector_mock("MyMock0") self.register_cloudconnector("Mock0", cloud0) cloud1 = self.get_cloud_connector_mock("MyMock1") self.register_cloudconnector("Mock1", cloud1) auth0 = self.getAuth([0], [0], [("Mock0", 0), ("Mock1", 1)]) infId = IM.CreateInfrastructure(str(radl), auth0) self.assertEqual(cloud0.launch.call_count, n0 + n1) IM.DestroyInfrastructure(infId, auth0)
def test_inf_auth_with_userdb(self): """Test access im with user db""" Config.USER_DB = os.path.dirname( os.path.realpath(__file__)) + '/../files/users.txt' auth0 = self.getAuth([0]) infId0 = IM.CreateInfrastructure("", auth0) IM.DestroyInfrastructure(infId0, auth0) auth1 = self.getAuth([1]) with self.assertRaises(Exception) as ex: IM.CreateInfrastructure("", auth1) self.assertEqual(str(ex.exception), "Invalid InfrastructureManager credentials") Config.USER_DB = None
def test_create_async(self): """Create Inf. async""" radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) cloud = type("MyMock0", (CloudConnector, object), {}) cloud.launch = Mock(side_effect=self.sleep_and_create_vm) cloud.finalize = Mock(return_value=(True, "")) self.register_cloudconnector("Mock", cloud) auth0 = self.getAuth([0], [], [("Mock", 0)]) before = int(time.time()) infId = IM.CreateInfrastructure(str(radl), auth0, True) delay = int(time.time()) - before self.assertLess(delay, 2) time.sleep(6) IM.DestroyInfrastructure(infId, auth0)
def test_inf_auth(self): """Try to access not owned Infs.""" auth0, auth1 = self.getAuth([0]), self.getAuth([1]) infId0 = IM.CreateInfrastructure("", auth0) infId1 = IM.CreateInfrastructure("", auth1) with self.assertRaises(Exception) as ex: IM.DestroyInfrastructure(infId0, auth1) self.assertEqual(str(ex.exception), "Access to this infrastructure not granted.") with self.assertRaises(Exception) as ex: IM.DestroyInfrastructure(infId1, auth0) self.assertEqual(str(ex.exception), "Access to this infrastructure not granted.") IM.DestroyInfrastructure(infId0, auth0) IM.DestroyInfrastructure(infId1, auth1)
def test_inf_auth(self): """Create infrastructure with empty RADL.""" auth0, auth1 = self.getAuth([0]), self.getAuth([1]) infId0 = IM.CreateInfrastructure("", auth0) infId1 = IM.CreateInfrastructure("", auth1) with self.assertRaises(Exception) as ex: IM.DestroyInfrastructure(infId0, auth1) self.assertEqual(str(ex.exception), "Invalid infrastructure ID or access not granted.") with self.assertRaises(Exception) as ex: IM.DestroyInfrastructure(infId1, auth0) self.assertEqual(str(ex.exception), "Invalid infrastructure ID or access not granted.") IM.DestroyInfrastructure(infId0, auth0) IM.DestroyInfrastructure(infId1, auth1)
def test_start_stop(self): """Test Start and Stop operations""" radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure(str(radl), auth0) res = IM.StopInfrastructure(infId, auth0) self.assertEqual(res, "") res = IM.StartInfrastructure(infId, auth0) self.assertEqual(res, "") res = IM.StartVM(infId, "0", auth0) self.assertEqual(res, "") res = IM.StopVM(infId, "0", auth0) self.assertEqual(res, "") IM.DestroyInfrastructure(infId, auth0)
def test_get_infrastructure_list(self): """Get infrastructure List.""" auth0 = self.getAuth([0]) infId = IM.CreateInfrastructure("", auth0) inf_ids = IM.GetInfrastructureList(auth0) self.assertEqual(inf_ids, [infId]) IM.DestroyInfrastructure(infId, auth0)
def test_get_vm_info(self): """ Test GetVMInfo and GetVMProperty and GetVMContMsg and GetInfrastructureRADL and GetInfrastructureContMsg and GetInfrastructureState. """ radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure(str(radl), auth0) radl_info = IM.GetVMInfo(infId, "0", auth0) parsed_radl_info = parse_radl(str(radl_info)) self.assertEqual(parsed_radl_info.systems[0].getValue("state"), "running") radl_info = IM.GetVMInfo(infId, "0", auth0, True) parsed_radl_info = parse_radl_json(radl_info) self.assertEqual(parsed_radl_info.systems[0].getValue("state"), "running") state = IM.GetVMProperty(infId, "0", "state", auth0) self.assertEqual(state, "running") contmsg = IM.GetVMContMsg(infId, "0", auth0) self.assertEqual(contmsg, "") InfrastructureList.infrastructure_list[infId].cont_out = "Header" InfrastructureList.infrastructure_list[infId].vm_list[ 0].cloud_connector = MagicMock() InfrastructureList.infrastructure_list[infId].vm_list[ 0].cloud_connector.error_messages = "TESTMSG" contmsg = IM.GetInfrastructureContMsg(infId, auth0) header_contmsg = IM.GetInfrastructureContMsg(infId, auth0, True) InfrastructureList.infrastructure_list[infId].vm_list[ 0].cloud_connector = None self.assertIn("TESTMSG", contmsg) self.assertNotIn("TESTMSG", header_contmsg) self.assertIn("Header", header_contmsg) state = IM.GetInfrastructureState(infId, auth0) self.assertEqual(state["state"], "running") self.assertEqual(state["vm_states"]["0"], "running") radl_info = IM.GetInfrastructureRADL(infId, auth0) parsed_radl_info = parse_radl(str(radl_info)) self.assertEqual( parsed_radl_info.systems[0].getValue( "disk.0.os.credentials.username"), "user") IM.DestroyInfrastructure(infId, auth0)
def RESTCreateInfrastructure(): try: auth = get_auth_header() except Exception: return return_error(401, "No authentication data provided") try: content_type = get_media_type('Content-Type') radl_data = bottle.request.body.read().decode("utf-8") tosca_data = None async_call = False if "async" in bottle.request.params.keys(): str_ctxt = bottle.request.params.get("async").lower() if str_ctxt in ['yes', 'true', '1']: async_call = True elif str_ctxt in ['no', 'false', '0']: async_call = False else: return return_error(400, "Incorrect value in async parameter") if content_type: if "application/json" in content_type: radl_data = parse_radl_json(radl_data) elif "text/yaml" in content_type: tosca_data = Tosca(radl_data) _, radl_data = tosca_data.to_radl() elif "text/plain" in content_type or "*/*" in content_type or "text/*" in content_type: content_type = "text/plain" else: return return_error(415, "Unsupported Media Type %s" % content_type) inf_id = InfrastructureManager.CreateInfrastructure( radl_data, auth, async_call) # Store the TOSCA document if tosca_data: sel_inf = InfrastructureManager.get_infrastructure(inf_id, auth) sel_inf.extra_info['TOSCA'] = tosca_data bottle.response.headers['InfID'] = inf_id bottle.response.content_type = "text/uri-list" res = get_full_url('/infrastructures/%s' % inf_id) return format_output(res, "text/uri-list", "uri") except InvaliddUserException as ex: return return_error(401, "Error Getting Inf. info: %s" % get_ex_error(ex)) except DisabledFunctionException as ex: return return_error(403, "Error Destroying Inf: %s" % get_ex_error(ex)) except Exception as ex: logger.exception("Error Creating Inf.") return return_error(400, "Error Creating Inf.: %s" % get_ex_error(ex))
def test_contextualize(self): """Test Contextualization process""" radl = """" network publica (outbound = 'yes') system front ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'publica' and net_interface.0.ip = '10.0.0.1' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' and disk.1.size=1GB and disk.1.device='hdb' and disk.1.fstype='ext4' and disk.1.mount_path='/mnt/disk' and disk.0.applications contains (name = 'ansible.modules.micafer.hadoop') and disk.0.applications contains (name='gmetad') and disk.0.applications contains (name='wget') ) deploy front 1 """ auth0 = self.getAuth([0], [], [("Mock", 0)]) IM._reinit() Config.PLAYBOOK_RETRIES = 1 Config.CONTEXTUALIZATION_DIR = os.path.dirname( os.path.realpath(__file__)) + "/../contextualization" cloud0 = self.get_cloud_connector_mock("MyMock") self.register_cloudconnector("Mock", cloud0) infId = IM.CreateInfrastructure(str(radl), auth0) time.sleep(20) state = IM.GetInfrastructureState(infId, auth0) self.assertEqual(state["state"], "unconfigured") IM.infrastructure_list[infId].ansible_configured = True IM.Reconfigure(infId, "", auth0) time.sleep(20) state = IM.GetInfrastructureState(infId, auth0) self.assertEqual(state["state"], "running") IM.DestroyInfrastructure(infId, auth0)
def test_inf_creation2(self): """Create infrastructure with an incorrect RADL in two cloud providers and the first fails.""" radl = """" network publica (outbound = 'yes') network privada () system front ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'publica' and net_interface.1.connection = 'privada' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' ) system wn ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'privada' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' ) deploy front 1 deploy wn 1 """ cloud0 = self.get_cloud_connector_mock("MyMock0") self.register_cloudconnector("Mock0", cloud0) cloud1 = type("MyMock1", (CloudConnector, object), {}) cloud1.launch = Mock(return_value=[(False, "Error")]) self.register_cloudconnector("Mock1", cloud1) auth0 = self.getAuth([0], [], [("Mock1", 1), ("Mock0", 0)]) infId = IM.CreateInfrastructure(radl, auth0) self.assertEqual(cloud0.launch.call_count, 2) self.assertEqual(cloud1.launch.call_count, 1) for call, _ in cloud0.launch.call_args_list: self.assertEqual(call[3], 1) for call, _ in cloud1.launch.call_args_list: self.assertEqual(call[3], 1) IM.DestroyInfrastructure(infId, auth0)
def test_inf_creation_addition_clouds(self): """Add resources infrastructure with an incorrect RADL with 2 clouds.""" radl = """" network publica (outbound = 'yes') network privada () system front ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'publica' and net_interface.1.connection = 'privada' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' ) system wn ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'privada' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' ) deploy front 1 cloud0 deploy wn 1 """ auth0 = self.getAuth([0], [], [("Dummy", 0), ("Dummy", 1)]) infId = IM.CreateInfrastructure(radl, auth0) radl = """ network privada system wn deploy wn 1 cloud1 """ with self.assertRaises(Exception) as ex: _ = IM.AddResource(infId, radl, auth0) self.assertIn( "Two deployments that have to be launched in the same cloud provider" " are asked to be deployed in different cloud providers", str(ex.exception))
def test_export_import(self): """Test ExportInfrastructure and ImportInfrastructure operations""" radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure(str(radl), auth0) res = IM.ExportInfrastructure(infId, True, auth0) new_inf_id = IM.ImportInfrastructure(res, auth0) IM.DestroyInfrastructure(new_inf_id, auth0)
def test_inf_removeresources(self): """Deploy 4 VMs and remove 2""" radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 4)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure(str(radl), auth0) cont = IM.RemoveResource(infId, ['0', '1'], auth0) self.assertEqual(cont, 2) vms = IM.GetInfrastructureInfo(infId, auth0) self.assertEqual(sorted(vms), ['2', '3']) IM.DestroyInfrastructure(infId, auth0)
def test_reconfigure(self): """Reconfigure.""" radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure(str(radl), auth0) reconf_radl = """configure test (\n@begin\n---\n - tasks:\n - debug: msg="RECONFIGURERADL"\n@end\n)""" IM.Reconfigure(infId, reconf_radl, auth0) IM.Reconfigure(infId, reconf_radl, auth0, ['0']) IM.DestroyInfrastructure(infId, auth0)
def test_inf_addresources_without_credentials(self): """Deploy single virtual machine without credentials to check that it raises the correct exception.""" radl = RADL() radl.add( system( "s0", [Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er")])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure("", auth0) with self.assertRaises(Exception) as ex: IM.AddResource(infId, str(radl), auth0) self.assertIn("No username", str(ex.exception)) IM.DestroyInfrastructure(infId, auth0)
def test_inf_addresources2(self): """Deploy independent virtual machines in two cloud providers.""" n0, n1 = 2, 5 # Machines to deploy radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add( system("s1", [ Feature("disk.0.image.url", "=", "mock1://wind.ows.suc.kz"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.private_key", "=", "private_key") ])) radl.add(deploy("s0", n0)) radl.add(deploy("s1", n1)) Config.MAX_SIMULTANEOUS_LAUNCHES = 10 def concreteSystem(s, cloud_id): url = s.getValue("disk.0.image.url") return [s.clone()] if url.partition(":")[0] == cloud_id else [] cloud0 = self.get_cloud_connector_mock("MyMock0") cloud0.concreteSystem = lambda _0, s, _1: concreteSystem(s, "mock0") self.register_cloudconnector("Mock0", cloud0) cloud1 = self.get_cloud_connector_mock("MyMock1") cloud1.concreteSystem = lambda _0, s, _1: concreteSystem(s, "mock1") self.register_cloudconnector("Mock1", cloud1) auth0 = self.getAuth([0], [], [("Mock0", 0), ("Mock1", 1)]) infId = IM.CreateInfrastructure("", auth0) vms = IM.AddResource(infId, str(radl), auth0) self.assertEqual(len(vms), n0 + n1) self.assertEqual(cloud0.launch.call_count, n0) self.assertEqual(cloud1.launch.call_count, n1) for call, _ in cloud0.launch.call_args_list + cloud1.launch.call_args_list: self.assertEqual(call[3], 1) IM.DestroyInfrastructure(infId, auth0)
def test_inf_addresources3(self, suds_cli): """Test cloud selection.""" n0, n1 = 2, 5 # Machines to deploy radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), SoftFeatures(10, [Feature("memory.size", "<=", 500)]), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add( system("s1", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), SoftFeatures(10, [Feature("memory.size", ">=", 800)]), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", n0)) radl.add(deploy("s1", n1)) Config.MAX_SIMULTANEOUS_LAUNCHES = 10 def concreteSystem(s, mem): return [system(s.name, [Feature("memory.size", "=", mem)])] cloud0 = self.get_cloud_connector_mock("MyMock0") cloud0.concreteSystem = lambda _0, s, _1: concreteSystem(s, 500) self.register_cloudconnector("Mock0", cloud0) cloud1 = self.get_cloud_connector_mock("MyMock1") cloud1.concreteSystem = lambda _0, s, _1: concreteSystem(s, 1000) self.register_cloudconnector("Mock1", cloud1) auth0 = self.getAuth([0], [0], [("Mock0", 0), ("Mock1", 1)]) infId = IM.CreateInfrastructure("", auth0) vms = IM.AddResource(infId, str(radl), auth0) self.assertEqual(len(vms), n0 + n1) self.assertEqual(cloud0.launch.call_count, n0) self.assertEqual(cloud1.launch.call_count, n1) for call, _ in cloud0.launch.call_args_list + cloud1.launch.call_args_list: self.assertEqual(call[3], 1) IM.DestroyInfrastructure(infId, auth0)
def test_get_vm_info(self): """ Test GetVMInfo and GetVMProperty and GetVMContMsg and GetInfrastructureRADL and GetInfrastructureContMsg and GetInfrastructureState. """ radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) auth0 = self.getAuth([0], [], [("Dummy", 0)]) infId = IM.CreateInfrastructure(str(radl), auth0) radl_info = IM.GetVMInfo(infId, "0", auth0) parsed_radl_info = parse_radl(str(radl_info)) self.assertEqual(parsed_radl_info.systems[0].getValue("state"), "running") state = IM.GetVMProperty(infId, "0", "state", auth0) self.assertEqual(state, "running") contmsg = IM.GetVMContMsg(infId, "0", auth0) self.assertEqual(contmsg, "") contmsg = IM.GetInfrastructureContMsg(infId, auth0) state = IM.GetInfrastructureState(infId, auth0) self.assertEqual(state["state"], "running") self.assertEqual(state["vm_states"]["0"], "running") radl_info = IM.GetInfrastructureRADL(infId, auth0) parsed_radl_info = parse_radl(str(radl_info)) self.assertEqual( parsed_radl_info.systems[0].getValue( "disk.0.os.credentials.username"), "user") IM.DestroyInfrastructure(infId, auth0)
def test_inf_addresources1(self): """Deploy n independent virtual machines.""" n = 20 # Machines to deploy Config.MAX_SIMULTANEOUS_LAUNCHES = int(n / 2) # Test the pool radl = RADL() radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", n)) cloud = self.get_cloud_connector_mock() self.register_cloudconnector("Mock", cloud) auth0 = self.getAuth([0], [], [("Mock", 0)]) infId = IM.CreateInfrastructure("", auth0) vms = IM.AddResource(infId, str(radl), auth0) self.assertEqual(len(vms), n) self.assertEqual(cloud.launch.call_count, n) for call, _ in cloud.launch.call_args_list: self.assertEqual(call[3], 1) IM.DestroyInfrastructure(infId, auth0)
def test_inf_addresources4(self): """Deploy a virtual machine when the first cloud provider fails.""" radl = RADL() radl.add( system("s0", [ Feature( "disk.0.image.url", "=", ["mock0://linux.for.ev.er", "mock1://linux.for.ev.er"]), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) radl.add(deploy("s0", 1)) cloud0 = self.get_cloud_connector_mock("MyMock0") self.register_cloudconnector("Mock0", cloud0) cloud1 = type("MyMock1", (CloudConnector, object), {}) cloud1.launch = Mock(return_value=[(False, "Error")]) self.register_cloudconnector("Mock1", cloud1) auth0 = self.getAuth([0], [], [("Mock1", 1), ("Mock0", 0)]) n = 3 Config.MAX_VM_FAILS = n infId = IM.CreateInfrastructure("", auth0) vms = IM.AddResource(infId, str(radl), auth0) Config.MAX_VM_FAILS = 1 self.assertEqual(len(vms), 1) # The first attempt in cloud 0 fails self.assertEqual(cloud0.launch.call_count, 1) # The rest of attempts are in cloud 1 self.assertEqual(cloud1.launch.call_count, n) for call, _ in cloud0.launch.call_args_list: self.assertEqual(call[3], 1) for call, _ in cloud1.launch.call_args_list: self.assertEqual(call[3], 1) IM.DestroyInfrastructure(infId, auth0)
def test_inf_lifecycle(self): """Test Infrastructure lifecycle""" radl = """" network publica (outbound = 'yes') system front ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'publica' and net_interface.0.ip = '10.0.0.1' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' and disk.1.size=1GB and disk.1.device='hdb' and disk.1.fstype='ext4' and disk.1.mount_path='/mnt/disk' and disk.0.applications contains (name = 'ansible.modules.micafer.hadoop') and disk.0.applications contains (name='gmetad') and disk.0.applications contains (name='wget') ) deploy front 1 """ auth0 = self.getAuth([0], [], [("Mock", 0)]) IM._reinit() Config.PLAYBOOK_RETRIES = 1 Config.CONTEXTUALIZATION_DIR = os.path.dirname( os.path.realpath(__file__)) + "/../../contextualization" Config.CONFMAMAGER_CHECK_STATE_INTERVAL = 0.001 cloud0 = self.get_cloud_connector_mock("MyMock") self.register_cloudconnector("Mock", cloud0) infId = IM.CreateInfrastructure(str(radl), auth0) time.sleep(15) state = IM.GetInfrastructureState(infId, auth0) self.assertEqual(state["state"], "unconfigured") InfrastructureList.infrastructure_list[infId].ansible_configured = True IM.Reconfigure(infId, "", auth0) time.sleep(2) state = IM.GetInfrastructureState(infId, auth0) self.assertEqual(state["state"], "running") add_radl = RADL() add_radl.add( system("s0", [ Feature("disk.0.image.url", "=", "mock0://linux.for.ev.er"), Feature("disk.0.os.credentials.username", "=", "user"), Feature("disk.0.os.credentials.password", "=", "pass") ])) add_radl.add(deploy("s0", 1)) vms = IM.AddResource(infId, str(add_radl), auth0) self.assertEqual(vms, [1]) state = IM.GetVMProperty(infId, "1", "state", auth0) self.assertEqual(state, "running") contmsg = IM.GetVMContMsg(infId, "1", auth0) self.assertEqual(contmsg, "") cont = IM.RemoveResource(infId, ['1'], auth0) self.assertEqual(cont, 1) IM.DestroyInfrastructure(infId, auth0)
def test_contextualize(self): """Test Contextualization process""" radl = """" network publica (outbound = 'yes') system front ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'publica' and net_interface.0.dns_name = 'test' and net_interface.0.ip = '10.0.0.1' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' and disk.1.size=1GB and disk.1.device='hdb' and disk.1.fstype='ext4' and disk.1.mount_path='/mnt/disk' and disk.0.applications contains (name = 'ansible.modules.micafer.hadoop') and disk.0.applications contains (name='gmetad') and disk.0.applications contains (name='wget') ) configure step1 ( @begin --- - tasks: - shell: echo "Hi" @end ) configure step2 ( @begin --- - tasks: - shell: echo "Hi" @end ) contextualize ( system front configure step1 step 1 system front configure step2 step 2 ) deploy front 1 """ auth0 = self.getAuth([0], [], [("Mock", 0)]) IM._reinit() Config.PLAYBOOK_RETRIES = 1 Config.CONTEXTUALIZATION_DIR = os.path.dirname( os.path.realpath(__file__)) + "/../../contextualization" Config.CONFMAMAGER_CHECK_STATE_INTERVAL = 0.01 Config.UPDATE_CTXT_LOG_INTERVAL = 1 Config.CHECK_CTXT_PROCESS_INTERVAL = 1 cloud0 = self.get_cloud_connector_mock("MyMock") self.register_cloudconnector("Mock", cloud0) infId = IM.CreateInfrastructure(str(radl), auth0) time.sleep(10) state = IM.GetInfrastructureState(infId, auth0) self.assertEqual(state["state"], "unconfigured") InfrastructureList.infrastructure_list[infId].ansible_configured = True InfrastructureList.infrastructure_list[infId].vm_list[ 0].get_ctxt_log = MagicMock() InfrastructureList.infrastructure_list[infId].vm_list[ 0].get_ctxt_log.return_value = "OK" IM.Reconfigure(infId, "", auth0) time.sleep(5) state = IM.GetInfrastructureState(infId, auth0) self.assertEqual(state["state"], "running") contmsg = IM.GetInfrastructureContMsg(infId, auth0) self.assertGreater(len(contmsg), 150) IM.DestroyInfrastructure(infId, auth0)
def test_inf_creation0(self): """Create infrastructure with empty RADL.""" auth0 = self.getAuth([0]) infId = IM.CreateInfrastructure("", auth0) IM.DestroyInfrastructure(infId, auth0)
def test_inf_addresources5(self): """Deploy n independent virtual machines.""" radl = """" network publica (outbound = 'yes') network privada () system front ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'publica' and net_interface.1.connection = 'privada' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' ) system wn ( cpu.arch='x86_64' and cpu.count>=1 and memory.size>=512m and net_interface.0.connection = 'privada' and disk.0.image.url = 'mock0://linux.for.ev.er' and disk.0.os.credentials.username = '******' and disk.0.os.credentials.password = '******' and disk.0.os.name = 'linux' ) deploy front 1 deploy wn 3 deploy wn 2 """ cloud = type("MyMock0", (CloudConnector, object), {}) cloud.launch = Mock(side_effect=self.sleep_and_create_vm) self.register_cloudconnector("Mock", cloud) auth0 = self.getAuth([0], [], [("Mock", 0)]) infId = IM.CreateInfrastructure("", auth0) # in this case it will take aprox 20 secs before = int(time.time()) Config.MAX_SIMULTANEOUS_LAUNCHES = 1 vms = IM.AddResource(infId, str(radl), auth0) delay = int(time.time()) - before self.assertLess(delay, 17) self.assertGreater(delay, 14) self.assertEqual(len(vms), 6) self.assertEqual(cloud.launch.call_count, 3) self.assertEqual(cloud.launch.call_args_list[0][0][3], 1) self.assertEqual(cloud.launch.call_args_list[1][0][3], 3) self.assertEqual(cloud.launch.call_args_list[2][0][3], 2) cloud = type("MyMock0", (CloudConnector, object), {}) cloud.launch = Mock(side_effect=self.sleep_and_create_vm) self.register_cloudconnector("Mock", cloud) # in this case it will take aprox 5 secs before = int(time.time()) Config.MAX_SIMULTANEOUS_LAUNCHES = 3 # Test the pool vms = IM.AddResource(infId, str(radl), auth0) delay = int(time.time()) - before self.assertLess(delay, 7) self.assertGreater(delay, 4) Config.MAX_SIMULTANEOUS_LAUNCHES = 1 self.assertEqual(len(vms), 6) self.assertEqual(cloud.launch.call_count, 3) self.assertEqual(cloud.launch.call_args_list[0][0][3], 1) self.assertEqual(cloud.launch.call_args_list[1][0][3], 3) self.assertEqual(cloud.launch.call_args_list[2][0][3], 2) IM.DestroyInfrastructure(infId, auth0)