123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- 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
|