def test_get_value_fault(self): """ Try to fetch a value, when the key doesn't exist. """ self.assertIsNone( dict.get_value(self.zimbra_dict, "key3"), "Unexpected value returned" )
def test_get_value(self): """ Fetch a single value from a zimbra style dictionary """ self.assertEqual( dict.get_value(self.zimbra_dict, "key2"), "value2", "Unexpected value returned" )
def test_get_value_fault(self): """ Try to fetch a value, when the key doesn't exist. """ self.assertIsNone(dict.get_value(self.zimbra_dict, "key3"), "Unexpected value returned")
def test_get_value(self): """ Fetch a single value from a zimbra style dictionary """ self.assertEqual(dict.get_value(self.zimbra_dict, "key2"), "value2", "Unexpected value returned")
def run_admin_test(self, request_type): """ Actually do the work """ config = get_config() if config.getboolean("admin_request_test", "enabled"): # Run only if enabled token = authenticate( config.get("admin_request_test", "admin_url"), config.get("admin_request_test", "admin_account"), config.get("admin_request_test", "admin_password"), config.get("admin_request_test", "admin_account_by"), admin_auth=True, request_type=request_type ) if token is None: self.fail("Authentication with the configured settings " "was not successful") # Create an account comm = Communication(config.get("admin_request_test", "admin_url")) if request_type == "xml": request = RequestXml() else: request = RequestJson() request.set_auth_token(token) test_account = config.get("admin_request_test", "test_account") if "TEMP" in test_account: # Generate a random number and add it to the test account random.seed() temp_account = random.randint(1000000, 5000000) test_account = test_account.replace("TEMP", str(temp_account)) test_displayname = config.get( "admin_request_test", "test_displayname" ) if sys.version < '3': # Create unicode string for py2 test_displayname = test_displayname.decode("utf-8") request.add_request( "CreateAccountRequest", { "name": test_account, "password": config.get( "admin_request_test", "test_password" ), "a": { "n": "displayName", "_content": test_displayname } }, "urn:zimbraAdmin" ) if request_type == "xml": response = ResponseXml() else: response = ResponseJson() comm.send_request(request, response) if response.is_fault(): self.fail( "CreateAccount faulted. (%s) %s" % ( response.get_fault_code(), response.get_fault_message() ) ) account_id = response.get_response( )["CreateAccountResponse"]["account"]["id"] # Get account from database and compare display name to the setting request.clean() request.set_auth_token(token) response.clean() request.add_request( "GetAccountRequest", { "account": { "by": "name", "_content": test_account } }, "urn:zimbraAdmin" ) comm.send_request(request, response) if response.is_fault(): self.fail( "GetAccount faulted. (%s) %s" % ( response.get_fault_code(), response.get_fault_message() ) ) returned_name = get_value( response.get_response()["GetAccountResponse"]["account"]["a"], "displayName" ) self.assertEqual( returned_name, test_displayname, "Zimbra didn't save the display name as requested." ) # Try to log in as the new account user_token = authenticate( config.get("admin_request_test", "url"), test_account, config.get("admin_request_test", "test_password"), "name", request_type=request_type, use_password=True ) if user_token is None: self.fail("Cannot log in as the test user.") # Remove account request.clean() response.clean() request.set_auth_token(token) request.add_request( "DeleteAccountRequest", { "id": account_id }, "urn:zimbraAdmin" ) comm.send_request(request, response) if response.is_fault(): self.fail( "Cannot remove test account: (%s) %s" % ( response.get_fault_code(), response.get_fault_message() ) )
def _get_devices(self, user): self.app.log.debug("Fetching devices of user %s" % user) (local_part, domain_part) = user.split("@") if domain_part not in self.preauth_cache: # No preauth key cached. Fetch one self.app.log.debug("Fetch preauth key for domain %s" % domain_part) comm = Communication(self.url) preauthkey_request = comm.gen_request(token=self.token) preauthkey_request.add_request( "GetDomainRequest", { "domain": { "by": "name", "_content": domain_part } }, "urn:zimbraAdmin" ) preauthkey_response = comm.send_request(preauthkey_request) if preauthkey_response.is_fault(): self.app.log.fatal( "Cannot fetch preauth key for domain %s" % domain_part, preauthkey_response.get_fault_code(), preauthkey_response.get_fault_message(), ) exit(1) preauth = get_value( preauthkey_response.get_response()["GetDomainResponse"][ "domain"]["a"], "zimbraPreAuthKey" ) if preauth is None: self.app.log.fatal( "Domain %s has no preauthkey. Please use zmprov gdpak " "<domain> first." % domain_part ) exit(1) self.preauth_cache[domain_part] = preauth else: preauth = self.preauth_cache[domain_part] user_token = auth.authenticate( self.user_url, user, preauth ) if user_token is None: self.app.log.fatal("Cannot login as user %s" % user) exit(1) user_comm = Communication(self.user_url) get_device_status_request = user_comm.gen_request(token=user_token) get_device_status_request.add_request( "GetDeviceStatusRequest", {}, "urn:zimbraSync" ) get_device_status_response = user_comm.send_request( get_device_status_request) if get_device_status_response.is_fault(): self.app.log.fatal( "Cannot fetch devices for user %s: (%s) %s" % ( user, get_device_status_response.get_fault_code(), get_device_status_response.get_fault_message() ) ) exit(1) devices = [] if "device" in get_device_status_response.get_response()[ "GetDeviceStatusResponse"]: devices = get_device_status_response.get_response()[ "GetDeviceStatusResponse"]["device"] if type(devices) == dict: devices = [devices] return devices
"GetAccountRequest", {"account": {"_content": member, "by": "name"}}, "urn:zimbraAdmin" ) getaccount_response = comm.send_request(getaccount_request) if getaccount_response.is_fault(): logging.error( "Cannot fetch account %s: (%s) %s" % (member, getaccount_response.get_fault_code(), getaccount_response.get_fault_message()) ) exit(1) if ( get_value(getaccount_response.get_response()["GetAccountResponse"]["account"]["a"], "zimbraAccountStatus") != "active" ): # No. Skip it. logging.info("Account %s is inactive. Skipping." % member) continue # Get Preauth key to authenticate for this user (local_part, domain_part) = member.split("@") if domain_part not in preauth_cache: