You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
9.1 KiB
Python
288 lines
9.1 KiB
Python
#!/usr/local/monitoring/bin/python
|
|
|
|
import calendar, time, sys, re, os
|
|
sys.path.insert (1, '/usr/local/monitoring/princeton/lib')
|
|
#sys.path.insert (2, '/usr/local/monitoring/python/lib/python2.7/site-packages')
|
|
#sys.path.insert (3, '/usr/local/monitoring/python/lib/python2.7')
|
|
#sys.path.insert (4, '/usr/local/monitoring/python/lib64/python2.6/site-packages')
|
|
#sys.path.insert (5, '/usr/local/monitoring/python/lib/python2.6/site-packages')
|
|
#sys.path.insert (6, '/usr/local/monitoring/python/lib/python2.6/site-packages/selenium-2.48.0-py2.6.egg')
|
|
from puselenium import init_selenium
|
|
|
|
from selenium import webdriver
|
|
from selenium.webdriver.support.ui import WebDriverWait
|
|
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.common import exceptions as EXCEP
|
|
from random import sample, randrange
|
|
|
|
verb = 0
|
|
|
|
def tm (tmconv):
|
|
return time.strftime("%D %H:%M:%S", time.localtime(tmconv))
|
|
|
|
def outp (str, level = 1):
|
|
if verb >= level:
|
|
print "%d: %s" % (level, str)
|
|
#print "%d %d" % (verb, level)
|
|
|
|
def usage ():
|
|
print "Usage: %s <ClearPass host or URL to test> <username> <password> [verbosity=1] [alloted_run_time=180]" % sys.argv[0]
|
|
sys.exit (3)
|
|
|
|
if len (sys.argv) < 4:
|
|
usage
|
|
|
|
url = sys.argv[1]
|
|
usr = sys.argv[2]
|
|
usrpass = sys.argv[3]
|
|
atime = 180
|
|
|
|
if len (sys.argv) > 4:
|
|
verb = int (sys.argv[4])
|
|
if len (sys.argv) > 5:
|
|
atime = int (sys.argv[5])
|
|
|
|
outp ("%s: Starting program" % tm(time.time()), 2)
|
|
|
|
#ff = puselenium.init_selenium (['ims316', 'ims317', 'mon200w', 'mon201w', 'mon202w', 'mon203w'])
|
|
ff, fp = init_selenium ()
|
|
|
|
try:
|
|
### Load initial URL
|
|
t_ini = time.time()
|
|
outp ("%s: Loaded browser" % tm(t_ini), 2)
|
|
#ff.implicitly_wait (10)
|
|
|
|
main_window = ff.current_window_handle
|
|
|
|
outp ("Retrieving URL %s" % url, 1)
|
|
ff.get (url)
|
|
#ff.allowNativeXpath("false");
|
|
|
|
### Check for the sign on page to enter the username
|
|
#try:
|
|
# WebDriverWait (ff, 60).until (EC.title_contains("ClearPass Policy Manager"))
|
|
#except:
|
|
# outp ("Unable to reach the initial ClearPass page", 0)
|
|
# sys.exit (2)
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.XPATH, "//a[contains(.,'ClearPass Guest')]")))
|
|
|
|
t_main = time.time()
|
|
outp ("%s: ClearPass initial page retrieved" % tm(t_main), 2)
|
|
outp ("Clicking on ClearPass Guest", 1)
|
|
ff.find_element_by_xpath ("//a[contains(.,'ClearPass Guest')]").click()
|
|
|
|
except:
|
|
outp ("Unable to locate the ClearPass Guest link", 0)
|
|
sys.exit (2)
|
|
|
|
time.sleep(2)
|
|
for win in ff.window_handles:
|
|
ff.switch_to.window (win)
|
|
#outp ("Found Window %s" % ff.current_url, 0)
|
|
if re.match ("/guest/(guest_index.php|auth_login.php)", ff.current_url, flags=re.IGNORECASE):
|
|
break
|
|
win = False
|
|
ff.maximize_window()
|
|
|
|
#next_window = ff.window_handles[-1]
|
|
#ff.switch_to.window (next_window)
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.ID, "ID_form4da79e65_auth_login_username")))
|
|
|
|
t_login_cpguest = time.time()
|
|
outp ("%s: ClearPass Guest Login page retrieved" % tm(t_login_cpguest), 2)
|
|
outp ("Entering login fields and clicking on \"Log In\"", 1)
|
|
|
|
uidfield = ff.find_element_by_id ("ID_form4da79e65_auth_login_username")
|
|
uidfield.send_keys (usr)
|
|
passfield = ff.find_element_by_id ("ID_form4da79e65_auth_login_password")
|
|
passfield.send_keys (usrpass)
|
|
|
|
passfield.submit()
|
|
|
|
except:
|
|
outp ("Unable to locate one or more fields on the ClearPass Guest Login page. Maybe the page didn't load or change?", 0)
|
|
sys.exit (2)
|
|
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.XPATH, "//a[contains(.,'Manage Devices')]")))
|
|
|
|
t_cpguest_console = time.time()
|
|
outp ("%s: ClearPass Guest Portal page retrieved" % tm(t_cpguest_console), 2)
|
|
outp ("Clicking on \"Manage Devices\"", 1)
|
|
ff.find_element_by_xpath ("//a[contains(.,'Manage Devices')]").click()
|
|
except:
|
|
outp ("Unable to login to the ClearPass Guest portal or the page loads incompletely", 0)
|
|
sys.exit (2)
|
|
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.ID, "mac_list_item_20")))
|
|
|
|
t_cpguest_devices = time.time()
|
|
outp ("%s: Loaded devices" % tm(t_cpguest_devices), 2)
|
|
outp ("Logging out from ClearPass Guest", 1)
|
|
ff.find_element_by_xpath ("//a[contains(.,'Logout')]").click()
|
|
except:
|
|
outp ("Unable to locate the 20th (last) device on the page. There might be a problem loading the device page", 0)
|
|
sys.exit (2)
|
|
|
|
WebDriverWait (ff, 60).until (EC.title_contains("Login"))
|
|
ff.close()
|
|
ff.switch_to.window (main_window)
|
|
|
|
|
|
try:
|
|
t_cpguest_logout = time.time()
|
|
outp ("%s: Logged out from ClearPass Guest and ready to go into ClearPass Policy Manager" % tm(t_cpguest_logout), 2)
|
|
outp ("Clicking on ClearPass Policy Manager", 1)
|
|
ff.find_element_by_xpath ("//a[contains(.,'ClearPass Policy Manager')]").click()
|
|
|
|
except:
|
|
outp ("Unable to locate the ClearPass Policy Manager link. This is weird and shouldn't have happened.", 0)
|
|
sys.exit (2)
|
|
|
|
time.sleep(2)
|
|
for win in ff.window_handles:
|
|
ff.switch_to.window (win)
|
|
#outp ("Found Window %s" % ff.current_url, 0)
|
|
if re.match ("/tips/tipsLogin.action", ff.current_url, flags=re.IGNORECASE):
|
|
break
|
|
win = False
|
|
ff.maximize_window()
|
|
|
|
#next_window = ff.window_handles[-1]
|
|
#ff.switch_to.window (next_window)
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.NAME, "password")))
|
|
|
|
t_login_cppm = time.time()
|
|
outp ("%s: ClearPass Policy Manager Login page retrieved" % tm(t_login_cppm), 2)
|
|
outp ("Entering login fields and clicking on \"Log In\"", 1)
|
|
|
|
uidfield = ff.find_element_by_id ("username")
|
|
uidfield.send_keys (usr)
|
|
passfield = ff.find_element_by_name ("password")
|
|
passfield.send_keys (usrpass)
|
|
|
|
passfield.submit()
|
|
|
|
except:
|
|
outp ("Unable to locate one or more fields on the ClearPass Policy Manager Login page. Maybe the page didn't load or change?", 0)
|
|
sys.exit (2)
|
|
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.ID, "menu_5_5_button")))
|
|
|
|
t_cppm_console = time.time()
|
|
outp ("%s: ClearPass Policy Manager Portal page retrieved" % tm(t_cppm_console), 2)
|
|
outp ("Clicking on \"Conguration\" section", 1)
|
|
ff.find_element_by_id ("menu_5_5_button").click()
|
|
except:
|
|
outp ("Unable to login to the ClearPass Policy Manager portal or the page loads incompletely", 0)
|
|
sys.exit (2)
|
|
|
|
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.XPATH, "//span[contains(.,'Network')]")))
|
|
|
|
t_cppm_config = time.time()
|
|
outp ("%s: Loaded the \"Configuration\" section" % tm(t_cppm_config), 2)
|
|
outp ("Clicking on the \"Network\" menu", 1)
|
|
ff.find_element_by_xpath ("//div[@id='menu_5_5']/div/div/div[2]/div[7]").click()
|
|
except:
|
|
outp ("Unable to click on the \"Network\" Menu. Maybe the page loaded incompletely", 0)
|
|
sys.exit (2)
|
|
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.XPATH, "//span[contains(.,'Devices')]")))
|
|
|
|
t_cppm_network = time.time()
|
|
outp ("%s: Loaded the \"Network\" menu" % tm(t_cppm_network), 2)
|
|
outp ("Clicking on the \"Devices\" menu", 1)
|
|
ff.find_element_by_xpath ("//span[contains(.,'Devices')]").click()
|
|
except:
|
|
outp ("Unable to click on the \"Devices\" Menu. Maybe the page loaded incompletely", 0)
|
|
|
|
try:
|
|
WebDriverWait (ff, 60).until (EC.presence_of_element_located((By.XPATH, "//span[contains(.,'Aruba Controllers')]")))
|
|
|
|
t_cppm_devices = time.time()
|
|
outp ("%s: Loaded the \"Devices\" section" % tm(t_cppm_devices), 2)
|
|
outp ("Logging out from ClearPass Policy Manager", 1)
|
|
ff.find_element_by_xpath ("//a[contains(.,'Logout')]").click()
|
|
except:
|
|
outp ("Unable to locate the 20th (last) device on the page. There might be a problem loading the device page", 0)
|
|
sys.exit (2)
|
|
|
|
WebDriverWait (ff, 60).until (EC.title_contains("ClearPass Policy Manager"))
|
|
ff.close()
|
|
ff.switch_to.window (main_window)
|
|
|
|
msg_final = "Successfully tested ClearPass"
|
|
t_end = time.time()
|
|
|
|
outp ("%s | \
|
|
'main_page'=%.3fs;;; \
|
|
'guest_login'=%.3fs;;; \
|
|
'guest_console'=%.3fs;;; \
|
|
'guest_devices'=%.3fs;;; \
|
|
'guest_logout'=%.3fs;;; \
|
|
'cppm_login'=%.3fs;;; \
|
|
'cppm_console'=%.3fs;;; \
|
|
'cppm_config'=%.3fs;;; \
|
|
'cppm_network'=%.3fs;;; \
|
|
'cppm_devices'=%.3fs;;; \
|
|
'total_run'=%.3fs;;;" \
|
|
% \
|
|
(msg_final, \
|
|
(t_main - t_ini),\
|
|
(t_login_cpguest - t_main),\
|
|
(t_cpguest_console - t_login_cpguest),\
|
|
(t_cpguest_devices - t_cpguest_console),\
|
|
(t_cpguest_logout - t_cpguest_devices),\
|
|
(t_login_cppm - t_cpguest_logout),\
|
|
(t_cppm_console - t_login_cppm),\
|
|
(t_cppm_config - t_cppm_console),\
|
|
(t_cppm_network - t_cppm_config),\
|
|
(t_cppm_devices - t_cppm_network),\
|
|
(t_end - t_ini)), 0)
|
|
|
|
time.sleep(2)
|
|
|
|
except EXCEP.ErrorInResponseException, (resp, msg):
|
|
|
|
print "ERROR: An error occured communicating with the browser server: Response: %s; Message: %s" % (resp, msg)
|
|
sys.exit (2)
|
|
|
|
except EXCEP.NoSuchElementException, msg:
|
|
|
|
print "ERROR: Unable to locate webpage element. Probably the page loaded incompletely or incorrectly: %s" % msg
|
|
sys.exit (2)
|
|
|
|
except EXCEP.TimeoutException, msg:
|
|
|
|
print "ERROR: Request timed out. Network??? Response: %s" % msg
|
|
sys.exit (2)
|
|
|
|
except EXCEP.WebDriverException, msg:
|
|
|
|
print "ERROR: I don't know what happened. Read this - %s" % msg
|
|
sys.exit (2)
|
|
|
|
finally:
|
|
ff.quit()
|
|
|
|
sys.exit (0)
|