yocto-autobuilder-helper/scripts/test_send_qa_email.py
Alexis Lothoré 44650c9681 scripts/send_qa_email: re-clarify base and target revisions
There are some inversions in words used to describe elements of comparison
for regression reporting: the main function of send_qa_email starts using
"base" to talk about the target revision and "compare" to talk about the
reference against which it is compared. Then later in the script, the
"base" is used as "base of comparison"/reference revision, while the
"target" branch/revision appears. This becomes quite confusing when we need
to update the script

Re-align wording to avoid confusion:
- always use "target" to talk about current branch/revision of interest
  (the newest)
- always use "base" to talk about the reference branch/revision  (the
  oldest), against which we want to compare the target revision

Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2023-10-04 23:39:50 +01: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": {"targetbranch": None,
"basebranch": None, "release": None}, "expected": (None, None)},
{"name": "Master release", "input": {"targetbranch": "master",
"basebranch": None, "release": "yocto-4.2_M3.rc1"}, "expected": ("4.2_M2", "master")},
{"name": "Older release", "input": {"targetbranch": "kirkstone",
"basebranch": None, "release": "yocto-4.0.8.rc2"}, "expected": ("yocto-4.0.7", "kirkstone")},
{"name": "Master Next", "input": {"targetbranch": "master-next",
"basebranch": "master", "release": None}, "expected": ("master", "master-next")},
{"name": "Fork Master Next", "input": {"targetbranch": "ross/mut",
"basebranch": "master", "release": None}, "expected": ("master", "ross/mut")},
{"name": "Nightly a-quick", "input": {"targetbranch": "master",
"basebranch": 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']['targetbranch'], data['input']['basebranch'], 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()