def test_controller_goes_down(self): ''' Test the request on sessions if the controller goes down Does the request on the sessions work when the controller comes back up ''' switch_mode(user='******', password='******') logger.info('Configuring cloud, This may take sometime..') setup_cloud(wait_for_cloud_ready=True) config = get_config() mode = config.get_mode() controller = config.get_vm_of_type('controller')[0] session = rest.get_session() data_1 = rest.get('serviceengine') cloud_obj = config.testbed[mode['site_name']].cloud_obj[mode['cloud']] controller_name = controller.name cloud_obj.powerOffVM(controller_name) try: rest.get('serviceengine') except Exception as e: logger.info('Expected ReadTimeout: ' + str(e)) cloud_obj.powerOnVM(controller_name) wait_until_n_cluster_nodes_ready() data_2 = rest.get('serviceengine') assert data_1 == data_2
def test_traffic_with_security_policy_setup(self): start_index = self.public_port_range_start + 3000 tenant = mesos_lib.get_tenant_for_container() infra_utils.switch_mode(tenant=tenant) mesos_lib.create_app('t2', num_apps=6, num_instances=1, northsouth=self.northsouth, ns_service_port=80, ew_service_port_start_index=start_index, network='net1', verify_dns=True, dns_vs_vip=self.dns_vs_vip) ms_lib.add_security_policy_to_vs( 't2-1', ms_name=['t2-2-microservice', 't2-3-microservice'], policy_name='t2-1-networksecuritypolicy', deny=1) ms_lib.add_security_policy_to_vs( 't2-2', ms_name=['t2-4-microservice', 't2-5-microservice'], policy_name='t2-2-networksecuritypolicy', deny=0) vs_lib.create_application_obj('app1') vs_lib.create_application_obj('app2') vs_lib.add_vs_to_application('app1', ['t2-1', 't2-2']) vs_lib.add_vs_to_application('app2', ['t2-4', 't2-5'])
def create_new_user(): switch_mode(user='******', password='******') clear_session() user_data = json.dumps({ 'full_name': 'test-user-1', 'is_active': True, 'password': '******', 'username': '******', 'access': [{ 'role_ref': "/api/role/?name=System-Admin", 'tenant_ref': "/api/tenant/?name=admin" }], 'default_tenant_ref': "/api/tenant/?name=admin" }) rest.post('user', data=user_data) clear_session() yield clear_session(all_sessions=True) switch_mode(user='******', password='******') rest.delete('user', name='test-user-1')
def test_traffic_cleanup(self): tenant = mesos_lib.get_tenant_for_container() infra_utils.switch_mode(tenant=tenant) mesos_lib.delete_app(self.app_prefix, num_apps=self.num_apps, dns_suffix='avi-container-dns.internal', verify_dns=True, dns_vs_vip=self.dns_vs_vip)
def set_cloud_vip_static_routes(cloud_name='Default-Cloud'): """ :param cloud_name: :return: """ leader_vm = get_cluster_master_vm() session = rest.create_session(controller=leader_vm) infra_utils.switch_mode(session=session) rest.update('cloud', name=cloud_name, enable_vip_static_routes=True)
def test_dns(self): vs_list = [ self.app_prefix + '-1', self.app_prefix + '-2', self.app_prefix + '-3', self.app_prefix + '-4', self.app_prefix + '-5', self.app_prefix + '-6' ] tenant = mesos_lib.get_tenant_for_container() infra_utils.switch_mode(tenant=tenant) # REVIEW why is this commented out? vs_lib.check_for_vs(vs_list, verify_dns=True, dns_vs_vip=self.dns_vs_vip)
def test_basic_traffic_setup(self): start_index = self.public_port_range_start + 1000 tenant = mesos_lib.get_tenant_for_container() infra_utils.switch_mode(tenant=tenant) mesos_lib.create_app(self.app_prefix, num_apps=self.num_apps, num_instances=1, northsouth=self.northsouth, ns_service_port=80, ew_service_port_start_index=start_index, network='net1')
def test_traffic_with_security_policy_cleanup(self): tenant = mesos_lib.get_tenant_for_container() infra_utils.switch_mode(tenant=tenant) vs_lib.delete_application_obj('app1') vs_lib.delete_application_obj('app2') mesos_lib.delete_app('t2', num_apps=6, dns_suffix='avi-container-dns.internal', verify_dns=True, dns_vs_vip=self.dns_vs_vip) # these msg were created as part of add_security_policy_to_vs; should be deleted now ms_lib.delete_microservice_group('vs-msg-t2-1') ms_lib.delete_microservice_group('vs-msg-t2-2')
def test_switch_mode_session(self): ''' switch mode session and test if the requests on the session go through correctly ''' switch_mode(user='******', password='******') session = rest.get_session() clear_session() switch_mode(password='******') try: rest.get('serviceengine') except Exception as e: logger.info("authentication error expected: " + str(e)) else: assert 0, "Session is not getting updated based on password" switch_mode(session=session) rest.get('serviceengine') # REVIEW: Once session in mode is set, no further switch_mode works switch_mode(user='******', password='******') try: rest.get('serviceengine') except Exception as e: logger.info("authentication error expected: " + str(e)) else: assert 0, "Once switched on session, no other switch mode works" clear_session(all_sessions=True)
def test_create_session(self, create_new_user): ''' Test create_session - Test if create_sesion returns the correct session in various modes ''' switch_mode(user='******', password='******') session = rest.create_session() assert session.username == 'test-user-1' and session.password == 'avi123' session.get('serviceengine') switch_mode(user='******', password='******') session = rest.create_session() assert session.username == 'admin' and session.password == 'avi123' session.get('serviceengine')
def get_and_delete_all_configs(skip_cloud=False, check_status_code=False, tenant_list=[], fix_url=True, **kwargs): move_all_se_to_group('Default-Group') session = get_session() config = AviConfig.get_instance() defaults = get('default-values').json() logger.info(defaults) tenant_resp = get('tenant').json() if not tenant_list: tenants = [] tenants = [str(entry['name']) for entry in tenant_resp.get('results', [])] else: tenants = tenant_list for _tenant in tenants: switch_mode(tenant=_tenant) for obj_type in reversed(obj_order): if (((obj_type == 'cloud' or obj_type == 'tenant') and skip_cloud) or (obj_type in ['sslcertificaterequest', 'staticroute'])): continue status_code, data = get(obj_type, check_status_code=check_status_code) if status_code > 400: continue for d in data['results']: if obj_type == 'cloud' and d['name'] == 'Default-Cloud': if d['vtype'] != 'CLOUD_NONE': logger.info('Update Default-Cloud from %s to no-access' % d['vtype']) if d.get('vcenter_configuration'): d.pop('vcenter_configuration') elif d.get('openstack_configuration'): d.pop('openstack_configuration') elif d.get('aws_configuration'): d.pop('aws_configuration') elif d.get('cloudstack_configuration'): d.pop('cloudstack_configuration') elif d.get('vca_configuration'): d.pop('vca_configuration') elif d.get('apic_configuration'): d.pop('apic_configuration') d['vtype'] = 'CLOUD_NONE' put('cloud', name=d['name'], data=json.dumps(d)) # review can we use uuid=d['uuid']? if obj_type in defaults.get('default', []) and \ d['uuid'] in defaults['default'][obj_type]: continue logger.info('Deleting: %s:%s' % (obj_type, d['name'])) if obj_type in ['sslcertificaterequest', 'sslkeyandcertificate_import']: delete('sslkeyandcertificate', name=d['name'], check_status_code=False) else: delete(obj_type, name=d['name'], check_status_code=False)
def test_clear_session_basic(self): ''' Basic usage of clear_session ''' switch_mode(user='******', password='******') rest.get('serviceengine') config = get_config() session = rest.get_session() switch_mode(session=session) assert config.sessions and config.session clear_session() config = get_config() context_key = config.get_context_key() assert config.session is None and context_key not in config.sessions
def test_switch_mode_user(self, create_new_user): ''' Switch mode user and test if the session is updated correctly based on mode user ''' switch_mode(user='******', password='******') se_1 = rest.get('serviceengine') session = rest.get_session() assert session.username == 'admin' and session.password == 'avi123' switch_mode(user='******') se_2 = rest.get('serviceengine') session = rest.get_session() assert se_1 == se_2 assert session.username == 'test-user-1' and session.password == 'avi123' clear_session(all_sessions=True)
def test_session_expiry(self): ''' Tests requests on expired sessions ''' switch_mode(user='******', password='******') data = json.dumps({'api_idle_timeout': 1}) rest.put('controllerproperties', data=data) clear_session() data_1 = rest.get('serviceengine') time.sleep(2 * 60) data_2 = rest.get('serviceengine') assert data_1 == data_2 time.sleep(21 * 60) data_1 = rest.get('serviceengine') assert data_1 == data_2
def reboot_clean(update_admin_info=True, **kwargs): post('cluster', path='reboot', data=json.dumps({'mode': 'REBOOT_CLEAN'})) asleep(msg="Sleep before cluster wait check", delay=120) wait_until_cluster_ready() set_sysadmin_public_key() set_systemconfiguration() set_ha_mode_best_effort() if update_admin_info: config = AviConfig.get_instance() mode = config.get_mode() logger.debug("Current Default Mode %s" % mode) username = mode['user'] password = '******' mode["password"] = '******' update_admin_user(username=username, password=password) switch_mode(**mode)
def test_update_profiles(self): vs_1 = 'ma1-1' vs_2 = 'ma1-2' tenant = mesos_lib.get_tenant_for_container() infra_utils.switch_mode(tenant=tenant) # Update apps to different app and nw profiles (1 NS and 1 EW) mesos_lib.update_app_app_profile(vs_1, 'test-app-profile') mesos_lib.update_app_nw_profile(vs_1, 'test-nw-profile') mesos_lib.update_app_app_profile(vs_2, 'test-app-profile') mesos_lib.update_app_nw_profile(vs_2, 'test-nw-profile') # Change apps' profiles to earlier ones: System-HTTP, System-TCP-Proxy mesos_lib.update_app_app_profile(vs_1, 'System-HTTP') mesos_lib.update_app_nw_profile(vs_1, 'System-TCP-Proxy') mesos_lib.update_app_app_profile(vs_2, 'System-HTTP') mesos_lib.update_app_nw_profile(vs_2, 'System-TCP-Proxy')
def test_switch_mode_password(self): ''' switch mode password and test if the session is updated correctly based on mode password ''' switch_mode(user='******', password='******') rest.get('serviceengine') session = rest.get_session() assert session.username == 'admin' and session.password == 'avi123' # REVIEW: switch_mode on password does nothing as of now switch_mode(password='******') try: rest.get('serviceengine') except Exception as e: logger.info("authentication error expected: " + str(e)) else: assert 0, "Session is not getting updated based on password" clear_session()
def test_update_admin_user_performance(self): ''' Test update admin user performance Reports time taken for update_admin_user when - the admin user password is already set to avi123 correctly - the admin user password needs to be changed to avi123 ''' switch_mode(user='******', password='******') ts = time.time() rest.update_admin_user('admin', 'avi123', 'admin') logger.info( "Password is already avi123 - update_admin_user took %2.2f seconds" % (time.time() - ts)) rest.update_admin_user('admin', 'admin', 'avi123') switch_mode(user='******', password='******') ts = time.time() rest.update_admin_user('admin', 'avi123', 'admin') logger.info( "updating password to avi123 - update_admin_user took %2.2f seconds" % (time.time() - ts)) rest.update_admin_user('admin', 'avi123', 'admin')
def test_clear_session_two_users(self, create_new_user): ''' test_clear_session_two_users - Test clear_session with two user sessions - When all_sessions=True is passed, all the existing sessions should be removed ''' switch_mode(user='******', password='******') rest.get('serviceengine') config = get_config() context_key_admin = config.get_context_key() switch_mode(user='******', password='******') rest.get('serviceengine') context_key_test_user = config.get_context_key() assert context_key_test_user in config.sessions and context_key_admin in config.sessions clear_session() assert context_key_test_user not in config.sessions and context_key_admin in config.sessions rest.get('serviceengine') assert context_key_test_user in config.sessions and context_key_admin in config.sessions clear_session(all_sessions=True) assert context_key_test_user not in config.sessions and context_key_admin not in config.sessions clear_session(all_sessions=True)
def test_clear_session_two_users(self, create_new_user): ''' Test clear_session - By default, clear_session() clears the current mode's session - When all_sessions=True is passed, it should clear all existing sessions ''' switch_mode(user='******', password='******') rest.get('serviceengine') config = get_config() context_key_admin = config.get_context_key() switch_mode(user='******', password='******') se_1 = rest.get('serviceengine') context_key_test_user = config.get_context_key() assert context_key_test_user in config.sessions and context_key_admin in config.sessions clear_session() assert context_key_test_user not in config.sessions and context_key_admin in config.sessions se_2 = rest.get('serviceengine') assert se_1 == se_2 assert context_key_test_user in config.sessions and context_key_admin in config.sessions clear_session(all_sessions=True) assert context_key_test_user not in config.sessions and context_key_admin not in config.sessions clear_session(all_sessions=True)
def test_get_cloud_context(self): ''' Test get_cloud_context ''' switch_mode(user='******', password='******') cloud_old = rest.get_cloud_context() switch_mode(cloud='Vmware-Cloud') cloud = rest.get_cloud_context() assert cloud == 'Vmware-Cloud' switch_mode(cloud=cloud_old)
def test_get_api_version(self): ''' Test get_api_version ''' switch_mode(user='******', password='******') version_old = rest.get_api_version() switch_mode(version='17.2.5') version = rest.get_api_version() assert version == '17.2.5' switch_mode_default() version = rest.get_api_version() assert version == version_old switch_mode(version=version_old)
def test_get_session(self, create_new_user): ''' Test get_session - Test if it returns the already created session if it exists - If there is no already created session, it should create a new session and return ''' switch_mode(user='******', password='******') se_1 = rest.get('serviceengine') session_test_user = rest.get_session() switch_mode(user='******', password='******') rest.get('serviceengine') session = rest.get_session() assert session.username == 'admin' and session.password == 'avi123' switch_mode(user='******') se_2 = rest.get('serviceengine') session = rest.get_session() assert session is session_test_user and se_1 == se_2 clear_session(all_sessions=True)
def test_update_admin_user(self, create_new_user): ''' Test update_admin_user - Test if it updates the user password correctly - Test if it updates the user password correctly when mode user is not the same as the passed username ''' switch_mode(user='******', password='******') se_1 = rest.get('serviceengine') rest.update_admin_user('test-user-1', 'Test123', 'avi123') clear_session() # REVIEW: # when the passed username to update_admin_user is not the same as mode user # - update_admin_user fails # - Also, sets wrong password on the mode # Should this be fixed? switch_mode(user='******', password='******') rest.update_admin_user('test-user-1', 'avi123', 'Test123') switch_mode(user='******', password='******') se_2 = rest.get('serviceengine') assert se_1 == se_2
def test_clear_session_making_get_request(self): ''' test_clear_session_making_get_requests - Make a get request after clear_session and verify that the request uses mode user and password ''' switch_mode(user='******', password='******') rest.get('serviceengine') session = rest.get_session() switch_mode(password='******') # This should pass because it uses already created session rest.get('serviceengine') clear_session() try: # This should fail during authentication(uses password Temp123) rest.get('serviceengine') except Exception as e: logger.info('Authentication failure expected: ' + str(e)) else: assert 0, 'Sessions are not cleared, Still using password avi123' switch_mode(password='******') clear_session()
def test_clear_session_making_get_request(self): ''' Test if get() requests work as expected after clearing sessions ''' switch_mode(user='******', password='******') se_1 = rest.get('serviceengine') session = rest.get_session() switch_mode(password='******') # This should pass because it uses already created session se_2 = rest.get('serviceengine') assert se_1 == se_2 clear_session() try: # This should fail during authentication(uses password Temp123) rest.get('serviceengine') except Exception as e: logger.info('Authentication failure expected: ' + str(e)) else: assert 0, 'Sessions are not cleared, Still using password avi123' switch_mode(password='******') clear_session()
def test_delete_configs(self): infra_utils.switch_mode(tenant='admin') mesos_lib.delete_dns_vs_if_needed(self.dns_vs) infra_utils.delete_config(self.config_file)
def collect_techsupport(c_list, dest_path, jobname, jobnum, techsupport_type='debuglogs', is_baremetal=False): """ :param c_list: :param dest_path: :param jobname: :param jobnum: :param techsupport_type: :param is_baremetal: :return: """ instance_type = 'Controllers' if techsupport_type == 'debuglogs' else 'SEs' logger.info('Collecting tech-support from the %s' % instance_type) jobnum = str(jobnum) for c_ip in c_list: c_port = 443 if ':' in c_ip: c_ip, c_port = c_ip.split(':') if dest_path is None: dest_path = '/mnt/files/robot-results/latest/' + jobname date_time = time.strftime("%Y%m%d-%H%M%S") folder_name = 'jobname_' + jobname + '_jobnum_' + jobnum subprocess.call('mkdir -p ' + dest_path + '/' + folder_name, shell=True) dest = dest_path + '/' + folder_name + '/techsupport_' + c_ip + '_' + date_time + '.tar' subprocess.call('touch ' + dest, shell=True) subprocess.call('chmod 757 ' + dest, shell=True) logger.info('on controller %s and saving at %s \n' % (c_ip, dest)) uri = 'techsupport/%s' % techsupport_type logger.info('URI: %s' % uri) try: status_code, rsp = rest.get(uri) except: infra_utils.switch_mode(user='******', password='******') status_code, rsp = rest.get(uri) infra_utils.switch_mode(user='******', password='******') controller_error = [] if rsp: with open(dest, 'wb') as f: for chunk in rsp.iter_content(chunk_size=1024): if chunk: f.write(chunk) f.flush() else: logger.info('Tech support collection failed - status %s' % status_code) if is_baremetal: c_ip = c_ip + ':5098' try: execute(scp_techsupport, dest_path=dest, hosts=[c_ip]) except: try: env.password = '******' execute(scp_techsupport, dest_path=dest, hosts=[c_ip]) except Exception as e: msg_error = 'Tech support collection failed on node %s - error %s \n' % ( c_ip, e) logger.info(msg_error) controller_error.append(msg_error) if controller_error: logger_utils.fail(controller_error) logger.info('\n DONE \n')