Files
os-autotest/testcases/smoke_test/openruyi/pkg-test/test_pkg_function_install.sh

127 lines
4.1 KiB
Bash

#!/usr/bin/bash
# Copyright (c) 2026 ISCAS .ALL rights reserved.
# This program is licensed under Mulan PSL v2.
# You can use it according to the terms and conditions of the Mulan PSL v2.
# http://license.coscl.org.cn/MulanPSL2
# THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# #############################################
# @Author : yafen
# @Contact : yafen@iscas.ac.cn
# @Date : 2026-04-13
# @License : Mulan PSL v2
# @Desc : 测试软件包的安装功能
# ############################################
source "$OET_PATH/libs/locallibs/common_lib.sh"
function pkg_install() {
PKG_TEST=$1
LOG_INFO "开始测试 ${PKG_TEST} 软件包的安装功能"
dnf clean all
dnf makecache
# 检查是否已安装
if dnf list installed "${PKG_TEST}" &>/dev/null; then
LOG_INFO "检测到 ${PKG_TEST} 已安装,脚本将保持安装状态"
INSTALLED_BEFORE=true
else
LOG_INFO "检测到 ${PKG_TEST} 未安装,将在测试中安装"
INSTALLED_BEFORE=false
fi
# 检查 yum 源中是否存在软件包
LOG_INFO "检查 yum 源中是否存在 ${PKG_TEST} 软件包"
if ! dnf list available "${PKG_TEST}" &>/dev/null; then
LOG_ERROR "yum 源中未找到 ${PKG_TEST} 软件包"
exit 255
fi
# 如果之前已经安装,则执行卸载步骤
if [ "$INSTALLED_BEFORE" = true ]; then
LOG_INFO "卸载 ${PKG_TEST} 软件包"
dnf remove -y ${PKG_TEST}
CHECK_RESULT $? 0 0 "卸载 ${PKG_TEST} 失败"
LOG_INFO "环境已恢复到未安装状态"
fi
LOG_INFO "执行安装 ${PKG_TEST} 软件包"
dnf install -y ${PKG_TEST} --refresh
CHECK_RESULT $? 0 0 "安装 ${PKG_TEST} 失败"
# 验证安装是否成功
LOG_INFO "验证 ${PKG_TEST} 安装是否成功"
if dnf list installed ${PKG_TEST} &>/dev/null; then
LOG_INFO "${PKG_TEST} 安装验证成功"
else
LOG_ERROR "${PKG_TEST} 安装验证失败"
exit 1
fi
# 验证卸载功能
LOG_INFO "卸载 ${PKG_TEST} 软件包"
dnf remove -y ${PKG_TEST}
CHECK_RESULT $? 0 0 "卸载 ${PKG_TEST} 失败"
# 环境恢复:如果之前已安装,则重新安装软件包
if [ "$INSTALLED_BEFORE" = true ]; then
LOG_INFO "恢复环境:安装 ${PKG_TEST} 软件包"
dnf install -y ${PKG_TEST}
CHECK_RESULT $? 0 0 "安装 ${PKG_TEST} 失败"
LOG_INFO "环境已恢复到已安装状态"
else
LOG_INFO "保持 ${PKG_TEST} 未安装状态"
fi
INSTALLED_BEFORE=""
LOG_INFO "${PKG_TEST} 软件包安装功能测试完成"
}
function run_test() {
set -e
if [ -n "$PKG_INSTALL" ]; then
echo "优先使用环境变量 PKG_INSTALL: $PKG_INSTALL"
echo "$PKG_INSTALL" | tr ',' '\n' | while read -r pkg; do
[ -n "$pkg" ] && pkg_install "$pkg"
done
else
echo "环境变量未设置,使用默认文件路径"
FILE_PATH="$OET_PATH/.os-autotest/pkg-install"
if [ -f "$FILE_PATH" ]; then
while IFS= read -r line; do
[ -n "$line" ] && pkg_install "$line"
done < "$FILE_PATH"
else
LOG_ERROR "文件路径不存在: $FILE_PATH"
fi
fi
}
function post_test() {
if [ -z "$PKG_TEST" ]; then
return
fi
if [ "$INSTALLED_BEFORE" = true ]; then
LOG_INFO "恢复环境:安装 ${PKG_TEST} 软件包"
dnf install -y ${PKG_TEST} --refresh
CHECK_RESULT $? 0 0 "安装 ${PKG_TEST} 失败"
LOG_INFO "环境已恢复到已安装状态"
elif [ "$INSTALLED_BEFORE" = false ]; then
if dnf list installed "${PKG_TEST}" &>/dev/null; then
LOG_INFO "清理环境:卸载 ${PKG_TEST} 软件包"
dnf remove -y ${PKG_TEST}
CHECK_RESULT $? 0 0 "卸载 ${PKG_TEST} 失败"
LOG_INFO "环境已恢复到未安装状态"
fi
fi
}
INSTALLED_BEFORE=""
PKG_TEST=""
main "$@"