citadel/meta/recipes-extended/lsb/lsbtest/LSB_Test.sh

526 lines
12 KiB
Bash
Raw Normal View History

#!/bin/sh
# Copyright (C) 2012 Wind River Systems, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
WORK_DIR="/opt/lsb-test"
if [ `id -u` -ne 0 ]
then
cat << EOF
In order to install and run LSB testsuite, you need administrator privileges.
You are currently running this script as an unprivileged user.
EOF
exit 1
fi
ARCH=`uname -m`
if [ ${ARCH} != "i686" ] && [ ${ARCH} != "x86_64" ] && [ ${ARCH} != "ppc" ] && [ ${ARCH} != "ppc64" ]
then
echo "Error: Unsupported architecture"
exit 1
fi
which rpm
if [ $? -ne 0 ]
then
echo "No rpm command found"
exit 1
fi
RET=0
cd ${WORK_DIR} || exit 1
# Step 1: Download the LSB Packages
echo ""
echo "Download LSB packages..."
echo ""
if [ ! -e ./packages_list ]
then
echo "Error: Could not find packages list" >&2
exit 1
fi
. ./packages_list
PACKAGES_DIR="/var/opt/lsb/test/manager/packages/ftp.linuxfoundation.org/pub/lsb"
BASE_PACKAGES_DIR="${PACKAGES_DIR}/base/${LSB_RELEASE}/binary"
RUNTIME_BASE_PACKAGES_DIR="${PACKAGES_DIR}/test_suites/released-all/binary/runtime"
RUNTIME_PACKAGES_DIR="${PACKAGES_DIR}/test_suites/${LSB_RELEASE}/binary/runtime"
APP_PACKAGES_DIR="${PACKAGES_DIR}/app-battery/${LSB_RELEASE}/${LSB_ARCH}"
APP_TESTFILES_DIR="${PACKAGES_DIR}/app-battery/tests"
SNAPSHOTS_TESTFILES_DIR="${PACKAGES_DIR}/snapshots/appbat/tests"
if [ ! -d ${PACKAGES_DIR} ]
then
mkdir -p ${PACKAGES_DIR}
fi
if [ ! -d ${BASE_PACKAGES_DIR} ]
then
mkdir -p ${BASE_PACKAGES_DIR}
fi
if [ ! -d ${RUNTIME_BASE_PACKAGES_DIR} ]
then
mkdir -p ${RUNTIME_BASE_PACKAGES_DIR}
fi
if [ ! -d ${RUNTIME_PACKAGES_DIR} ]
then
mkdir -p ${RUNTIME_PACKAGES_DIR}
fi
if [ ! -d ${APP_PACKAGES_DIR} ]
then
mkdir -p ${APP_PACKAGES_DIR}
fi
if [ ! -d ${APP_TESTFILES_DIR} ]
then
mkdir -p ${APP_TESTFILES_DIR}
fi
# Official download server list. You can replace them with your own server.
SERVER_IPADDR="140.211.169.23"
SERVER_NAME="ftp.linuxfoundation.org"
if ! `grep -F -q "${SERVER_NAME}" /etc/hosts`; then
echo "${SERVER_IPADDR} ${SERVER_NAME} ${SERVER_NAME}" >> /etc/hosts
fi
#ping -c 5 ${SERVER_NAME}
#if [ $? -ne 0 ]
#then
# echo "The server: ${SERVER_NAME} is unreachable"
# exit 1
#fi
SERVER1="\
http://${SERVER_NAME}/pub/lsb/base/released-all/binary"
SERVER2="\
http://${SERVER_NAME}/pub/lsb/test_suites/released-all/binary/runtime"
SERVER3="\
http://${SERVER_NAME}/pub/lsb/test_suites/${LSB_RELEASE}/binary/runtime"
SERVER4="\
http://${SERVER_NAME}/pub/lsb/app-battery/${LSB_RELEASE}/${LSB_ARCH}"
SERVER5="\
http://${SERVER_NAME}/pub/lsb/app-battery/tests"
# We using "curl" as a download tool, "wget" is an alternative.
CURL=`which curl`
WGET=`which wget`
if [ ! -z ${CURL} ]
then
DOWNLOAD_CMD="${CURL} -R -L -f --retry 3 --retry-delay 4 --connect-timeout 180 --compressed -C - -o"
elif [ ! -z ${WGET} ]
then
DOWNLOAD_CMD="${WGET} -c -t 5 -O"
else
echo "Can not find a download tool, please install curl or wget."
exit 1
fi
cd ${BASE_PACKAGES_DIR}
for pkg in ${BASE_PACKAGES_LIST}; do
if [ ! -f ${pkg} ]
then
#${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER1}/${pkg} > /dev/null 2>&1
${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER1}/${pkg}
if [ $? -eq 0 ]
then
mv -f ${pkg}".#part" ${pkg}
echo "Download ${pkg} successfully."
else
echo "Download ${pkg} failed."
RET=1
fi
fi
done
cd ${RUNTIME_BASE_PACKAGES_DIR}
for pkg in ${RUNTIME_BASE_PACKAGES_LIST}; do
if [ ! -f ${pkg} ]
then
#${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER2}/${pkg} > /dev/null 2>&1
${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER2}/${pkg}
if [ $? -eq 0 ]
then
mv -f ${pkg}".#part" ${pkg}
echo "Download ${pkg} successfully."
else
echo "Download ${pkg} failed."
RET=1
fi
fi
done
cd ${RUNTIME_PACKAGES_DIR}
for pkg in ${RUNTIME_PACKAGES_LIST}; do
if [ ! -f ${pkg} ]
then
#${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER3}/${pkg} > /dev/null 2>&1
${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER3}/${pkg}
if [ $? -eq 0 ]
then
mv -f ${pkg}".#part" ${pkg}
echo "Download ${pkg} successfully."
else
echo "Download ${pkg} failed."
RET=1
fi
fi
done
cd ${APP_PACKAGES_DIR}
for pkg in ${APP_PACKAGES_LIST}; do
if [ ! -f ${pkg} ]
then
#${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER4}/${pkg} > /dev/null 2>&1
${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER4}/${pkg}
if [ $? -eq 0 ]
then
mv -f ${pkg}".#part" ${pkg}
echo "Download ${pkg} successfully."
else
echo "Download ${pkg} failed."
RET=1
fi
fi
done
cd ${APP_TESTFILES_DIR}
for pkg in ${APP_TESTFILES_LIST}; do
if [ ! -f ${pkg} ]
then
#${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER5}/${pkg} > /dev/null 2>&1
${DOWNLOAD_CMD} ${pkg}".#part" ${SERVER5}/${pkg}
if [ $? -eq 0 ]
then
mv -f ${pkg}".#part" ${pkg}
echo "Download ${pkg} successfully."
else
echo "Download ${pkg} failed."
RET=1
fi
fi
done
if [ ${RET} -ne 0 ]
then
echo "Download some packages failed. Please download them again."
exit 1
fi
# Step 2: Install the LSB Packages
echo ""
echo "Install LSB packages..."
echo ""
# Kill lighttpd
ps aux | grep "lighttpd" | grep -v -q "grep"
if [ $? -eq 0 ]
then
killall lighttpd >/dev/null 2>&1
fi
# Start avahi-daemon
ps aux | grep "avahi-daemon" | grep -v -q "grep"
if [ $? -ne 0 ]
then
/etc/init.d/avahi-daemon start >/dev/null 2>&1
fi
LSB_START_CMD="/opt/lsb/test/manager/bin/dist-checker-start.pl"
LSB_STOP_CMD="/opt/lsb/test/manager/bin/dist-checker-stop.pl"
PLATFORM_FILE="/etc/rpm/platform"
RPM_INSTALL_CMD="rpm --quiet --nodeps --replacepkgs --nosignature -i --ignoreos"
RPM_INSTALL_CMD_NOSCRIPTS="rpm --quiet --nodeps --replacepkgs --noscripts --nosignature -i --ignoreos"
# If the lsb has been started, stop it first.
if [ -x ${LSB_STOP_CMD} ]
then
${LSB_STOP_CMD}
fi
if [ ! -d /etc/rpm ]
then
mkdir -p /etc/rpm
fi
if [ ! -f ${PLATFORM_FILE} ]
then
touch ${PLATFORM_FILE}
fi
if ! `grep -F -q "noarch-suse" ${PLATFORM_FILE}`; then
if [ ${ARCH} = i686 ];then
echo "i486-suse" >> ${PLATFORM_FILE}
echo "i486-noarch" >> ${PLATFORM_FILE}
echo "i486-pc" >> ${PLATFORM_FILE}
echo "noarch-suse" >> ${PLATFORM_FILE}
elif [ ${ARCH} = x86_64 ]; then
echo "i486-suse" >> ${PLATFORM_FILE}
echo "i486-noarch" >> ${PLATFORM_FILE}
echo "i486-pc" >> ${PLATFORM_FILE}
echo "i486-.*-linux.*" >> ${PLATFORM_FILE}
echo "noarch-suse" >> ${PLATFORM_FILE}
echo "${ARCH}-suse" >> ${PLATFORM_FILE}
echo "${ARCH}-noarch" >> ${PLATFORM_FILE}
echo "${ARCH}-pc" >> ${PLATFORM_FILE}
else
echo "${ARCH}-suse" >> ${PLATFORM_FILE}
echo "${ARCH}-noarch" >> ${PLATFORM_FILE}
echo "${ARCH}-pc" >> ${PLATFORM_FILE}
echo "noarch-suse" >> ${PLATFORM_FILE}
fi
fi
if [ -d ${BASE_PACKAGES_DIR} ]
then
cd ${BASE_PACKAGES_DIR}
for pkg in ${BASE_PACKAGES_LIST}
do
rpm --quiet -q ${pkg%\.*}
if [ $? -ne 0 ]; then
$RPM_INSTALL_CMD ${pkg}
fi
done
fi
if [ -d ${RUNTIME_BASE_PACKAGES_DIR} ]
then
cd ${RUNTIME_BASE_PACKAGES_DIR}
for pkg in ${RUNTIME_BASE_PACKAGES_LIST}
do
rpm --quiet -q ${pkg%\.*}
if [ $? -ne 0 ]; then
$RPM_INSTALL_CMD ${pkg}
fi
done
fi
if [ -d ${RUNTIME_PACKAGES_DIR} ]
then
cd ${RUNTIME_PACKAGES_DIR}
for pkg in ${RUNTIME_PACKAGES_LIST}
do
rpm --quiet -q ${pkg%\.*}
if [ $? -ne 0 ]; then
$RPM_INSTALL_CMD ${pkg}
fi
done
fi
if [ -d ${APP_PACKAGES_DIR} ]
then
cd ${APP_PACKAGES_DIR}
for pkg in ${APP_PACKAGES_LIST}
do
echo "${pkg}" | grep -q "apache\|xpdf"
if [ $? -eq 0 ]
then
rpm --quiet -q ${pkg%\.*}
if [ $? -ne 0 ]; then
$RPM_INSTALL_CMD_NOSCRIPTS ${pkg}
fi
else
rpm --quiet -q ${pkg%\.*}
if [ $? -ne 0 ]; then
$RPM_INSTALL_CMD ${pkg}
fi
fi
done
fi
if [ ! -d ${SNAPSHOTS_TESTFILES_DIR} ]
then
mkdir -p ${SNAPSHOTS_TESTFILES_DIR}
fi
if [ -d ${APP_TESTFILES_DIR} ]
then
cd ${APP_TESTFILES_DIR}
for pkg in ${APP_TESTFILES_LIST}
do
cp -f ${pkg} ${SNAPSHOTS_TESTFILES_DIR}
done
fi
cd ${WORK_DIR}
# Step 3: Set environment
echo ""
echo "Set environment..."
echo ""
check ()
{
if [ $? -eq 0 ]
then
echo "PASS"
else
echo "FAIL"
exit 1
fi
}
echo ""
echo "---------------------------------"
echo "Create the Dirnames on target"
if [ ! -d /etc/rpm/sysinfo ]
then
mkdir -p /etc/rpm/sysinfo
fi
cat > /etc/rpm/sysinfo/Dirnames << EOF
/etc/opt/lsb
/home/tet/LSB.tools
/opt/lsb-tet3-lite/lib/ksh
/opt/lsb-tet3-lite/lib/perl
/opt/lsb-tet3-lite/lib/posix_sh
/opt/lsb-tet3-lite/lib/tet3
/opt/lsb-tet3-lite/lib/xpg3sh
/opt/lsb/appbat/lib/python2.4/site-packages/qm
/opt/lsb/appbat/lib/python2.4/site-packages/qm/external
/opt/lsb/appbat/lib/python2.4/site-packages/qm/external/DocumentTemplate
/opt/lsb/appbat/lib/python2.4/site-packages/qm/test
/opt/lsb/appbat/lib/python2.4/site-packages/qm/test/classes
/opt/lsb/appbat/lib/python2.4/site-packages/qm/test/web
/opt/lsb/test/doc
/opt/lsb/test/lib
/opt/lsb/test/qm/diagnostics
/opt/lsb/test/qm/doc
/opt/lsb/test/qm/doc/test/html
/opt/lsb/test/qm/doc/test/print
/opt/lsb/test/qm/dtml
/opt/lsb/test/qm/dtml/test
/opt/lsb/test/qm/messages/test
/opt/lsb/test/qm/tutorial/test/tdb
/opt/lsb/test/qm/tutorial/test/tdb/QMTest
/opt/lsb/test/qm/web
/opt/lsb/test/qm/web/images
/opt/lsb/test/qm/web/stylesheets
/opt/lsb/test/qm/xml
/opt/lsb/test/share
/usr/share/doc/lsb-runtime-test
/var/opt/lsb
/opt/lsb/test/desktop
/opt/lsb/test/desktop/fontconfig
/opt/lsb/test/desktop/freetype
/opt/lsb/test/desktop/gtkvts
/opt/lsb/test/desktop/libpng
/opt/lsb/test/desktop/xft
/opt/lsb/test/desktop/xml
/opt/lsb/test/desktop/xrender
EOF
if [ -f /etc/rpm/sysinfo/Dirnames ]
then
echo "Success to creat Dirnames file"
else
echo "Fail to creat Dirnames file"
fi
[ -x /sbin/ldconfig ] && {
echo ""
echo "---------------------------------"
echo "Update cache"
/sbin/ldconfig
check;
}
# Check loop device
if [ ! -b /dev/loop0 ]
then
insmod /lib/modules/`uname -r`/kernel/drivers/block/loop.ko
if [ $? != 0 ];then
echo "Insmod loop.ko failed."
fi
fi
# Resolve localhost
LOCALHOST=`hostname`
if ! `grep -F -q "$LOCALHOST" /etc/hosts`; then
echo "127.0.0.1 $LOCALHOST" >> /etc/hosts
fi
# Workaround to add part of locales for LSB test
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE -f ISO-8859-15 de_DE.ISO-8859-15
localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-15 en_US.ISO-8859-15
localedef -i en_US -f ISO-8859-1 en_US.ISO-8859-1
localedef -i en_US -f ISO-8859-1 en_US
localedef -i en_US -f UTF-8 en_US.UTF-8
localedef -i en_US -f ISO-8859-1 en_US.ISO8859-1
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP.eucjp
localedef -i se_NO -f UTF-8 se_NO.UTF-8
localedef -i ta_IN -f UTF-8 ta_IN
localedef -i es_ES -f ISO-8859-1 es_ES
localedef -i fr_FR@euro -f ISO-8859-1 fr_FR@euro
localedef -i is_IS -f UTF-8 is_IS.UTF-8
localedef -i zh_TW -f BIG5 zh_TW.BIG5
localedef -i en_US -f ISO-8859-15 en_US.ISO-8859-15
echo ""
echo "Installation done!"
echo ""
# Step 4: Start LSB test
if [ -x ${LSB_START_CMD} ]
then
${LSB_START_CMD}
fi
echo "---------------------------------"
echo "Run all the certification version of LSB Tests"
echo "---------------------------------"
LSB_DIST_CHECKER="/opt/lsb/test/manager/utils/dist-checker.pl"
SESSION="${WORK_DIR}/session"
if [ ! -e ${SESSION} ]
then
echo "Error: Could not find session file."
echo "You must run LSB test from webbrower."
exit 1
fi
if [ -x ${LSB_DIST_CHECKER} ]
then
${LSB_DIST_CHECKER} -v2 -f ${SESSION}
check
fi
echo ""
echo "LSB test complete. Please check the log file in /var/opt/lsb/test/manager/results/"
echo ""