# -*- coding: utf-8 -*- from include.common_classes_60 import PandoraWebDriverTestCase from include.common_functions_60 import login, is_element_present, click_menu_element, detect_and_pass_all_wizards, logout, gen_random_string, is_enterprise from include.agent_functions import create_agent, search_agent, create_agent_group from include.user_functions import create_user, create_user_profile from include.module_functions import create_module from include.reports_functions import create_report from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import NoAlertPresentException from selenium.webdriver.remote.webelement import WebElement import unittest, time, re class ACL(PandoraWebDriverTestCase): test_name = u'ACL' tickets_associated = [] def test_A_ACL_propagation(self): u""" ACL Propagation test: Creates one group "A" with ACL propagation, then a group "B" son of "A" with no ACL propagation, and finally group "C". The test asserts if a user with privileges to "A" can see the agent of "B" but no agents of "C". """ print "funciono" group_name_A = gen_random_string(6) group_name_B = gen_random_string(6) group_name_C = gen_random_string(6) agent_name_A = gen_random_string(6) agent_name_B = gen_random_string(6) user_name = gen_random_string(6) driver = self.driver self.login() detect_and_pass_all_wizards(driver) create_agent_group(driver,group_name_A,propagate_acl=True,description="Group A, with propagate ACL, son of ALL") create_agent_group(driver,group_name_B,parent_group=group_name_A,description="Group B, son of A") create_agent_group(driver,group_name_C,parent_group=group_name_B,description="Group C, son of B") create_agent(driver,agent_name_A,description="Agent in group B",group=group_name_B) create_agent(driver,agent_name_B,description="Agent in group C",group=group_name_C) l=[("Chief Operator",group_name_A,[])] create_user(driver,user_name,"pandora",profile_list=l) self.logout() self.login(user=user_name) detect_and_pass_all_wizards(driver) #Is the agent listed in the agent list? search_agent(driver,agent_name_A,go_to_agent=False) element = driver.find_element_by_xpath('//a[contains(.,"'+agent_name_A+'")]') self.assertIsInstance(element,WebElement) #Is the agent accesible for the user? search_agent(driver,agent_name_A,go_to_agent=True) element = driver.find_element_by_xpath('//*[@id="agent_contact_main"]/thead/tr/th') self.assertIsInstance(element,WebElement) #Is the agent invisible to the user? (It should be invisible) search_agent(driver,agent_name_B,go_to_agent=False) element = driver.find_elements_by_xpath('//a[contains(.,"'+agent_name_B+'")]') self.assertEqual(element,[]) #We need to logout because we've loged in with a non-admin user self.logout() def test_B_ACL_reports(self): u""" Creates a user with Chief Operator permissions over the Applications group. Then creates two reports: one in the Applications group and other in the Servers group. Then, it checks that the given user can only see the Application report """ user_name = gen_random_string(6) report_name_A = agent_name = gen_random_string(6) report_name_B = agent_name = gen_random_string(6) driver = self.driver self.login() #Creates a user with Chief Operator - Applications profile profile_list = [] profile_list.append(("Chief Operator","Applications",[])) create_user(driver,user_name,user_name,email=user_name+'@pandorafms.com',profile_list=profile_list) #Creates report create_report(driver,report_name_A,"Applications") create_report(driver,report_name_B,"Servers") #Logout self.logout() #Login self.login(user=user_name,passwd=user_name) #Check that the report is visible click_menu_element(driver,"Custom reporting") driver.find_element_by_id('text-search').clear() driver.find_element_by_id('text-search').send_keys(report_name_A) driver.find_element_by_id('submit-search_submit').click() self.assertEqual(is_element_present(driver, By.ID, 'report_list-0'),True) #Check that the report is not visible click_menu_element(driver,"Custom reporting") driver.find_element_by_id('text-search').clear() driver.find_element_by_id('text-search').send_keys(report_name_B) driver.find_element_by_id('submit-search_submit').click() time.sleep(6) element = driver.find_element_by_xpath('//td[contains(.,"No data found.")]') self.assertIsInstance(element,WebElement) #Delete reports self.logout() def test_C_ACL_tag(self): u"""Create agent and two modules, one without tag and with tag, create a user with tag and check this user can view module with tag and user canĀ“t view module without tag""" agent_name = gen_random_string(6) module_name_A = gen_random_string(6) module_name_B = gen_random_string(6) user_name = gen_random_string(6) driver = self.driver self.login() detect_and_pass_all_wizards(driver) create_agent(driver,agent_name,group="Applications",ip="192.168.50.50") #We create a module without a tag create_module("network_server",driver,agent_name=agent_name,module_name=module_name_A,component_group="Network Management",network_component="Host Alive",ip="192.168.50.50") #We now create a modulo with tag "critical" create_module("network_server",driver,agent_name=agent_name,module_name=module_name_B,component_group="Network Management",network_component="Host Alive",ip="192.168.50.50",tag_name="critical") l = [("Operator (Read)","All",["critical"])] create_user(driver,user_name,"pandora",profile_list=l) self.logout() self.login(user=user_name) detect_and_pass_all_wizards(driver) search_agent(driver,agent_name) time.sleep(6) #The user should be able to see the module with Tag module = driver.find_element_by_xpath('//td[contains(.,"'+module_name_B+'")]') self.assertIsInstance(module,WebElement) #The user should NOT be able to see the module without tag modules = driver.find_elements_by_xpath('//td[contains(.,"'+module_name_A+'")]') self.assertEqual(modules,[]) if __name__ == "__main__": unittest.main()