spiegel-keyman/linux/scripts/test/verify_api.tests.sh
Eberhard Beilharz e5c1f81037
fix(linux): fix problem with API checks with merge commits
This change fixes a problem if both `master` and a branch added the same
symbol with different version numbers. This causes a merge conflict which
previously caused the API checks to output an error. However, if the
version number in the .symbols file got updated since the base then
it's no error which this change implements.
2024-10-09 19:35:41 +02:00

105 lines
3.1 KiB
Bash
Executable file

#!/usr/bin/env bash
# Unit tests for verify_api.inc.sh
set -eu
shopt -s inherit_errexit
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
. "${THIS_SCRIPT%/*}/../../../resources/build/build-utils.sh"
## END STANDARD BUILD SCRIPT INCLUDE
. "${THIS_SCRIPT%/*}/test.inc.sh"
. "${KEYMAN_ROOT}/linux/scripts/verify_api.inc.sh"
fixture_setup() {
SONAME=1
LIB_NAME=libkeymancore
PKG_NAME="${LIB_NAME}${SONAME}"
EXIT_CODE=-1
}
test_compare_versions__less_patch() {
[[ $(compare_versions "17.0.197" "17.0.198") == -1 ]]
}
test_compare_versions__less_minor() {
[[ $(compare_versions "17.0.197" "17.1.197") == -1 ]]
}
test_compare_versions__less_major() {
[[ $(compare_versions "17.0.197" "18.0.0") == -1 ]]
}
test_compare_versions__greater() {
[[ $(compare_versions "17.0.198" "17.0.197") == 1 ]]
}
test_compare_versions__same() {
[[ $(compare_versions "17.0.197" "17.0.197") == 0 ]]
}
test_compare_versions__greater0() {
[[ $(compare_versions "17.0.197" "0") == 1 ]]
}
test_get_highest_version_in_symbols_file() {
local output
createBase alpha
echo ' (c++|optional)"typeinfo name for std::codecvt@Base" 17.0.244' >> linux/debian/libkeymancore1.symbols
git add linux/debian/libkeymancore1.symbols
git commit -m "API method added"
# Execute
output=$(get_highest_version_in_symbols_file "$(git rev-parse HEAD)")
echo "${output[*]}" # for logging
[[ "${output}" == "17.0.244" ]]
}
test_check_updated_version_number__LineInsertedInBranch_OK() {
local output
createBase alpha
local base_sha=$(git rev-parse master)
# Add a line in chore branch
sed -i 's/km_core_actions_dispose@Base 17.0.197/km_core_actions_dispose@Base 17.0.201/' linux/debian/libkeymancore1.symbols
echo " km_core_foo@Base 17.0.200" >> linux/debian/libkeymancore1.symbols
git add linux/debian/libkeymancore1.symbols
git commit -m "API method added in chore branch"
# Add a line in master branch
git checkout master
sed -i 's/km_core_actions_dispose@Base 17.0.197/km_core_actions_dispose@Base 17.0.199/' linux/debian/libkeymancore1.symbols
git add linux/debian/libkeymancore1.symbols
git commit -m "API method changed in master branch"
echo "readme" > README.md
git add README.md
git commit -m "Some change on master"
git checkout chore
# merge master into chore
git merge --strategy-option=ours master
echo "## Calling API verification"
pwd
GIT_SHA="$(git rev-parse HEAD)"
GIT_BASE="${base_sha}"
output=$(check_updated_version_number)
echo "${output[*]}" # for logging
[[ "${output[*]}" == *"OK: libkeymancore1.symbols file got updated with package version number"* ]]
}
fixture_setup
echo "(test logs are in /tmp/<testname>.log)"
run_test test_compare_versions__less_patch
run_test test_compare_versions__less_minor
run_test test_compare_versions__less_major
run_test test_compare_versions__greater
run_test test_compare_versions__same
run_test test_compare_versions__greater0
run_test test_get_highest_version_in_symbols_file
run_test test_check_updated_version_number__LineInsertedInBranch_OK