def test_vm_console(appliance, setup_provider, context, configure_websocket, order_catalog_item_in_ops_ui): """Tests Myservice VM Console in SSUI.""" service_name = order_catalog_item_in_ops_ui with appliance.context.use(context): appliance.server.login() myservice = MyService(appliance, service_name) myservice.launch_vm_console()
def test_vm_console_ssui(request, appliance, setup_provider, provider, context, configure_console_webmks, configure_console_vnc, order_service, take_screenshot, configure_websocket, console_template): """Test Myservice VM Console in SSUI. Metadata: test_flag: ssui Polarion: assignee: apagac casecomponent: Infra caseimportance: medium initialEstimate: 1/2h """ if provider.one_of(VMwareProvider) and appliance.version < '5.11': appliance.server.settings.update_vmware_console({'console_type': 'VNC'}) request.addfinalizer(lambda: appliance.server.settings.update_vmware_console( {'console_type': 'VMware VMRC Plugin'})) catalog_item = order_service service_name = catalog_item.name with appliance.context.use(context): myservice = MyService(appliance, service_name) vm_obj = myservice.launch_vm_console(catalog_item) vm_console = vm_obj.vm_console if provider.one_of(OpenStackProvider): public_net = provider.data['public_network'] vm_obj.mgmt.assign_floating_ip(public_net) request.addfinalizer(vm_console.close_console_window) request.addfinalizer(appliance.server.logout) try: assert vm_console.wait_for_connect(180), ("VM Console did not reach 'connected'" " state") # wait for screen text to return non-empty string, which implies console is loaded # and has readable text wait_for(func=lambda: vm_console.get_screen_text() != '', delay=5, timeout=45) assert vm_console.get_screen_text(), "VM Console screen text returned Empty" except Exception: # Take a screenshot if an exception occurs vm_console.switch_to_console() take_screenshot("ConsoleScreenshot") vm_console.switch_to_appliance() raise
def test_vm_console(request, appliance, setup_provider, context, configure_websocket, configure_console_vnc, order_service, take_screenshot, console_template, provider): """Test Myservice VM Console in SSUI. Metadata: test_flag: ssui Polarion: assignee: apagac casecomponent: Infra caseimportance: medium initialEstimate: 1/2h """ if (provider.one_of(VMwareProvider) and provider.version >= 6.5 or 'html5_console' in provider.data.get('excluded_test_flags', [])): pytest.skip( 'VNC consoles are unsupported on VMware ESXi 6.5 and later') catalog_item = order_service service_name = catalog_item.name console_vm_username = credentials[ provider.data.templates.console_template.creds].username console_vm_password = credentials[ provider.data.templates.console_template.creds].password with appliance.context.use(context): myservice = MyService(appliance, service_name) vm_obj = myservice.launch_vm_console(catalog_item) vm_console = vm_obj.vm_console if provider.one_of(OpenStackProvider): public_net = provider.data['public_network'] vm_obj.mgmt.assign_floating_ip(public_net) request.addfinalizer(vm_console.close_console_window) request.addfinalizer(appliance.server.logout) ssh_who_command = ("who --count" if not provider.one_of(OpenStackProvider) else "who -aH") with ssh.SSHClient(hostname=vm_obj.ip_address, username=console_vm_username, password=console_vm_password) as vm_ssh_client: try: assert vm_console.wait_for_connect(180), ( "VM Console did not reach 'connected'" " state") user_count_before_login = vm_ssh_client.run_command( ssh_who_command, ensure_user=True) logger.info("Output of '{}' is {} before login".format( ssh_who_command, user_count_before_login)) assert vm_console.wait_for_text( text_to_find="login:"******"VM Console" " didn't prompt for Login") # Enter Username: vm_console.send_keys("{}".format(console_vm_username)) assert vm_console.wait_for_text( text_to_find="Password", timeout=200), ("VM Console" " didn't prompt for Password") # Enter Password: vm_console.send_keys("{}".format(console_vm_password)) logger.info("Wait to get the '$' prompt") if not provider.one_of(OpenStackProvider): vm_console.wait_for_text( text_to_find=provider.data.templates.console_template. prompt_text, timeout=200) def _validate_login(): # the following try/except is required to handle the exception thrown by SSH # while connecting to VMware VM.It throws "[Error 104]Connection reset by Peer". try: user_count_after_login = vm_ssh_client.run_command( ssh_who_command, ensure_user=True) logger.info("Output of '{}' is {} after login".format( ssh_who_command, user_count_after_login)) return user_count_before_login < user_count_after_login except Exception as e: logger.info("Exception: {}".format(e)) logger.info( "Trying again to perform 'who --count' over ssh.") return False # Number of users before login would be 0 and after login would be 180 # If below assertion would fail user_count_after_login is also 0, # denoting login failed wait_for(func=_validate_login, timeout=300, delay=5) # create file on system vm_console.send_keys("touch blather") wait_for(func=vm_ssh_client.run_command, func_args=["ls blather"], func_kwargs={'ensure_user': True}, fail_condition=lambda result: result.rc != 0, delay=1, num_sec=10) # if file was created in previous steps it will be removed here # we will get instance of SSHResult command_result = vm_ssh_client.run_command("rm blather", ensure_user=True) assert command_result except Exception: # Take a screenshot if an exception occurs vm_console.switch_to_console() take_screenshot("ConsoleScreenshot") vm_console.switch_to_appliance() raise
def test_vm_console(request, appliance, setup_provider, context, configure_websocket, configure_console_vnc, order_catalog_item_in_ops_ui, take_screenshot, console_template): """Test Myservice VM Console in SSUI.""" catalog_item = order_catalog_item_in_ops_ui service_name = catalog_item.name console_vm_username = credentials[catalog_item.provider.data.templates.console_template .creds].username console_vm_password = credentials[catalog_item.provider.data.templates.console_template .creds].password with appliance.context.use(context): myservice = MyService(appliance, service_name) vm_obj = myservice.launch_vm_console(catalog_item) vm_console = vm_obj.vm_console request.addfinalizer(vm_console.close_console_window) request.addfinalizer(appliance.server.logout) with ssh.SSHClient(hostname=vm_obj.ip_address, username=console_vm_username, password=console_vm_password) as vm_ssh_client: try: assert vm_console.wait_for_connect(180), ("VM Console did not reach 'connected'" " state") user_count_before_login = vm_ssh_client.run_command("who --count", ensure_user=True) logger.info("Output of who --count is {} before login" .format(user_count_before_login)) assert vm_console.wait_for_text(text_to_find="login:"******"VM Console" " didn't prompt for Login") # Enter Username: vm_console.send_keys("{}".format(console_vm_username)) assert vm_console.wait_for_text(text_to_find="Password", timeout=200), ("VM Console" " didn't prompt for Password") # Enter Password: vm_console.send_keys("{}".format(console_vm_password)) logger.info("Wait to get the '$' prompt") vm_console.wait_for_text(text_to_find=catalog_item.provider.data.templates. console_template.prompt_text, timeout=200) def _validate_login(): # the following try/except is required to handle the exception thrown by SSH # while connecting to VMware VM.It throws "[Error 104]Connection reset by Peer". try: user_count_after_login = vm_ssh_client.run_command("who --count", ensure_user=True) logger.info("Output of 'who --count' is {} after login" .format(user_count_after_login)) return user_count_before_login < user_count_after_login except Exception as e: logger.info("Exception: {}".format(e)) logger.info("Trying again to perform 'who --count' over ssh.") return False # Number of users before login would be 0 and after login would be 180 # If below assertion would fail user_count_after_login is also 0, # denoting login failed wait_for(func=_validate_login, timeout=300, delay=5) # create file on system vm_console.send_keys("touch blather") wait_for(func=vm_ssh_client.run_command, func_args=["ls blather"], func_kwargs={'ensure_user': True}, fail_condition=lambda result: result.rc != 0, delay=1, num_sec=10) # if file was created in previous steps it will be removed here # we will get instance of SSHResult command_result = vm_ssh_client.run_command("rm blather", ensure_user=True) assert command_result except Exception as e: # Take a screenshot if an exception occurs vm_console.switch_to_console() take_screenshot("ConsoleScreenshot") vm_console.switch_to_appliance() raise e
def test_vm_console(request, appliance, setup_provider, context, configure_websocket, configure_console_vnc, order_service, take_screenshot, console_template, provider): """Test Myservice VM Console in SSUI. Metadata: test_flag: ssui Polarion: assignee: apagac casecomponent: Infra caseimportance: medium initialEstimate: 1/2h """ if (provider.one_of(VMwareProvider) and provider.version >= 6.5 or 'html5_console' in provider.data.get('excluded_test_flags', [])): pytest.skip('VNC consoles are unsupported on VMware ESXi 6.5 and later') catalog_item = order_service service_name = catalog_item.name console_vm_username = credentials[provider.data.templates.console_template .creds].username console_vm_password = credentials[provider.data.templates.console_template .creds].password with appliance.context.use(context): myservice = MyService(appliance, service_name) vm_obj = myservice.launch_vm_console(catalog_item) vm_console = vm_obj.vm_console if provider.one_of(OpenStackProvider): public_net = provider.data['public_network'] vm_obj.mgmt.assign_floating_ip(public_net) request.addfinalizer(vm_console.close_console_window) request.addfinalizer(appliance.server.logout) ssh_who_command = ("who --count" if not provider.one_of(OpenStackProvider) else "who -aH") with ssh.SSHClient(hostname=vm_obj.ip_address, username=console_vm_username, password=console_vm_password) as vm_ssh_client: try: assert vm_console.wait_for_connect(180), ("VM Console did not reach 'connected'" " state") user_count_before_login = vm_ssh_client.run_command(ssh_who_command, ensure_user=True) logger.info("Output of '{}' is {} before login" .format(ssh_who_command, user_count_before_login)) assert vm_console.wait_for_text(text_to_find="login:"******"VM Console" " didn't prompt for Login") # Enter Username: vm_console.send_keys("{}".format(console_vm_username)) assert vm_console.wait_for_text(text_to_find="Password", timeout=200), ("VM Console" " didn't prompt for Password") # Enter Password: vm_console.send_keys("{}".format(console_vm_password)) logger.info("Wait to get the '$' prompt") if not provider.one_of(OpenStackProvider): vm_console.wait_for_text(text_to_find=provider.data.templates. console_template.prompt_text, timeout=200) def _validate_login(): # the following try/except is required to handle the exception thrown by SSH # while connecting to VMware VM.It throws "[Error 104]Connection reset by Peer". try: user_count_after_login = vm_ssh_client.run_command(ssh_who_command, ensure_user=True) logger.info("Output of '{}' is {} after login" .format(ssh_who_command, user_count_after_login)) return user_count_before_login < user_count_after_login except Exception as e: logger.info("Exception: {}".format(e)) logger.info("Trying again to perform 'who --count' over ssh.") return False # Number of users before login would be 0 and after login would be 180 # If below assertion would fail user_count_after_login is also 0, # denoting login failed wait_for(func=_validate_login, timeout=300, delay=5) # create file on system vm_console.send_keys("touch blather") wait_for(func=vm_ssh_client.run_command, func_args=["ls blather"], func_kwargs={'ensure_user': True}, fail_condition=lambda result: result.rc != 0, delay=1, num_sec=10) # if file was created in previous steps it will be removed here # we will get instance of SSHResult command_result = vm_ssh_client.run_command("rm blather", ensure_user=True) assert command_result except Exception as e: # Take a screenshot if an exception occurs vm_console.switch_to_console() take_screenshot("ConsoleScreenshot") vm_console.switch_to_appliance() raise e
def test_vm_console(request, appliance, setup_provider, context, configure_websocket, order_catalog_item_in_ops_ui, take_screenshot, console_template): """Test Myservice VM Console in SSUI.""" catalog_item = order_catalog_item_in_ops_ui service_name = catalog_item.name console_vm_username = credentials[catalog_item.provider.data.templates.console_template .creds].username console_vm_password = credentials[catalog_item.provider.data.templates.console_template .creds].password with appliance.context.use(context): myservice = MyService(appliance, service_name) vm_obj = myservice.launch_vm_console(catalog_item) vm_console = vm_obj.vm_console request.addfinalizer(vm_console.close_console_window) request.addfinalizer(appliance.server.logout) with ssh.SSHClient(hostname=vm_obj.ip_address, username=console_vm_username, password=console_vm_password) as vm_ssh_client: try: assert vm_console.wait_for_connect(180), ("VM Console did not reach 'connected'" " state") user_count_before_login = vm_ssh_client.run_command("who --count", ensure_user=True) logger.info("Output of who --count is {} before login" .format(user_count_before_login)) assert vm_console.wait_for_text(text_to_find="login:"******"VM Console" " didn't prompt for Login") # Enter Username: vm_console.send_keys("{}".format(console_vm_username)) assert vm_console.wait_for_text(text_to_find="Password", timeout=200), ("VM Console" " didn't prompt for Password") # Enter Password: vm_console.send_keys("{}".format(console_vm_password)) logger.info("Wait to get the '$' prompt") vm_console.wait_for_text(text_to_find=catalog_item.provider.data.templates. console_template.prompt_text, timeout=200) def _validate_login(): # the following try/except is required to handle the exception thrown by SSH # while connecting to VMware VM.It throws "[Error 104]Connection reset by Peer". try: user_count_after_login = vm_ssh_client.run_command("who --count", ensure_user=True) logger.info("Output of 'who --count' is {} after login" .format(user_count_after_login)) return user_count_before_login < user_count_after_login except Exception as e: logger.info("Exception: {}".format(e)) logger.info("Trying again to perform 'who --count' over ssh.") return False # Number of users before login would be 0 and after login would be 180 # If below assertion would fail user_count_after_login is also 0, # denoting login failed wait_for(func=_validate_login, timeout=300, delay=5) # create file on system vm_console.send_keys("touch blather") wait_for(func=vm_ssh_client.run_command, func_args=["ls blather"], func_kwargs={'ensure_user': True}, fail_condition=lambda result: result.rc != 0, delay=1, num_sec=10) # if file was created in previous steps it will be removed here # we will get instance of SSHResult command_result = vm_ssh_client.run_command("rm blather", ensure_user=True) assert command_result except Exception as e: # Take a screenshot if an exception occurs vm_console.switch_to_console() take_screenshot("ConsoleScreenshot") vm_console.switch_to_appliance() raise e