Files
test/testcases/cloud_platform/regression/security/test_cli_confirmation.py
ssivaman 215fca8fe1 Added the cli confirmation for --yes flag
Change-Id: I58c73cca00b09ecb697cdcd077474b8f93b78dc8
Signed-off-by: ssivaman <sudarshanduraisamy.sivamani@windriver.com>
2025-07-30 12:15:29 -04:00

136 lines
6.0 KiB
Python
Executable File

from pytest import FixtureRequest, mark
from framework.logging.automation_logger import get_logger
from framework.ssh.prompt_response import PromptResponse
from framework.validation.validation import validate_str_contains
from keywords.cloud_platform.command_wrappers import source_openrc
from keywords.cloud_platform.ssh.lab_connection_keywords import LabConnectionKeywords
from keywords.cloud_platform.system.host.system_host_lock_keywords import SystemHostLockKeywords
from keywords.cloud_platform.system.service.system_service_keywords import SystemServiceKeywords
def cli_confirmations_enabled(request: FixtureRequest):
"""
Function to enable CLI confirmations in setup and disable in teardown.
"""
ssh_connection = LabConnectionKeywords().get_active_controller_ssh()
service_keywords = SystemServiceKeywords(ssh_connection)
get_logger().log_info("Enabling CLI confirmations in setup")
service_keywords.modify_service_parameter("platform", "client", "cli_confirmations", "enabled")
service_keywords.apply_service_parameters("platform")
get_logger().log_info("Waiting for CLI confirmation settings to take effect...")
# Exit from lab session to force fresh login
get_logger().log_info("Exiting from lab session to force fresh login")
ssh_connection.send("exit")
ssh_connection.close()
# Completely destroy the connection object
ssh_connection = None
get_logger().log_info("Setup complete - CLI confirmations enabled")
def teardown():
teardown_ssh_connection = LabConnectionKeywords().get_active_controller_ssh()
teardown_service_keywords = SystemServiceKeywords(teardown_ssh_connection)
get_logger().log_info("Disabling CLI confirmations in teardown")
teardown_service_keywords.modify_service_parameter("platform", "client", "cli_confirmations", "disabled")
teardown_service_keywords.apply_service_parameters("platform")
request.addfinalizer(teardown)
@mark.p1
def test_cli_with_confirmations_enabled(request: FixtureRequest):
"""
Test system host-lock command with CLI confirmations enabled.
Verifies confirmation prompts appear for destructive commands.
"""
# Call the setup function directly
cli_confirmations_enabled(request)
ssh_connection = LabConnectionKeywords().get_active_controller_ssh()
get_logger().log_info("Testing system host-lock command with confirmations enabled")
cmd = "system host-lock controller-1"
command = source_openrc(cmd)
# Set up prompts to expect confirmation and respond with 'No'
confirmation_prompt = PromptResponse("Do you want to continue?", "no")
command_completed = PromptResponse("keystone_admin", None) # Wait for command prompt to return
prompts = [confirmation_prompt, command_completed]
output = ssh_connection.send_expect_prompts(command, prompts)
# Verify confirmation prompt appeared and was handled correctly
output_str = str(output)
get_logger().log_info(f"Full output: {output_str}")
# Validate that CLI confirmation behavior occurred
validate_str_contains(output_str, "Operation cancelled by the user", "Verify CLI confirmation prompt appeared and operation was cancelled")
get_logger().log_info("CLI confirmation prompt appeared and was handled correctly - operation cancelled")
get_logger().log_info("system host-lock confirmation test completed")
@mark.p1
def test_yes_flag_with_cli_disabled():
"""
Test system host-lock controller-5 --yes command with CLI confirmations disabled.
Verifies that --yes flag works properly when CLI confirmations are disabled.
"""
ssh_connection = LabConnectionKeywords().get_active_controller_ssh()
service_keywords = SystemServiceKeywords(ssh_connection)
get_logger().log_info("Ensuring CLI confirmations are disabled")
service_keywords.modify_service_parameter("platform", "client", "cli_confirmations", "disabled")
service_keywords.apply_service_parameters("platform")
# Exit from lab session to force fresh login for settings to take effect
get_logger().log_info("Exiting from lab session to force fresh login")
ssh_connection.send("exit")
ssh_connection.close()
# Create fresh SSH connection to test disabled confirmations
get_logger().log_info("Creating fresh SSH connection to test disabled confirmations")
ssh_connection = LabConnectionKeywords().get_active_controller_ssh()
get_logger().log_info("Testing system host-lock controller-5 command without confirmations")
# Use the keyword to lock host with --yes flag
host_lock_keywords = SystemHostLockKeywords(ssh_connection)
output_str = host_lock_keywords.lock_host_with_error("controller-5", confirm_flag=True)
get_logger().log_info(f"Command output: {output_str}")
# Validate that command executed (should get "host not found" message since controller-5 doesn't exist)
validate_str_contains(output_str, "host not found", "Verify command executed and returned expected error message")
get_logger().log_info("system host-lock test without confirmation completed")
@mark.p2
def test_yes_flag_with_cli_enabled(request: FixtureRequest):
"""
Test --yes flag with CLI confirmations enabled using fixture.
Verifies that --yes flag bypasses confirmation prompts when CLI confirmations are enabled.
"""
# Call the enabled setup function directly
cli_confirmations_enabled(request)
ssh_connection = LabConnectionKeywords().get_active_controller_ssh()
get_logger().log_info("Testing --yes flag with confirmations enabled")
# Use the keyword to lock host with --yes flag
host_lock_keywords = SystemHostLockKeywords(ssh_connection)
output_str = host_lock_keywords.lock_host_with_error("controller-5", confirm_flag=True)
get_logger().log_info(f"Command output: {output_str}")
# Validate that command executed (should get "host not found" message since controller-5 doesn't exist)
validate_str_contains(output_str, "host not found", "Verify command executed and returned expected error message")
get_logger().log_info("--yes flag test with CLI enabled completed")