diff options
author | robot-piglet <robot-piglet@yandex-team.com> | 2024-03-25 09:11:17 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2024-03-25 09:17:48 +0300 |
commit | 4624e4cfd95649270db02616edde8d0ca249b63d (patch) | |
tree | 1c8a43f50533ca759d137f258e42862e8cf5e80f /contrib/python/requests-oauthlib/tests/examples | |
parent | d2d971701bd8377ead5f973c96be81042774bd2a (diff) | |
download | ydb-4624e4cfd95649270db02616edde8d0ca249b63d.tar.gz |
Intermediate changes
Diffstat (limited to 'contrib/python/requests-oauthlib/tests/examples')
-rw-r--r-- | contrib/python/requests-oauthlib/tests/examples/base.py | 106 | ||||
-rw-r--r-- | contrib/python/requests-oauthlib/tests/examples/test_native_spa_pkce_auth0.py | 39 |
2 files changed, 145 insertions, 0 deletions
diff --git a/contrib/python/requests-oauthlib/tests/examples/base.py b/contrib/python/requests-oauthlib/tests/examples/base.py new file mode 100644 index 0000000000..2efa5dd746 --- /dev/null +++ b/contrib/python/requests-oauthlib/tests/examples/base.py @@ -0,0 +1,106 @@ +import os.path +import os +import subprocess +import shlex +import shutil +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.wait import WebDriverWait + + +cwd = os.path.dirname(os.path.realpath(__file__)) + + +class Sample(): + def setUp(self): + super().setUp() + self.proc = None + self.outputs = [] + + def tearDown(self): + super().tearDown() + if self.proc is not None: + self.proc.stdin.close() + self.proc.stdout.close() + self.proc.kill() + + def replaceVariables(self, filein ,fileout, vars): + with open(filein, "rt") as fin: + with open(fileout, "wt") as fout: + for line in fin: + for k, v in vars.items(): + line = line.replace(k, v) + fout.write(line) + + def run_sample(self, filepath, variables): + inpath = os.path.join(cwd, "..", "..", "docs", "examples", filepath) + outpath = os.path.join(cwd, "tmp_{}".format(filepath)) + self.replaceVariables(inpath, outpath, variables) + + self.proc = subprocess.Popen( + [shutil.which("python"), + outpath], + text=True, bufsize=1, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE + ) + + def write(self, string): + self.proc.stdin.write(string) + self.proc.stdin.flush() + + def wait_for_pattern(self, pattern): + try: + while True: + line = self.proc.stdout.readline() + self.outputs.append(line) + if pattern in line: + return line + except subprocess.TimeoutExpired: + self.assertTrue(False, "timeout when looking for output") + + def wait_for_end(self): + try: + outs, err = self.proc.communicate(timeout=10) + self.outputs += filter(lambda x: x != '', outs.split('\n')) + except subprocess.TimeoutExpired: + self.assertTrue(False, "timeout when looking for output") + return self.outputs[-1] + + + +class Browser(): + def setUp(self): + super().setUp() + options = webdriver.ChromeOptions() + options.add_argument("--headless=new") + self.driver = webdriver.Chrome(options=options) + self.user_username = os.environ.get("AUTH0_USERNAME") + self.user_password = os.environ.get("AUTH0_PASSWORD") + + if not self.user_username or not self.user_password: + self.skipTest("auth0 is not configured properly") + + def tearDown(self): + super().tearDown() + self.driver.quit() + + def authorize_auth0(self, authorize_url, expected_redirect_uri): + self.driver.get(authorize_url) + username = self.driver.find_element(By.ID, "username") + password = self.driver.find_element(By.ID, "password") + + wait = WebDriverWait(self.driver, timeout=2) + wait.until(lambda d : username.is_displayed()) + wait.until(lambda d : password.is_displayed()) + + username.clear() + username.send_keys(self.user_username) + password.send_keys(self.user_password) + username.send_keys(Keys.RETURN) + + wait.until(EC.url_contains(expected_redirect_uri)) + return self.driver.current_url + diff --git a/contrib/python/requests-oauthlib/tests/examples/test_native_spa_pkce_auth0.py b/contrib/python/requests-oauthlib/tests/examples/test_native_spa_pkce_auth0.py new file mode 100644 index 0000000000..6ff41e251c --- /dev/null +++ b/contrib/python/requests-oauthlib/tests/examples/test_native_spa_pkce_auth0.py @@ -0,0 +1,39 @@ +import os +import unittest + +from . import base + +class TestNativeAuth0Test(base.Sample, base.Browser, unittest.TestCase): + def setUp(self): + super().setUp() + self.client_id = os.environ.get("AUTH0_PKCE_CLIENT_ID") + self.idp_domain = os.environ.get("AUTH0_DOMAIN") + + if not self.client_id or not self.idp_domain: + self.skipTest("native auth0 is not configured properly") + + def test_login(self): + # redirect_uri is http:// + os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = "1" + + self.run_sample( + "native_spa_pkce_auth0.py", { + "OAUTH_CLIENT_ID": self.client_id, + "OAUTH_IDP_DOMAIN": self.idp_domain, + } + ) + authorize_url = self.wait_for_pattern("https://") + redirect_uri = self.authorize_auth0(authorize_url, "http://") + self.write(redirect_uri) + last_line = self.wait_for_end() + + import ast + response = ast.literal_eval(last_line) + self.assertIn("access_token", response) + self.assertIn("id_token", response) + self.assertIn("scope", response) + self.assertIn("openid", response["scope"]) + self.assertIn("expires_in", response) + self.assertIn("expires_at", response) + self.assertIn("token_type", response) + self.assertEqual("Bearer", response["token_type"]) |