def test_device_decommissioning(self): """ Decommission a device successfully """ if not env.host_string: execute(self.test_device_decommissioning, hosts=get_mender_clients()) return adm.check_expected_status("pending", len(get_mender_clients())) adm_id = adm.get_devices()[0]["id"] device_id = adm.get_devices()[0]["device_id"] adm.set_device_status(adm_id, "accepted") # wait until inventory is populated timeout = time.time() + (60 * 5) while time.time() < timeout: inventoryJSON = inv.get_devices() if "attributes" in inventoryJSON[0]: break time.sleep(.5) else: assert False, "never got inventory" # decommission actual device deviceauth.decommission(device_id) # now check that the device no longer exists in admissions timeout = time.time() + (60 * 5) while time.time() < timeout: newAdmissions = adm.get_devices()[0] if device_id != newAdmissions["device_id"] \ and adm_id != newAdmissions["id"]: logger.info("device [%s] not found in inventory [%s]" % (device_id, str(newAdmissions))) break else: logger.info("device [%s] found in inventory..." % (device_id)) time.sleep(.5) else: assert False, "decommissioned device still available in admissions" # disabled for time being due to new deployment process # make sure a deployment to the decommissioned device fails # try: # time.sleep(120) # sometimes deployment microservice hasn't removed the device yet # logger.info("attempting to deploy to decommissioned device: %s" % (device_id)) # deployment_id, _ = common_update_procedure(install_image=conftest.get_valid_image(), # devices=[device_id], # verify_status=False) #except AssertionError: # logging.info("Failed to deploy upgrade to rejected device, as expected.") #else: # assert False, "No error while trying to deploy to rejected device" # authtoken has been removed #run("strings /data/mender/mender-store | grep -q 'authtoken' || false") """
def test_device_decommissioning(self): """ Decommission a device successfully """ if not env.host_string: execute(self.test_device_decommissioning, hosts=get_mender_clients()) return adm.check_expected_status("pending", len(get_mender_clients())) adm_id = adm.get_devices()[0]["id"] device_id = adm.get_devices()[0]["device_id"] adm.set_device_status(adm_id, "accepted") # wait until inventory is populated timeout = time.time() + (60 * 5) while time.time() < timeout: inventoryJSON = inv.get_devices() # we haven't gotten an inventory data yet. if len(inventoryJSON) == 0: continue if "attributes" in inventoryJSON[0]: break time.sleep(.5) else: assert False, "never got inventory" # get all completed decommission_device WFs for reference c = Conductor(get_mender_conductor()) initial_wfs = c.get_decommission_device_wfs(device_id) # decommission actual device deviceauth.decommission(device_id) # check that the workflow completed successfully timeout = time.time() + (60 * 5) while time.time() < timeout: wfs = c.get_decommission_device_wfs(device_id) if wfs['totalHits'] == initial_wfs['totalHits'] + 1: break else: logger.info("waiting for decommission_device workflow...") time.sleep(.5) else: assert False, "decommission_device workflow didn't complete for [%s]" % ( device_id, ) # check device gone from inventory self.check_gone_from_inventory(device_id) # check device gone from deviceauth self.check_gone_from_deviceauth(device_id) # now check that the device no longer exists in admission self.check_gone_from_deviceadm(adm_id, device_id)
def test_clients_exclusive_to_user(self): users = [ { "email": "*****@*****.**", "password": "******", "username": "******", "container": "mender-client-exclusive-1", "client_id": "", "device_id": "" }, { "email": "*****@*****.**", "password": "******", "username": "******", "container": "mender-client-exclusive-2", "client_id": "", "device_id": "" } ] for user in users: auth.set_tenant(user["username"], user["email"], user["password"]) t = auth.current_tenant["tenant_token"] new_tenant_client(user["container"], t) adm.accept_devices(1) # get the new devices client_id and setting it to the our test parameter assert len(inv.get_devices()) == 1 user["client_id"] = inv.get_devices()[0]["id"] user["device_id"] = adm.get_devices()[0]["device_id"] for user in users: # make sure that the correct number of clients appear for the given tenant auth.set_tenant(user["username"], user["email"], user["password"]) assert len(inv.get_devices()) == 1 assert inv.get_devices()[0]["id"] == user["client_id"] for user in users: # wait until inventory is populated auth.set_tenant(user["username"], user["email"], user["password"]) deviceauth.decommission(user["client_id"]) timeout = time.time() + (60 * 5) device_id = user["device_id"] while time.time() < timeout: newAdmissions = adm.get_devices()[0] if device_id != newAdmissions["device_id"] \ and user["client_id"] != newAdmissions["id"]: logger.info("device [%s] not found in inventory [%s]" % (device_id, str(newAdmissions))) break else: logger.info("device [%s] found in inventory..." % (device_id)) time.sleep(.5) else: assert False, "decommissioned device still available in admissions"
def test_decommissioning_post_upgrade(self): # assertion error occurs here on decommissioning fail for device in adm.get_devices(10): deviceauth.decommission(device["device_id"])
def test_device_decommissioning(self, standard_setup_one_client): """ Decommission a device successfully """ if not env.host_string: execute(self.test_device_decommissioning, standard_setup_one_client, hosts=get_mender_clients()) return adm.check_expected_status("pending", len(get_mender_clients())) adm_id = adm.get_devices()[0]["id"] device_id = adm.get_devices()[0]["device_id"] adm.set_device_status(adm_id, "accepted") # wait until inventory is populated timeout = time.time() + (60 * 5) while time.time() < timeout: inventoryJSON = inv.get_devices() if "attributes" in inventoryJSON[0]: break time.sleep(.5) else: pytest.fail("never got inventory") # decommission actual device deviceauth.decommission(device_id) # now check that the device no longer exists in admissions timeout = time.time() + (60 * 5) while time.time() < timeout: newAdmissions = adm.get_devices()[0] if device_id != newAdmissions["device_id"] \ and adm_id != newAdmissions["id"]: logger.info("device [%s] not found in inventory [%s]" % (device_id, str(newAdmissions))) break else: logger.info("device [%s] found in inventory..." % (device_id)) time.sleep(.5) else: pytest.fail("decommissioned device still available in admissions") # make sure a deployment to the decommissioned device fails try: time.sleep( 120 ) # sometimes deployment microservice hasn't removed the device yet logger.info("attempting to deploy to decommissioned device: %s" % (device_id)) deployment_id, _ = common_update_procedure( install_image=conftest.get_valid_image(), devices=[device_id], verify_status=False) except AssertionError: logging.info("Failed to deploy upgrade to rejected device") # authtoken has been removed run("strings /data/mender/mender-store | grep -q 'authtoken' || false" ) else: pytest.fail("No error while trying to deploy to rejected device") """ at this point, the device will re-appear, since it's actually still online, and not actually decomissioned """ adm.check_expected_status("pending", len(get_mender_clients())) # make sure inventory is empty as well assert len(inv.get_devices()) == 0