-
Notifications
You must be signed in to change notification settings - Fork 2
Starting a new testing project
Contents
Run the following commands:
mkdir <new repo name>
cd <new repo name>
git init -b main
Replace <new repo name>
with the real name of the repository you are creating
git remote add origin <repository url>
Replace <repository url>
with the real url of the repository you are creating
new_repo
└── tests
├── common
└── configs
The above directory structure is recommended for new project with all tests being added to the test folder. The RAFT framework should also be cloned into the tests folder
The common directory is used to store code that can be shared between tests. For an example of this see the common test controller
The configs directory is used to store the common configuration for yours tests. It is recommended that the example rack and device configs from the raft examples folder are copied here, so they can be referred to later.
The below commands will create this structure for you:
mkdir -p tests/common
mkdir tests/configs
Below is a bash script that can be copied and modified install all the requirements for your test project.
It is intended to be used with the above directory structure, it should be run in the directory above tests
.
To modify an extend this script follow the comments at the bottom of the script. It has premade functions to allow for cloning extra repos, checking packages requirements and installing pip packages.
Install script
#!/usr/bin/env bash
MY_PATH="$(realpath ${BASH_SOURCE[0]})"
MY_DIR="$(dirname ${MY_PATH})"
RAFT_DIR="${MY_DIR}/tests/raft"
NO_COLOR="\e[0m"
RED="\e[0;31m"
CYAN="\e[0;36m"
YELLOW="\e[1;33m"
GREEN="\e[0;32m"
RED_BOLD="\e[1;31m"
BLUE_BOLD="\e[1;34m"
YELLOW_BOLD="\e[1;33m"
function ECHO()
{
echo -e "$*"
}
function DEBUG()
{
# if set -x is in use debug messages are useless as whole stript will be shown
if [[ "$-" =~ "x" ]]; then
return
fi
if [[ "${DEBUG_FLAG}" == "1" ]];then
ECHO "${BLUE_BOLD}DEBUG: ${CYAN}$*${NO_COLOR}" > /dev/stderr
fi
}
function INFO()
{
ECHO "${GREEN}$*${NO_COLOR}"
}
function WARNING()
{
ECHO "${YELLOW_BOLD}Warning: ${YELLOW}$*${NO_COLOR}" > /dev/stderr
}
function ERROR()
{
ECHO "${RED_BOLD}ERROR: ${RED}$*${NO_COLOR}"
exit 1
}
function check_installed()
{
DEBUG "BEGIN: $FUNCNAME $*"
pkg=$1
version=$2
check="$(command -v ${pkg})"
if [[ -n "${check}" ]];then
DEBUG "Package is installed: [${pkg}]"
if [[ -n "${version}" ]];then
DEBUG "Performing version check: [${version}]"
ver_check="$(${pkg} --version | grep ${version})"
if [[ -z "${ver_check}" ]];then
ERROR "${pkg} is installed but version is not [${version}]"
fi
DEBUG "${pkg} version is correct"
fi
return
fi
ERROR "Required package is not installed: [${pkg}]"
DEBUG "END: $FUNCNAME"
}
function install_pip_requirements()
{
DEBUG "BEGIN: $FUNCNAME $*"
local requirements_file="$1"
if [[ ! -e "${requirements_file}" ]];then
ERROR "Could not install pip requirements.\nFile not found: [${requirements_file}]"
fi
pip install -qr "${requirements_file}"
if [[ "$?" != "0" ]];then
ERROR "Pip install failed.\nPlease try manually with:\ncd ${RAFT_DIR}; pip install -r requirements.txt; cd -"
fi
DEBUG "END: $FUNCNAME"
}
function clone_repo()
{
DEBUG "BEGIN: $FUNCNAME $*"
local repo_url="$1"
if [[ -z "${repo_url}" ]];then
ERROR "A url for a repository must be passed to the clone repo function"
fi
local path="$2"
if [[ -z "${path}" ]];then
path="${MY_DIR}/$(echo "${repo_url}"|grep -Po '\/\K.*?(?=\.git)')"
fi
if [[ -e "${path}" ]];then
WARNING "[$path] appears to already be installed."
valid_resp=0
while [[ "${valid_resp}" == "0" ]]
do
read -p "Would you like to reinstall it? y/n"$'\n' result
case "${result}" in
"y"|"Y")
valid_resp=1
rm -rf "${path}"
;;
"n"|"N")
valid_resp=1
exit 0
;;
*)
continue
;;
esac
done
fi
git clone "${repo_url}" "${path}"
DEBUG "END: $FUNCNAME"
}
function clone_python_raft()
{
DEBUG "BEGIN: $FUNCNAME $*"
clone_repo [email protected]:rdkcentral/python_raft.git "${RAFT_DIR}"
install_pip_requirements "${RAFT_DIR}"/requirements.txt
DEBUG "END: $FUNCNAME"
}
### Check packages are installed ###
# check_installed package version
check_installed python3 "3.11.8"
### Clone required repos ###
# clone_repo url path
clone_python_raft
### Install required python packages ###
# install_pip_requirements
This script should be created and run in the top level of your repo.
new_repo
├── tests
│ ├── common
│ └── configs
└── install.sh
Once the script is created it can be run with the following commands:
chmod +x install.sh
./install.sh
After running the install script you should have the following directories:
new_repo
├── install.sh
└── tests
├── common
├── configs
└── raft
├── CHANGELOG.md
├── CONTRIBUTING.md
├── COPYING -> LICENSE
├── docs
├── examples
├── framework
├── installation
├── LICENSE
├── NOTICE
├── README.md
├── requirements.txt
└── tests
Simply copy the example configs from raft/examples/
to your configs directory and edit them as required.
cd tests
cp raft/examples/configs/example*.yml configs/
A common test controller allows users to implement their own custom methods that can be shared among all their tests.
Create a file called raft_controller.py
in the common
directory and insert the following code into it.
#!/usr/bin/env python3
import sys
from os import path
# Since this test is in a sub-directory we need to add the directory above
# so we can import the framework correctly
MY_PATH = path.abspath(__file__)
MY_DIR = path.dirname(MY_PATH)
sys.path.append(path.join(MY_DIR,'../raft/'))
from framework.core import testController,logModule
class RAFTController(testController):
def __init__(self, testName="", qcId="", maxRunTime=testController.TEST_MAX_RUN_TIME, level=logModule.STEP, loop=1, log=None):
super().__init__(testName=testName, qcId=qcId, maxRunTime=maxRunTime, level=level, loop=loop, log=log)