def test_2_user_login(self): """Test AuthN as user""" headers = { 'X-OpenAM-Username': '******', 'X-OpenAM-Password': '******', 'Content-Type': 'application/json', 'Accept-API-Version': 'resource=2.0, protocol=1.0' } logger.test_step('User authn REST') response = post(verify=self.amcfg.ssl_verify, url=self.amcfg.rest_authn_url, headers=headers) rest.check_http_status(http_result=response, expected_status=200)
def test_2_update_managed_user(self): """Test to update managed user as admin""" headers = self.idmcfg.get_admin_headers({ 'Content-Type': 'application/json', 'If-Match': '*' }) user_id = self.idmcfg.get_userid_by_name(self.testuser) payload = """[{"operation":"replace", "field":"/telephoneNumber", "value":"15031234567"}]""" logger.test_step('Update test user') response = patch(verify=self.idmcfg.ssl_verify, url=f'{self.idmcfg.rest_managed_user_url}/{user_id}', headers=headers, data=payload) rest.check_http_status(response, expected_status=200)
def test_3_run_recon_to_ldap(self): """Test to run reconciliation to ldap""" headers = self.idmcfg.get_admin_headers({ 'Content-Type': 'application/json' }) params = { '_action': 'recon', 'mapping': 'managedUser_systemLdapAccounts', 'waitForCompletion': 'True' } logger.test_step('Reconciliation') response = post(verify=self.idmcfg.ssl_verify, url=self.idmcfg.idm_url + '/recon', params=params, headers=headers) rest.check_http_status(http_result=response, expected_status=200)
def test_6_user_self_registration(self): """Test to use self service registration as user""" user_data = { "input": { "user": { "userName": "******", "givenName": "rick", "sn": "sutter", "mail": "*****@*****.**", "password": "******", "preferences": { "updates": False, "marketing": False } }, "kba": [ { "answer": "black", "questionId": "1" } ] } } headers = {'Content-Type': 'application/json', 'X-OpenIDM-Username': '******', 'X-OpenIDM-Password': '******', 'Cache-Control': 'no-cache'} params = {'_action': 'submitRequirements'} logger.test_step('Get token') response = post(verify=self.idmcfg.ssl_verify, url=self.idmcfg.rest_selfreg_url, params=params, headers=headers, json=user_data) rest.check_http_status(http_result=response, expected_status=200) token = response.json()["token"] user_data["token"] = token logger.test_step('Self register as user') response = post(verify=self.idmcfg.ssl_verify, url=self.idmcfg.rest_selfreg_url, params=params, headers=headers, json=user_data) rest.check_http_status(http_result=response, expected_status=200) logger.test_step('Expecting success in returned json"') assert (response.json()['status']['success'] is True), "Response's status is not True"
def version(self): """ Return the product version information. :return: Dictionary """ idm_cfg = IDMConfig() logger.info("Get software version of the OpenIDM instance") headers = idm_cfg.get_admin_headers({'Content-Type': 'application/json'}) response = get(verify=idm_cfg.ssl_verify, url=idm_cfg.idm_url + '/info/version', headers=headers) rest.check_http_status(http_result=response, expected_status=200) return {'TITLE': self.product_type, 'DESCRIPTION': self.name, 'VERSION': response.json()['productVersion'], 'REVISION': response.json()['productRevision'], 'DATE': response.json()['productBuildDate']}
def version(self): """ Return the product version information. :return: Dictionary """ amcfg = AMConfig() logger.debug('Get admin token') headers = { 'X-OpenAM-Username': '******', 'X-OpenAM-Password': '******', 'Content-Type': 'application/json', 'Accept-API-Version': 'resource=2.0, protocol=1.0' } response = post(verify=amcfg.ssl_verify, url=amcfg.rest_authn_url, headers=headers) rest.check_http_status(http_result=response, expected_status=200) admin_token = response.json()['tokenId'] logger.debug('Get AM version') headers = { 'Content-Type': 'application/json', 'Accept-API-Version': 'resource=1.0', 'iplanetdirectorypro': admin_token } response = get(verify=amcfg.ssl_verify, url=amcfg.am_url + '/json/serverinfo/version', headers=headers) rest.check_http_status(http_result=response, expected_status=200) version = response.json()['version'] revision = response.json()['revision'] date = response.json()['date'] am_metadata = { 'TITLE': self.product_type, 'DESCRIPTION': self.name, 'VERSION': version, 'REVISION': revision, 'DATE': date } return am_metadata
def test_2_update_managed_user(self): """Test to update managed user as admin""" headers = self.idmcfg.get_admin_headers({ 'Content-Type': 'application/json', 'if-match': '*'}) payload = """{"userName": "******", "telephoneNumber": "6669876987", "givenName": "devopsguy", "description": "Just another user", "sn": "sutter", "mail": "*****@*****.**", "password": "******", "accountStatus": "active"} """ logger.test_step('Update test user') response = put(verify=self.idmcfg.ssl_verify, url=self.idmcfg.rest_managed_user_url + self.testuser, headers=headers, data=payload) rest.check_http_status(http_result=response, expected_status=200)
def get_am_version_info(): am_cfg = AMConfig() logger.info("Get software version of the OpenAM instance") headers = {'X-OpenAM-Username': '******', 'X-OpenAM-Password': '******', 'Content-Type': 'application/json', 'Accept-API-Version': 'resource=2.0, protocol=1.0'} response = post(verify=am_cfg.ssl_verify, url=am_cfg.rest_authn_url, headers=headers) rest.check_http_status(http_result=response, expected_status=200) admin_token = response.json()['tokenId'] logger.info('Get AM version') headers = {'Content-Type': 'application/json', 'Accept-API-Version': 'resource=1.0', 'iplanetdirectorypro': admin_token} response = get(verify=am_cfg.ssl_verify, url=am_cfg.am_url + '/json/serverinfo/version', headers=headers) rest.check_http_status(http_result=response, expected_status=200) version_info = "{} (build: {}, revision: {})".format(response.json()['version'], response.json()['date'], response.json()['revision']) return version_info
def setup_class(cls): """Setup a user that will be tested in user login.""" headers = {'X-OpenAM-Username': '******', 'X-OpenAM-Password': '******', 'Content-Type': 'application/json', 'Accept-API-Version': 'resource=2.0, protocol=1.0'} logger.test_step('Admin login') response = post(verify=cls.amcfg.ssl_verify, url=cls.amcfg.rest_authn_url, headers=headers) rest.check_http_status(http_result=response, expected_status=200) admin_token = response.json()["tokenId"] headers = {'iPlanetDirectoryPro': admin_token, 'Content-Type': 'application/json', 'Accept-API-Version': 'resource=3.0, protocol=2.1'} user_data = {'username': '******', 'userpassword': '******', 'mail': '*****@*****.**'} logger.test_step('Expecting test user to be created - HTTP-201') response = post(verify=cls.amcfg.ssl_verify, url=cls.amcfg.am_url + '/json/realms/root/users/?_action=create', headers=headers, json=user_data) rest.check_http_status(http_result=response, expected_status=201)
def teardown_class(cls): """Delete user rsutter""" headers1 = cls.idmcfg.get_admin_headers({ 'Content-Type': 'application/json' }) logger.test_step('Get user id') response = get(verify=cls.idmcfg.ssl_verify, url=cls.idmcfg.rest_managed_user_url + '?_queryFilter=true', headers=headers1).json() #rest.check_http_status(http_result=response, expected_status=200) _id = response["result"][0]["_id"] headers2 = cls.idmcfg.get_admin_headers({ 'Content-Type': 'application/json', 'if-match': '*', }) logger.test_step('Delete user') response = delete(verify=cls.idmcfg.ssl_verify, url=cls.idmcfg.rest_managed_user_url + '/' + _id, headers=headers2) rest.check_http_status(http_result=response, expected_status=200)
def test_3_oauth2_access_token(self): """Test Oauth2 access token""" headers = { 'X-OpenAM-Username': '******', 'X-OpenAM-Password': '******', 'Content-Type': 'application/json', 'Accept-API-Version': 'resource=2.0, protocol=1.0' } logger.test_step('User authn REST') response = post(verify=self.amcfg.ssl_verify, url=self.amcfg.rest_authn_url, headers=headers) rest.check_http_status(http_result=response, expected_status=200) tokenid = response.json()['tokenId'] cookies = response.cookies params = (('client_id', 'smokeclient'), ('scope', 'cn'), ('state', '1234'), ('redirect_uri', 'https://fake.com'), ('response_type', 'code'), ('realm', self.amcfg.am_realm)) headers = {'Content-Type': 'application/x-www-form-urlencoded'} data = {"decision": "Allow", "csrf": tokenid} logger.test_step('Oauth2 authz REST') response = post(verify=self.amcfg.ssl_verify, url=self.amcfg.rest_oauth2_authz_url, data=data, headers=headers, cookies=cookies, params=params, allow_redirects=False) rest.check_http_status(http_result=response, expected_status=302) location = response.headers['Location'] print(location) auth_code = re.findall('(?<=code=)(.+?)(?=&)', location) data = { 'grant_type': 'authorization_code', 'code': auth_code[0], 'redirect_uri': 'https://fake.com', 'client_id': 'smokeclient' } logger.test_step('Oauth2 get access-token REST') response = post(verify=self.amcfg.ssl_verify, url=self.amcfg.rest_oauth2_access_token_url, data=data, headers=headers) rest.check_http_status(http_result=response, expected_status=200)
def test_access_neu_url(self): """Test if we can access resource without login - allowed by not enforced url""" logger.test_step('Expecting to have access to NEU url') response = get(verify=self.amcfg.ssl_verify, url=self.agent_cfg.agent_url + self.neu_url) rest.check_http_status(http_result=response, expected_status=200)
def test_0_ping(self): """Test if OpenAM is responding on isAlive endpoint""" logger.test_step('Ping OpenAM isAlive.jsp') response = get(verify=self.amcfg.ssl_verify, url=self.amcfg.am_url + '/isAlive.jsp') rest.check_http_status(http_result=response, expected_status=200)
def test_7_user_reset_pw(self): """Test to use self service password reset as user""" current_session = session() headers_init = { 'Content-Type': 'application/json', 'X-OpenIDM-Username': '******', 'X-OpenIDM-Password': '******', 'Cache-Control': 'no-cache', 'X-OpenIDM-NoSession': "true", "Accept-API-Version": "protocol=1.0,resource=1.0" } headers = { 'Content-Type': 'application/json', 'X-OpenIDM-Username': '******', 'X-OpenIDM-Password': '******', 'Cache-Control': 'no-cache' } params = { '_action': 'submitRequirements' } payload1 = { "input": { 'queryFilter': 'userName eq \"rsutter\"' } } logger.test_step('Stage 1 - Try to find user with query for pw reset') response_stage1 = current_session.post(verify=self.idmcfg.ssl_verify, url=self.idmcfg.rest_selfpwreset_url, headers=headers_init, params=params, json=payload1) rest.check_http_status(http_result=response_stage1, expected_status=200) payload2 = { "token": response_stage1.json()["token"], "input": { 'queryFilter': 'userName eq \"rsutter\"' } } logger.test_step('Stage 2 - Query user') response_stage2 = current_session.post(verify=self.idmcfg.ssl_verify, url=self.idmcfg.rest_selfpwreset_url, headers=headers_init, params=params, json=payload2) rest.check_http_status(http_result=response_stage2, expected_status=200) payload3 = { "token": response_stage2.json()["token"], "input": { "answer1": "black" } } logger.test_step('Stage 3 - Answer question') response_stage3 = current_session.post(verify=self.idmcfg.ssl_verify, url=self.idmcfg.rest_selfpwreset_url, headers=headers, params=params, json=payload3) rest.check_http_status(http_result=response_stage3, expected_status=200) payload4 = { "token": response_stage3.json()["token"], "input": { "password": "******" } } logger.test_step('Stage 4 - Password reset') response_stage4 = current_session.post(verify=self.idmcfg.ssl_verify, url=self.idmcfg.rest_selfpwreset_url, headers=headers, params=params, json=payload4) rest.check_http_status(http_result=response_stage4, expected_status=200) current_session.close()