Skip to content

Commit

Permalink
Merge pull request #3 from SURFscz/add-firefox-browser
Browse files Browse the repository at this point in the history
Add Firefox browser tests
  • Loading branch information
baszoetekouw authored Jun 7, 2024
2 parents b17fb85 + 2d69df9 commit 5cc2865
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 57 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,8 @@ lib/
share/
pyvenv.cfg
config.yml
prd.yml
acc.yml
browser
./*.yml
status/
5 changes: 4 additions & 1 deletion getmonitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ def get(env, command):
test = parse_line('login', f.readline())
login = parse_line('sbs_login', f.readline())
pam = parse_line('pam_weblogin', f.readline())
browser = parse_line('browser', f.readline())

if command == 'time':
return time
Expand All @@ -32,8 +33,10 @@ def get(env, command):
return login
elif command == 'pam':
return pam
elif command == 'browser':
return browser
elif command == 'json':
data = {"time": int(time), "test": test, "login": login, "pam": pam}
data = {"time": int(time), "test": test, "login": login, "pam": pam, "browser": browser}
return json.dumps(data)
except Exception as e:
return f"error: {e}\n"
Expand Down
37 changes: 20 additions & 17 deletions pam-monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@
import re
import traceback

from selenium.webdriver import Remote, ChromeOptions
from selenium.webdriver import Remote, ChromeOptions, FirefoxOptions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.expected_conditions import (staleness_of, presence_of_element_located,
title_contains)
from selenium.webdriver.common.by import By

if len(sys.argv) < 2:
if len(sys.argv) < 3:
sys.exit(sys.argv[0] + " <argument>")

print(f"= READING {sys.argv[1]} ====", file=sys.stderr)
print(f"= READING {sys.argv[1:]} ====", file=sys.stderr)
with open(sys.argv[1], 'r') as f:
try:
config = yaml.load(f, Loader=yaml.FullLoader)
Expand All @@ -38,18 +38,24 @@
xpath_code_element = "//span[@class='value']"


print("= Starting Chrome ===", file=sys.stderr)
options = ChromeOptions()
options.add_argument('--headless')
browser = Remote("http://127.0.0.1:4444", options=options)
send_command = ('POST', '/session/$sessionId/chromium/send_command')
browser.command_executor._commands['SEND_COMMAND'] = send_command
browser.implicitly_wait(1)
wait = WebDriverWait(browser, timeout=2)
browser = sys.argv[2]
print(f"= Starting Browser {browser} ===", file=sys.stderr)
if browser == "chrome":
options = ChromeOptions()
elif browser == "firefox":
options = FirefoxOptions()
else:
print('Bad Browser')
exit

options.add_argument('--headless')

try:
for url, values in config.items():
browser = Remote("http://127.0.0.1:4444", options=options)
browser.implicitly_wait(2)
wait = WebDriverWait(browser, timeout=2)

token = values['token']
account = values['account']
(username, password) = account.split('.')
Expand All @@ -72,14 +78,11 @@
# Wait for SBS health up
status = ""
while status != "UP":
browser.get(health)
state = json.loads(browser.find_element(By.XPATH, "//pre").text)
body = requests.get(health)
state = body.json()
status = state.get("status")
time.sleep(1)

# Clear cookies
browser.execute('SEND_COMMAND', dict(cmd='Network.clearBrowserCookies', params={}))

# Get SBS link page
browser.get(link)

Expand Down Expand Up @@ -137,9 +140,9 @@

print(f"result: {result}", file=sys.stderr)
print("= OK =======", file=sys.stderr)
browser.quit()

print("OK")
browser.quit()

except Exception as e:
tr = traceback.extract_tb(e.__traceback__)[0]
Expand Down
30 changes: 23 additions & 7 deletions run_sram_monitoring.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,28 @@ if [ -z $1 ]; then
exit 1
fi

if [ "$2" != "chrome" ] && [ "$2" != "firefox" ]; then
echo "Warning: browser not set (chrome or firefox)"
echo "Defaulting to chrome"
BROWSER="chrome"
else
BROWSER=$2
fi

ENV=$1
if [ ! -f ${ENV}.yml ]; then
echo "Environment config not available"
exit 1
fi

echo "Starting chrome container"
docker run --shm-size=2g --rm -d --name chrome -p 4444:4444 selenium/standalone-chrome >/dev/null 2>&1
echo "Starting $BROWSER container"
if [ "$BROWSER" = "chrome" ]; then
docker run --shm-size=2g --rm -d --name browser -p 4444:4444 -p 7900:7900 selenium/standalone-chrome >/dev/null 2>&1
fi
if [ "$BROWSER" = "firefox" ]; then
docker run --shm-size=2g --rm -d --name browser -p 4444:4444 -p 7900:7900 selenium/standalone-firefox >/dev/null 2>&1
fi

i=0
while ! curl --output /dev/null --silent --head http://localhost:4444/wd/hub/status; do
echo -n "."
Expand All @@ -31,18 +45,20 @@ LOGFILE="status/${ENV}.log"
date --utc +"%s" > ${LOGFILE}.new

# Service login test
OUTPUT=$(python3 sram_monitoring_test.py ${ENV}.yml)
OUTPUT=$(python3 sram_monitoring_test.py "${ENV}.yml" "$BROWSER")
echo login=$OUTPUT >> ${LOGFILE}.new

# SBS login test
OUTPUT=$(python3 sbs-login.py ${ENV}.yml)
OUTPUT=$(python3 sbs-login.py "${ENV}.yml" "$BROWSER")
echo sbs_login=$OUTPUT >> ${LOGFILE}.new

# PAM weblogin test
OUTPUT=$(python3 pam-monitor.py ${ENV}.yml)
OUTPUT=$(python3 pam-monitor.py "${ENV}.yml" "$BROWSER")
echo pam_weblogin=$OUTPUT >> ${LOGFILE}.new

echo "browser=$BROWSER" >> ${LOGFILE}.new

mv ${LOGFILE}.new ${LOGFILE}

docker stop chrome >/dev/null 2>&1
# echo "Down"
docker stop browser >/dev/null 2>&1
echo "End of $BROWSER test"
39 changes: 22 additions & 17 deletions sbs-login.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python

from selenium.webdriver import Remote, ChromeOptions
from selenium.webdriver import Remote, ChromeOptions, FirefoxOptions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.expected_conditions import (staleness_of, presence_of_element_located,
title_contains)
Expand All @@ -11,11 +11,12 @@
import json
import time
import traceback
import requests

if len(sys.argv) < 2:
if len(sys.argv) < 3:
sys.exit(sys.argv[0] + " <argument>")

print(f"= READING {sys.argv[1]} ====", file=sys.stderr)
print(f"= READING {sys.argv[1:]} ====", file=sys.stderr)
with open(sys.argv[1], 'r') as f:
try:
config = yaml.load(f, Loader=yaml.FullLoader)
Expand All @@ -28,20 +29,26 @@
xpath_login_button = '//button[span[text()="Log in"]]'
xpath_logo = '//a[@class="logo"]//span[text()="Research Access Management"]'

print("= Starting Chrome ===", file=sys.stderr)
options = ChromeOptions()
options.add_argument('--headless')
browser = Remote("http://127.0.0.1:4444", options=options)
send_command = ('POST', '/session/$sessionId/chromium/send_command')
browser.command_executor._commands['SEND_COMMAND'] = send_command
browser.implicitly_wait(1)
wait = WebDriverWait(browser, timeout=2)
browser = sys.argv[2]
print(f"= Starting Browser {browser} ===", file=sys.stderr)
if browser == "chrome":
options = ChromeOptions()
elif browser == "firefox":
options = FirefoxOptions()
else:
print('Bad Browser')
exit

options.add_argument('--headless')

try:
for (url, login) in config.items():
print(url, file=sys.stderr)
for (account, name) in login.items():
browser = Remote("http://127.0.0.1:4444", options=options)
browser.implicitly_wait(2)
wait = WebDriverWait(browser, timeout=2)

(username, password) = account.split('.')
print("============", file=sys.stderr)
print(username, name, file=sys.stderr)
Expand All @@ -54,14 +61,11 @@
# Wait for SBS health up
status = ""
while status != "UP":
browser.get(health)
state = json.loads(browser.find_element(By.XPATH, "//pre").text)
body = requests.get(health)
state = body.json()
status = state.get("status")
time.sleep(1)

# Clear cookies
browser.execute('SEND_COMMAND', dict(cmd='Network.clearBrowserCookies', params={}))

# Get SBS profile page
browser.get(start)

Expand Down Expand Up @@ -98,8 +102,9 @@
# print(f"a.text: {a.text}")
assert (name in [a.text for a in attributes]), "No valid admin profile found"
print("= OK =======", file=sys.stderr)
browser.quit()

print("OK")
browser.quit()
print("============", file=sys.stderr)
exit(0)

Expand Down
34 changes: 19 additions & 15 deletions sram_monitoring_test.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python

from selenium.webdriver import Remote, ChromeOptions
from selenium.webdriver import Remote, ChromeOptions, FirefoxOptions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.expected_conditions import (staleness_of, presence_of_element_located,
title_contains)
Expand All @@ -10,38 +10,43 @@
import yaml
import json

if len(sys.argv) < 2:
if len(sys.argv) < 3:
sys.exit(sys.argv[0] + " <argument>")

print(f"= READING {sys.argv[1]} ====", file=sys.stderr)
print(f"= READING {sys.argv[1:]} ====", file=sys.stderr)
with open(sys.argv[1], 'r') as f:
try:
config = yaml.load(f, Loader=yaml.FullLoader)
except yaml.YAMLError as exc:
print(exc)


KEY = 'sram_monitoring'
config = config[KEY]

print("= Starting Chrome ===", file=sys.stderr)
options = ChromeOptions()
browser = sys.argv[2]
print(f"= Starting Browser {browser} ===", file=sys.stderr)
if browser == "chrome":
options = ChromeOptions()
elif browser == "firefox":
options = FirefoxOptions()
else:
print('Bad Browser')
exit

options.add_argument('--headless')
browser = Remote("http://127.0.0.1:4444/wd/hub", options=options)
send_command = ('POST', '/session/$sessionId/chromium/send_command')
browser.command_executor._commands['SEND_COMMAND'] = send_command
browser.implicitly_wait(1)
wait = WebDriverWait(browser, timeout=1)


def test_user(start, user, userinfo):
browser = Remote("http://127.0.0.1:4444/wd/hub", options=options)
browser.implicitly_wait(2)
wait = WebDriverWait(browser, timeout=2)

print("============", file=sys.stderr)
print(f"user: {user}", file=sys.stderr)
print(f"userinfo: {userinfo}", file=sys.stderr)

try:
# Clear cookies
browser.execute('SEND_COMMAND', dict(cmd='Network.clearBrowserCookies', params={}))

# Start browser on RP
browser.get(start)

Expand Down Expand Up @@ -98,6 +103,7 @@ def test_user(start, user, userinfo):
exit(0)

print("= OK =======", file=sys.stderr)
browser.quit()


user = {}
Expand All @@ -109,6 +115,4 @@ def test_user(start, user, userinfo):
user['password'] = password
test_user(startpage, user, userinfo)

# Close browser
browser.quit()
print('OK')

0 comments on commit 5cc2865

Please sign in to comment.