def test_renew_some_of_users_vessel(self): # Create a user who will be doing the acquiring. user = maindb.create_user("testuser", "password", "*****@*****.**", "affiliation", "1 2", "2 2 2", "3 4") userport = user.usable_vessel_port vesselcount = 4 # Have every vessel acquisition to the backend request succeed. calls_results = [True] * vesselcount mocklib.mock_backend_acquire_vessel(calls_results) testutil.create_nodes_on_different_subnets(vesselcount, [userport]) # Acquire all of the vessels the user can acquire. vessel_list = interface.acquire_vessels(user, vesselcount, 'rand') renew_vessels_list = vessel_list[:2] not_renewed_vessels_list = vessel_list[2:] interface.renew_vessels(user, renew_vessels_list) now = datetime.datetime.now() timedelta_oneday = datetime.timedelta(days=1) for vessel in renew_vessels_list: self.assertTrue(vessel.date_expires - now > timedelta_oneday) for vessel in not_renewed_vessels_list: self.assertTrue(vessel.date_expires - now < timedelta_oneday)
def test_renew_vessels_dont_belong_to_user(self): # Create a user who will be doing the acquiring. user = maindb.create_user("testuser", "password", "*****@*****.**", "affiliation", "1 2", "2 2 2", "3 4") userport = user.usable_vessel_port # Create a second user. user2 = maindb.create_user("user2", "password", "*****@*****.**", "affiliation", "1 2", "2 2 2", "3 4") vesselcount = 4 # Have every vessel acquisition to the backend request succeed. calls_results = [True] * vesselcount mocklib.mock_backend_acquire_vessel(calls_results) testutil.create_nodes_on_different_subnets(vesselcount, [userport]) # Acquire all of the vessels the user can acquire. vessel_list = interface.acquire_vessels(user, vesselcount, 'rand') release_vessel = vessel_list[0] interface.release_vessels(user, [release_vessel]) # Manually fiddle with one of the vessels to make it owned by user2. user2_vessel = vessel_list[1] user2_vessel.acquired_by_user = user2 user2_vessel.save() # Try to renew all of the originally acquired vessels, including the ones # that were released. We expect these to just be ignored. interface.renew_vessels(user, vessel_list) # Get fresh vessel objects that reflect the renewal. remaining_vessels = interface.get_acquired_vessels(user) release_vessel = maindb.get_vessel(release_vessel.node.node_identifier, release_vessel.name) user2_vessel = maindb.get_vessel(user2_vessel.node.node_identifier, user2_vessel.name) now = datetime.datetime.now() timedelta_oneday = datetime.timedelta(days=1) # Ensure that the vessels the user still has were renewed but that the ones # the user released were ignored (not renewed). for vessel in remaining_vessels: self.assertTrue(vessel.date_expires - now > timedelta_oneday) self.assertTrue(user2_vessel.date_expires - now < timedelta_oneday) self.assertEqual(release_vessel.date_expires, None)
"Invalid data type for handle. Expected str, received " + str(type(handle)), ) # since we're given a list of vessel 'handles', we need to convert them to a # list of actual Vessel objects. try: list_of_vessel_objs = interface.get_vessel_list(vesselhandle_list) except DoesNotExistError, err: # The handle refers to a non-existent vessel. raise xmlrpclib.Fault(FAULTCODE_INVALIDREQUEST, str(err)) except InvalidRequestError, err: # A handle is of an invalid format or the list of vessels is empty. raise xmlrpclib.Fault(FAULTCODE_INVALIDREQUEST, str(err)) try: interface.renew_vessels(geni_user, list_of_vessel_objs) except InvalidRequestError, err: # The vessel exists but isn't valid for this user to use. raise xmlrpclib.Fault(FAULTCODE_INVALIDREQUEST, str(err)) except InsufficientUserResourcesError, err: message = "Vessels cannot be renewed because you are currently" message += " over your vessel credit limit: " message += str(err) raise xmlrpclib.Fault(FAULTCODE_NOTENOUGHCREDITS, message) return 0 @staticmethod @log_function_call def get_resource_info(auth): """
raise xmlrpclib.Fault(FAULTCODE_INVALIDREQUEST, "Invalid data type for handle. Expected str, received " + str(type(handle))) # since we're given a list of vessel 'handles', we need to convert them to a # list of actual Vessel objects. try: list_of_vessel_objs = interface.get_vessel_list(vesselhandle_list) except DoesNotExistError, err: # The handle refers to a non-existent vessel. raise xmlrpclib.Fault(FAULTCODE_INVALIDREQUEST, str(err)) except InvalidRequestError, err: # A handle is of an invalid format or the list of vessels is empty. raise xmlrpclib.Fault(FAULTCODE_INVALIDREQUEST, str(err)) try: interface.renew_vessels(geni_user, list_of_vessel_objs) except InvalidRequestError, err: # The vessel exists but isn't valid for this user to use. raise xmlrpclib.Fault(FAULTCODE_INVALIDREQUEST, str(err)) except InsufficientUserResourcesError, err: message = "Vessels cannot be renewed because you are currently" message += " over your vessel credit limit: " message += str(err) raise xmlrpclib.Fault(FAULTCODE_NOTENOUGHCREDITS, message) return 0 @staticmethod @log_function_call
action_detail = "" try: # Convert handle to vessel object. # Raises a DoesNotExistError if the vessel does not exist. This is more # likely to be an error than an expected case, so we let it bubble up. vessel_handle_list = [request.POST['handle']] vessel_to_renew = interface.get_vessel_list(vessel_handle_list) except DoesNotExistError: action_summary = "Unable to renew vessel: The vessel you are trying to delete does not exist." except InvalidRequestError, err: action_summary = "Unable to renew vessel." action_detail += str(err) else: try: interface.renew_vessels(user, vessel_to_renew) except InvalidRequestError, err: action_summary = "Unable to renew vessel: " + str(err) except InsufficientUserResourcesError, err: action_summary = "Unable to renew vessel: you are currently over your" action_summary += " vessel credit limit." action_detail += str(err) return myvessels(request, False, action_summary=action_summary, action_detail=action_detail) @login_required def renew_all_resources(request):