Consolidated code update Python code and placed in lib
Resolves openbmc/openbmc-test-automation#834
Change-Id: I571bab9d63abab4386accec025d1402e739a6a56
Signed-off-by: Charles Paul Hofer <Charles.Hofer@ibm.com>
diff --git a/extended/code_update/code_update.py b/extended/code_update/code_update.py
deleted file mode 100644
index 1569107..0000000
--- a/extended/code_update/code_update.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env python
-
-r"""
-This module is the python counterpart to code_update.robot.
-"""
-
-import os
-import sys
-import re
-import string
-import tarfile
-import time
-
-robot_pgm_dir_path = os.path.dirname(__file__) + os.sep
-repo_lib_path = re.sub('/extended/code_update/', '/lib', robot_pgm_dir_path)
-repo_data_path = re.sub('/extended/code_update/', '/data', robot_pgm_dir_path)
-sys.path.append(repo_lib_path)
-sys.path.append(repo_data_path)
-
-import gen_robot_keyword as keyword
-import gen_print as gp
-import gen_valid as gv
-import variables as var
-from robot.libraries.BuiltIn import BuiltIn
-
-
-###############################################################################
-def delete_all_pnor_images():
-
- r"""
- Delete all PNOR images from the BMC.
- """
-
- status, images = keyword.run_key("Read Properties "
- + var.SOFTWARE_VERSION_URI + "enumerate")
- for image_name in images:
- image_id = image_name.split('/')[-1]
- image_purpose = images[image_name]["Purpose"]
- if var.VERSION_PURPOSE_HOST == image_purpose:
- # Delete twice, in case the image is in the /tmp/images directory
- keyword.run_key("Call Method " + var.SOFTWARE_VERSION_URI
- + image_id + " delete data={\"data\":[]}")
- keyword.run_key("Call Method " + var.SOFTWARE_VERSION_URI
- + image_id + " delete data={\"data\":[]}")
-
-###############################################################################
-
-
-###############################################################################
-def wait_for_activation_state_change(version_id, initial_state):
-
- r"""
- Wait for the current activation state of ${version_id} to
- change from the state provided by the calling function.
-
- Description of argument(s):
- version_id The version ID whose state change we are waiting for.
- initial_state The activation state we want to wait for.
- """
-
- keyword.run_key_u("Open Connection And Log In")
- retry = 0
- while (retry < 20):
- status, software_state = keyword.run_key("Read Properties " +
- var.SOFTWARE_VERSION_URI + str(version_id))
- current_state = (software_state)["Activation"]
- if (initial_state == current_state):
- time.sleep(60)
- retry += 1
- else:
- return
- return
-
-###############################################################################
diff --git a/extended/code_update/code_update.robot b/extended/code_update/code_update.robot
index 0d57788..73e86b6 100644
--- a/extended/code_update/code_update.robot
+++ b/extended/code_update/code_update.robot
@@ -14,9 +14,7 @@
... - Wait for code update to complete
... - Verify the new version
-#TODO: Move test_uploadimage.py to lib/
-Library ../test_uploadimage.py
-Library code_update.py
+Library ../../lib/code_update_utils.py
Library OperatingSystem
Variables ../../data/variables.py
Resource ../lib/rest_client.robot
diff --git a/extended/test_uploadimage.py b/extended/test_uploadimage.py
deleted file mode 100644
index 0b6bcd7..0000000
--- a/extended/test_uploadimage.py
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env python
-
-r"""
-This module is the python counterpart to test_uploadimage.robot.
-"""
-
-import os
-import sys
-import re
-import string
-import tarfile
-import time
-
-robot_pgm_dir_path = os.path.dirname(__file__) + os.sep
-repo_lib_path = re.sub('/extended/', '/lib', robot_pgm_dir_path)
-repo_data_path = re.sub('/extended/', '/data', robot_pgm_dir_path)
-sys.path.append(repo_lib_path)
-sys.path.append(repo_data_path)
-
-import gen_robot_keyword as grk
-import gen_print as gp
-import variables as var
-from robot.libraries.BuiltIn import BuiltIn
-
-
-###############################################################################
-def get_latest_file(dir_path):
-
- r"""
- Get the path to the latest uploaded file.
-
- Description of argument(s):
- dir_path Path to the dir from which the name of the last
- updated file or folder will be returned to the
- calling function.
- """
-
- grk.run_key_u("Open Connection And Log In")
- status, ret_values =\
- grk.run_key("Execute Command On BMC cd " + dir_path
- + "; stat -c '%Y %n' * | sort -k1,1nr | head -n 1", ignore=1)
- return ret_values.split(" ")[-1]
-
-###############################################################################
-
-
-###############################################################################
-def get_version_tar(tar_file_path):
-
- r"""
- Read the image version from the MANIFEST inside the tarball.
-
- Description of argument(s):
- tar_file_path The path to a tar file that holds the image
- version inside the MANIFEST.
- """
-
- tar = tarfile.open(tar_file_path)
- for member in tar.getmembers():
- f=tar.extractfile(member)
- content=f.read()
- if "version=" in content:
- content = content.split("\n")
- content = [x for x in content if "version=" in x]
- version = content[0].split("=")[-1]
- break
- tar.close()
- return version
-
-###############################################################################
-
-
-###############################################################################
-def get_image_version(file_path):
-
- r"""
- Read the file for a version object.
-
- Description of argument(s):
- file_path The path to a file that holds the image version.
- """
-
- grk.run_key_u("Open Connection And Log In")
- status, ret_values =\
- grk.run_key("Execute Command On BMC cat "
- + file_path + " | grep \"version=\"", ignore=1)
- return (ret_values.split("\n")[0]).split("=")[-1]
-
-###############################################################################
-
-
-###############################################################################
-def get_image_purpose(file_path):
-
- r"""
- Read the file for a purpose object.
-
- Description of argument(s):
- file_path The path to a file that holds the image purpose.
- """
-
- grk.run_key_u("Open Connection And Log In")
- status, ret_values =\
- grk.run_key("Execute Command On BMC cat "
- + file_path + " | grep \"purpose=\"", ignore=1)
- return ret_values.split("=")[-1]
-
-###############################################################################
-
-
-###############################################################################
-def get_image_path(image_version):
-
- r"""
- Query the upload image dir for the presence of image matching
- the version that was read from the MANIFEST before uploading
- the image. Based on the purpose verify the activation object
- exists and is either READY or INVALID.
-
- Description of argument(s):
- image_version The version of the image that should match one
- of the images in the upload dir.
- """
-
- upload_dir = BuiltIn().get_variable_value("${upload_dir_path}")
- grk.run_key_u("Open Connection And Log In")
- status, image_list =\
- grk.run_key("Execute Command On BMC ls -d " + upload_dir
- + "*/")
-
- image_list = image_list.split("\n")
- retry = 0
- while (retry < 10):
- for i in range(0, len(image_list)):
- version = get_image_version(image_list[i] + "MANIFEST")
- if (version == image_version):
- return image_list[i]
- time.sleep(10)
- retry += 1
-
-###############################################################################
-
-
-###############################################################################
-def verify_image_upload(timeout=3):
-
- r"""
- Verify the image was uploaded correctly and that it created
- a valid d-bus object. If the first check for the image
- fails, try again until we reach the timeout.
-
- Description of argument(s):
- timeout How long, in minutes, to keep trying to find the
- image on the BMC. Default is 3 minutes.
- """
-
- image_version = BuiltIn().get_variable_value("${image_version}")
- image_path = get_image_path(image_version)
- image_version_id = image_path.split("/")[-2]
- BuiltIn().set_global_variable("${version_id}", image_version_id)
-
- grk.run_key_u("Open Connection And Log In")
- image_purpose = get_image_purpose(image_path + "MANIFEST")
- if (image_purpose == var.VERSION_PURPOSE_BMC or
- image_purpose == var.VERSION_PURPOSE_HOST):
- uri = var.SOFTWARE_VERSION_URI + image_version_id
- ret_values = ""
- for itr in range(timeout * 2):
- status, ret_values = \
- grk.run_key("Read Attribute " + uri + " Activation")
-
- if ((ret_values == var.READY) or (ret_values == var.INVALID)
- or (ret_values == var.ACTIVE)):
- return True
- else:
- time.sleep(30)
-
- # If we exit the for loop, the timeout has been reached
- gp.print_var(ret_values)
- return False
- else:
- gp.print_var(image_purpose)
- return False
-
-###############################################################################
-
-
-###############################################################################
-def verify_image_not_in_bmc_uploads_dir(image_version, timeout=3):
-
- r"""
- Check that an image with the given version is not unpacked inside of the
- BMCs image uploads directory. If no image is found, retry every 30 seconds
- until the given timeout is hit, in case the BMC takes time
- unpacking the image.
-
- Description of argument(s):
- image_version The version of the image to look for on the BMC.
- timeout How long, in minutes, to try to find an image on the BMC.
- Default is 3 minutes.
- """
-
- grk.run_key('Open Connection And Log In')
- upload_dir_path = BuiltIn().get_variable_value("${upload_dir_path}")
- for i in range(timeout * 2):
- stat, grep_res = grk.run_key('Execute Command On BMC '
- + 'ls ' + upload_dir_path + '*/MANIFEST 2>/dev/null '
- + '| xargs grep -rl "version=' + image_version + '"')
- image_dir = os.path.dirname(grep_res.split('\n')[0])
- if '' != image_dir:
- grk.run_key('Execute Command On BMC rm -rf ' + image_dir)
- BuiltIn().fail('Found invalid BMC Image: ' + image_dir)
- time.sleep(30)
-
-###############################################################################
diff --git a/extended/test_uploadimage.robot b/extended/test_uploadimage.robot
index 8aea9d6..8aa0595 100644
--- a/extended/test_uploadimage.robot
+++ b/extended/test_uploadimage.robot
@@ -19,7 +19,7 @@
Library Collections
Library String
Library OperatingSystem
-Library test_uploadimage.py
+Library ../lib/code_update_utils.py
Test Teardown Upload Image Teardown