yocto-autobuilder-helper/scripts/test_send_qa_email.py
Alexis Lothoré 3a7ee08fa1 scripts/send_qa_email: return previous tag when running a non-release master build
Some nightly builders are configured in yocto-autobuilder2 to run master builds.
Those build parameters currently skip all branches of
get_regression_base_and_target, which then return None, while the caller
expects a base and target tuple

Set default behaviour to return previous tag as comparison base and passed
branch as target for such builds

Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-03-23 16:06:37 +00:00

87 lines
4.3 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Test suite for send_qa_email.py
The suite needs a valid poky clone to run since it will
fetch and return revisions from remote repository. To run the suite,
set POKY_PATH environment variable accordingly:
`POKY_PATH=~/src/poky ./scripts/test_send_qa_email.py`
"""
import os
import sys
import unittest
import send_qa_email
class TestVersion(unittest.TestCase):
test_data_get_version = [
{"input": {"version": "4.1.2"}, "expected": "yocto-4.1.1"},
{"input": {"version": "4.1"}, "expected": "yocto-4.0"},
{"input": {"version": "4.1.1"}, "expected": "yocto-4.1"},
{"input": {"version": "4.1_M2"}, "expected": "4.1_M1"},
{"input": {"version": "4.1_M1"}, "expected": "yocto-4.0"},
{"input": {"version": "4.1.1.rc1"}, "expected": "yocto-4.1"},
{"input": {"version": "4.1.2.rc1"}, "expected": "yocto-4.1.1"},
{"input": {"version": "4.1_M3.rc1"}, "expected": "4.1_M2"},
{"input": {"version": "4.1_M3.rc4"}, "expected": "4.1_M2"},
{"input": {"version": "4.1_M1.rc1"}, "expected": "yocto-4.0"},
{"input": {"version": "4.1_M1.rc4"}, "expected": "yocto-4.0"},
{"input": {"version": "4.1.rc4"}, "expected": "yocto-4.0"}
]
test_data_is_release_version = [
{"input": "yocto-4.2", "expected":True},
{"input": "20230313-15", "expected":False},
{"input": None, "expected":False}
]
# This data represent real data returned by utils.getcomparisonbranch
# and the release argument passed to send-qa-email script
regression_inputs = [
{"name": "Arbitrary branch", "input": {"basebranch": None,
"comparebranch": None, "release": None}, "expected": (None, None)},
{"name": "Master release", "input": {"basebranch": "master",
"comparebranch": None, "release": "yocto-4.2_M3.rc1"}, "expected": ("4.2_M2", "master")},
{"name": "Older release", "input": {"basebranch": "kirkstone",
"comparebranch": None, "release": "yocto-4.0.8.rc2"}, "expected": ("yocto-4.0.7", "kirkstone")},
{"name": "Master Next", "input": {"basebranch": "master-next",
"comparebranch": "master", "release": None}, "expected": ("master", "master-next")},
{"name": "Fork Master Next", "input": {"basebranch": "ross/mut",
"comparebranch": "master", "release": None}, "expected": ("master", "ross/mut")},
{"name": "Nightly a-quick", "input": {"basebranch": "master",
"comparebranch": None, "release": "20230322-2"}, "expected": ("LAST_TAG", "master")},
]
def test_versions(self):
for data in self.test_data_get_version:
test_name = data["input"]["version"]
with self.subTest(f"Test {test_name} previous tag"):
self.assertEqual(send_qa_email.get_previous_tag(os.environ.get(
"POKY_PATH"), data["input"]["version"]), data["expected"])
def test_is_release_version(self):
for data in self.test_data_is_release_version:
with self.subTest(f"{data['input']}"):
self.assertEqual(send_qa_email.is_release_version(data['input']), data['expected'])
def test_get_regression_base_and_target(self):
for data in self.regression_inputs:
with self.subTest(data['name']):
base, target = send_qa_email.get_regression_base_and_target(
data['input']['basebranch'], data['input']['comparebranch'], data['input']['release'], os.environ.get("POKY_PATH"))
expected_base, expected_target = data["expected"]
# The comparison base can not be set statically in tests when it is supposed to be the previous tag,
# since the result will depend on current tags
if expected_base == "LAST_TAG":
self.assertIsNotNone(base)
else:
self.assertEqual(base, expected_base)
self.assertEqual(target, expected_target)
if __name__ == '__main__':
if os.environ.get("POKY_PATH") is None:
print("Please set POKY_PATH to proper poky clone location before running tests")
sys.exit(1)
unittest.main()