def mygeni(request): try: user = _validate_and_get_geniuser(request) except LoggedInButFailedGetGeniUserError: return _show_failed_get_geniuser_page(request) total_vessel_credits = interface.get_total_vessel_credits(user) num_acquired_vessels = len(interface.get_acquired_vessels(user)) avail_vessel_credits = interface.get_available_vessel_credits(user) if num_acquired_vessels > total_vessel_credits: percent_total_used = 100 over_vessel_credits = num_acquired_vessels - total_vessel_credits else: percent_total_used = int((num_acquired_vessels * 1.0 / total_vessel_credits * 1.0) * 100.0) over_vessel_credits = 0 # total_vessel_credits, percent_total_used, avail_vessel_credits return direct_to_template(request, 'control/mygeni.html', {'username' : user.username, 'total_vessel_credits' : total_vessel_credits, 'used_vessel_credits' : num_acquired_vessels, 'percent_total_used' : percent_total_used, 'avail_vessel_credits' : avail_vessel_credits, 'over_vessel_credits' : over_vessel_credits})
def myvessels(request, get_form=False, action_summary="", action_detail="", remove_summary=""): try: user = _validate_and_get_geniuser(request) except LoggedInButFailedGetGeniUserError: return _show_failed_get_geniuser_page(request) # get_form of None means don't show the form to acquire vessels. if interface.get_available_vessel_credits(user) == 0: get_form = None elif get_form is False: get_form = forms.gen_get_form(user) # shared vessels that are used by others but which belong to this user (TODO) shvessels = [] # this user's used vessels my_vessels_raw = interface.get_acquired_vessels(user) my_vessels = interface.get_vessel_infodict_list(my_vessels_raw) # this user's number of donations, max vessels, total vessels and free credits my_donations = interface.get_donations(user) my_max_vessels = interface.get_available_vessel_credits(user) my_free_vessel_credits = interface.get_free_vessel_credits_amount(user) my_total_vessel_credits = interface.get_total_vessel_credits(user) for vessel in my_vessels: if vessel["expires_in_seconds"] <= 0: # We shouldn't ever get here, but just in case, let's handle it. vessel["expires_in"] = "Expired" else: days = vessel["expires_in_seconds"] / (3600 * 24) hours = vessel["expires_in_seconds"] / 3600 % 24 minutes = vessel["expires_in_seconds"] / 60 % 60 vessel["expires_in"] = "%dd %dh %dm" % (days, hours, minutes) # return the used resources page constructed from a template return direct_to_template( request, 'control/myvessels.html', { 'username': user.username, 'num_vessels': len(my_vessels), 'my_vessels': my_vessels, 'sh_vessels': shvessels, 'get_form': get_form, 'action_summary': action_summary, 'action_detail': action_detail, 'my_donations': len(my_donations), 'my_max_vessels': my_max_vessels, 'free_vessel_credits': my_free_vessel_credits, 'total_vessel_credits': my_total_vessel_credits, 'remove_summary': remove_summary })
def myvessels(request, get_form=False, action_summary="", action_detail="", remove_summary=""): try: user = _validate_and_get_geniuser(request) except LoggedInButFailedGetGeniUserError: return _show_failed_get_geniuser_page(request) # get_form of None means don't show the form to acquire vessels. if interface.get_available_vessel_credits(user) == 0: get_form = None elif get_form is False: get_form = forms.gen_get_form(user) # shared vessels that are used by others but which belong to this user (TODO) shvessels = [] # this user's used vessels my_vessels_raw = interface.get_acquired_vessels(user) my_vessels = interface.get_vessel_infodict_list(my_vessels_raw) # this user's number of donations, max vessels, total vessels and free credits my_donations = interface.get_donations(user) my_max_vessels = interface.get_available_vessel_credits(user) my_free_vessel_credits = interface.get_free_vessel_credits_amount(user) my_total_vessel_credits = interface.get_total_vessel_credits(user) for vessel in my_vessels: if vessel["expires_in_seconds"] <= 0: # We shouldn't ever get here, but just in case, let's handle it. vessel["expires_in"] = "Expired" else: days = vessel["expires_in_seconds"] / (3600 * 24) hours = vessel["expires_in_seconds"] / 3600 % 24 minutes = vessel["expires_in_seconds"] / 60 % 60 vessel["expires_in"] = "%dd %dh %dm" % (days, hours, minutes) # return the used resources page constructed from a template return direct_to_template(request, 'control/myvessels.html', {'username' : user.username, 'num_vessels' : len(my_vessels), 'my_vessels' : my_vessels, 'sh_vessels' : shvessels, 'get_form' : get_form, 'action_summary' : action_summary, 'action_detail' : action_detail, 'my_donations' : len(my_donations), 'my_max_vessels' : my_max_vessels, 'free_vessel_credits' : my_free_vessel_credits, 'total_vessel_credits' : my_total_vessel_credits, 'remove_summary' : remove_summary})
def get_resource_info(auth): """ <Purpose> Gets a user's acquired vessels over XMLRPC. <Arguments> auth An authorization dict. <Exceptions> None. <Returns> A list of 'info' dictionaries, each 'infodict' contains vessel info. """ geni_user = _auth(auth) user_vessels = interface.get_acquired_vessels(geni_user) return interface.get_vessel_infodict_list(user_vessels)
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)
node = maindb.create_node(node_identifier, ip, 1234, '0.1a', True, 'the owner pubkey', extra_vessel_name) maindb.create_donation(node, geniuser, 'some resource description text') # Create the vessels on these nodes. name = 'testvessel' + username + str(i) vessel = maindb.create_vessel(node, name) # Set the vessel ports. ports = range(1000, 1010) ports.append(geniuser.usable_vessel_port) maindb.set_vessel_ports(vessel, ports) donations = interface.get_donations(geniuser) if len(donations) != INITIAL_DONATION_COUNT: testfailed("The user's donation count doesn't equal their number of donations.") # Make sure they don't have any acquired vessels initially. acquired_vessels = interface.get_acquired_vessels(geniuser) if len(acquired_vessels) > 0: testfailed("The user shouldn't have any acquired vessels.") # Try to acquire vessels when there are none that match what they request. # At this point, we expect the user to have 70 vessel credits (default 10 # plus 6 * 10 for donations). try: interface.acquire_vessels(geniuser, 50, 'wan') except UnableToAcquireResourcesError: pass # This is what we expected. else: testfailed("Didn't throw expected UnableToAcquireResourcesError") # Try to acquire more vessels than the user should be allowed to. try: