diff --git a/keywords/linux/date/date_keywords.py b/keywords/linux/date/date_keywords.py index dcb1773b..79a9209e 100644 --- a/keywords/linux/date/date_keywords.py +++ b/keywords/linux/date/date_keywords.py @@ -14,8 +14,18 @@ class DateKeywords(BaseKeyword): """ Returns the timezone using a linux system command """ - date = self.ssh_connection.send('date +%Z') + date = self.ssh_connection.send("date +%Z") self.validate_success_return_code(self.ssh_connection) # can only be one line in the response + remove any trailing \n return date[0].strip() + + def get_current_date(self): + """ + Returns the current date in the format YYYY-MM-DD using a linux system command + """ + current_date = self.ssh_connection.send('date "+%Y-%m-%d"') + self.validate_success_return_code(self.ssh_connection) + + # can only be one line in the response + remove any trailing \n + return current_date[0].strip() diff --git a/testcases/cloud_platform/regression/dc/backup_restore/test_verify_backup_file.py b/testcases/cloud_platform/regression/dc/backup_restore/test_verify_backup_file.py new file mode 100644 index 00000000..8fae70cc --- /dev/null +++ b/testcases/cloud_platform/regression/dc/backup_restore/test_verify_backup_file.py @@ -0,0 +1,115 @@ +import re + +from config.configuration_manager import ConfigurationManager +from framework.logging.automation_logger import get_logger +from framework.validation.validation import validate_equals +from keywords.cloud_platform.dcmanager.dcmanager_subcloud_backup_keywords import DcManagerSubcloudBackupKeywords +from keywords.cloud_platform.dcmanager.dcmanager_subcloud_list_keywords import DcManagerSubcloudListKeywords +from keywords.cloud_platform.dcmanager.dcmanager_subcloud_show_keywords import DcManagerSubcloudShowKeywords +from keywords.cloud_platform.ssh.lab_connection_keywords import LabConnectionKeywords +from keywords.cloud_platform.version_info.cloud_platform_version_manager import CloudPlatformVersionManagerClass +from keywords.files.file_keywords import FileKeywords +from keywords.linux.date.date_keywords import DateKeywords + + +def test_verify_backup_central(request): + """ + + Verify backup files are stored in centralized archive + Verify backup date and backup state of single subcloud + Test Steps: + - Backup subcloud to store the file on the System Controller + - Verify the subcloud backup file is transferred to the centralized + default location + - Check backup match current Date and if it is complete + - Remove files created while the Tc was running. + + """ + central_ssh = LabConnectionKeywords().get_active_controller_ssh() + release = CloudPlatformVersionManagerClass().get_sw_version() + + # Gets the lowest subcloud (the subcloud with the lowest id). + dcmanager_subcloud_list_keywords = DcManagerSubcloudListKeywords(central_ssh) + lowest_subcloud = dcmanager_subcloud_list_keywords.get_dcmanager_subcloud_list().get_healthy_subcloud_with_lowest_id() + subcloud_name = lowest_subcloud.get_name() + + # Gets the lowest subcloud sysadmin password needed for backup creation. + lab_config = ConfigurationManager.get_lab_config().get_subcloud(subcloud_name) + subcloud_password = lab_config.get_admin_credentials().get_password() + + dc_manager_backup = DcManagerSubcloudBackupKeywords(central_ssh) + + # Path to where the backup file will store. + central_path = f"/opt/dc-vault/backups/{subcloud_name}/{release}" + + def teardown(): + get_logger().log_info("Removing test files during teardown") + FileKeywords(central_ssh).delete_folder_with_sudo("/opt/dc-vault/backups/") + + request.addfinalizer(teardown) + + # Create a subcloud backup and verify the subcloud backup file in central_path + get_logger().log_info(f"Create {subcloud_name} backup on Central Cloud") + dc_manager_backup.create_subcloud_backup(subcloud_password, central_ssh, path=central_path, subcloud=subcloud_name) + + get_logger().log_info("Checking Subcloud's backup_status, backup_datetime") + subcloud_show_object = DcManagerSubcloudShowKeywords(central_ssh).get_dcmanager_subcloud_show(subcloud_name).get_dcmanager_subcloud_show_object() + backup_status = subcloud_show_object.get_backup_status() + backup_datetime = subcloud_show_object.get_backup_datetime() + + backup_date = re.findall(r"[0-9]{4}-[0-9]{2}-[0-9]{2}", backup_datetime) + current_date = DateKeywords(central_ssh).get_current_date() + + # Verifying that backup has been successfully completed and was created today. + validate_equals(backup_status, "complete-central", "Verifying that the backup is completed successfully.") + validate_equals(backup_date[0].strip(), current_date, "Verifying that the backup was created today") + + +def test_verify_backup_local_custom_path(request): + """ + Verify backup files are stored locally to custom directory + + Test Steps: + - Create a YAML file and add backup backup_dir parameter + - Verify file created on the System Controller + - Run dcmanager CLI Backup with --local-only --backup-values + - Verify the backup files are stored locally (subcloud) using + the configured path. + - Remove files created while the Tc was running. + """ + central_ssh = LabConnectionKeywords().get_active_controller_ssh() + + # Gets the lowest subcloud (the subcloud with the lowest id). + dcmanager_subcloud_list_keywords = DcManagerSubcloudListKeywords(central_ssh) + lowest_subcloud = dcmanager_subcloud_list_keywords.get_dcmanager_subcloud_list().get_healthy_subcloud_with_lowest_id() + subcloud_name = lowest_subcloud.get_name() + subcloud_ssh = LabConnectionKeywords().get_subcloud_ssh(subcloud_name) + + # Gets the lowest subcloud sysadmin password needed for backup creation. + lab_config = ConfigurationManager.get_lab_config().get_subcloud(subcloud_name) + subcloud_password = lab_config.get_admin_credentials().get_password() + + dc_manager_backup = DcManagerSubcloudBackupKeywords(central_ssh) + + def teardown(): + get_logger().log_info("Removing test files") + FileKeywords(central_ssh).delete_folder_with_sudo("subcloud_backup.yaml") + FileKeywords(subcloud_ssh).delete_folder_with_sudo(f"{subcloud_name}_platform_backup_*.tgz") + + request.addfinalizer(teardown) + + get_user = lab_config.get_admin_credentials().get_user_name() + home_path = f"/home/{get_user}/" + + backup_yaml_path = f"{home_path}subcloud_backup.yaml" + backup_yaml_cmd = f"echo 'backup_dir: {home_path}' > {backup_yaml_path}" + + get_logger().log_info("Creating the custom yaml to store backup") + central_ssh.send(backup_yaml_cmd) + + get_logger().log_info("Checking if the yaml was created") + FileKeywords(central_ssh).file_exists(backup_yaml_path) + + # Create a subcloud backup and verify the subcloud backup file in local custom path. + get_logger().log_info(f"Create {subcloud_name} backup locally on custom path") + dc_manager_backup.create_subcloud_backup(subcloud_password, subcloud_ssh, path=f"{home_path}{subcloud_name}_platform_backup_*.tgz", subcloud=subcloud_name, local_only=True, backup_yaml=backup_yaml_path)