tests: Add a basic test that just runs an app

tingping/wmclass
Alexander Larsson 2016-04-27 21:23:42 +02:00
parent 3d3ebf814d
commit 327f432219
7 changed files with 408 additions and 2 deletions

10
.gitignore vendored
View File

@ -40,6 +40,8 @@ xdg-app-dbus.[ch]
xdg-app-systemd-dbus.[ch]
xdg-app-resources.[ch]
xdg-dbus-proxy
xdg-app-system-helper
xdg-desktop-portal
*.service
xdg-app.env
xdg-app.sh
@ -67,3 +69,11 @@ XdgApp-1.0.*
/tests/hello*.xdgapp
/tests/platform*.xdgapp
/tests/repo
*.test
/tests/*.sh.log
/tests/*.sh.test
/tests/*.sh.trs
po/.intltool-merge-cache
po/Makefile.in.in
po/POTFILES
system-helper/org.freedesktop.XdgApp.policy

View File

@ -36,6 +36,17 @@ test_doc_portal_DEPENDENCIES = tests/services/org.freedesktop.portal.Documents.s
check_PROGRAMS += $(TEST_PROGS)
installed_test_data = \
tests/libtest.sh \
tests/make-test-app.sh \
tests/make-test-runtime.sh \
tests/make-test-bundles.sh \
$(NULL)
test_scripts = \
tests/test-basic.sh \
$(NULL)
test_programs = testdb test-doc-portal
@VALGRIND_CHECK_RULES@

141
tests/libtest.sh 100644
View File

@ -0,0 +1,141 @@
# Source library for shell script tests
#
# Copyright (C) 2016 Alexander Larsson <alexl@redhat.com>
# Copyright (C) 2011 Colin Walters <walters@verbum.org>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
if [ -n "${G_TEST_SRCDIR:-}" ]; then
test_srcdir="${G_TEST_SRCDIR}/tests"
else
test_srcdir=$(dirname $0)
fi
if [ -n "${G_TEST_BUILDDIR:-}" ]; then
test_builddir="${G_TEST_BUILDDIR}/tests"
else
test_builddir=$(dirname $0)
fi
assert_not_reached () {
echo $@ 1>&2; exit 1
}
test_tmpdir=$(pwd)
# Sanity check that we're in a tmpdir that has
# just .testtmp (created by tap-driver for `make check`,
# or nothing at all (as ginstest-runner does)
if ! test -f .testtmp; then
files=$(ls)
if test -n "${files}"; then
ls -l
assert_not_reached "test tmpdir=${test_tmpdir} is not empty; run this test via \`make check TESTS=\`, not directly"
fi
# Remember that this is an acceptable test $(pwd), for the benefit of
# C and JS tests which may source this file again
touch .testtmp
fi
export G_DEBUG=fatal-warnings
# Also, unbreak `tar` inside `make check`...Automake will inject
# TAR_OPTIONS: --owner=0 --group=0 --numeric-owner presumably so that
# tarballs are predictable, except we don't want this in our tests.
unset TAR_OPTIONS
if test -n "${OT_TESTS_DEBUG:-}"; then
set -x
fi
if test -n "${OT_TESTS_VALGRIND:-}"; then
CMD_PREFIX="env G_SLICE=always-malloc valgrind -q --leak-check=full --num-callers=30 --suppressions=${test_srcdir}/xdg-app-valgrind.supp"
else
CMD_PREFIX=""
fi
export XDG_DATA_HOME=${test_tmpdir}/share
export XDG_APP="${CMD_PREFIX} xdg-app"
assert_streq () {
test "$1" = "$2" || (echo 1>&2 "$1 != $2"; exit 1)
}
assert_not_streq () {
(! test "$1" = "$2") || (echo 1>&2 "$1 == $2"; exit 1)
}
assert_has_file () {
test -f "$1" || (echo 1>&2 "Couldn't find '$1'"; exit 1)
}
assert_has_dir () {
test -d "$1" || (echo 1>&2 "Couldn't find '$1'"; exit 1)
}
assert_not_has_file () {
if test -f "$1"; then
sed -e 's/^/# /' < "$1" >&2
echo 1>&2 "File '$1' exists"
exit 1
fi
}
assert_not_file_has_content () {
if grep -q -e "$2" "$1"; then
sed -e 's/^/# /' < "$1" >&2
echo 1>&2 "File '$1' incorrectly matches regexp '$2'"
exit 1
fi
}
assert_not_has_dir () {
if test -d "$1"; then
echo 1>&2 "Directory '$1' exists"; exit 1
fi
}
assert_file_has_content () {
if ! grep -q -e "$2" "$1"; then
sed -e 's/^/# /' < "$1" >&2
echo 1>&2 "File '$1' doesn't match regexp '$2'"
exit 1
fi
}
assert_file_empty() {
if test -s "$1"; then
sed -e 's/^/# /' < "$1" >&2
echo 1>&2 "File '$1' is not empty"
exit 1
fi
}
setup_repo () {
. $(dirname $0)/make-test-runtime.sh
. $(dirname $0)/make-test-app.sh
xdg-app remote-add --user --no-gpg-verify repo repo
}
install_repo () {
${XDG_APP} --user install repo org.test.Platform master
${XDG_APP} --user install repo org.test.Hello master
}
run () {
${CMD_PREFIX} xdg-app run "$@"
}

View File

@ -31,7 +31,7 @@ gzip -c > ${DIR}/files/share/app-info/xmls/org.test.Hello.xml.gz <<EOF
</component>
</components>
EOF
cp org.test.Hello.png ${DIR}/files/share/app-info/icons/xdg-app/64x64/
cp $(dirname $0)/org.test.Hello.png ${DIR}/files/share/app-info/icons/xdg-app/64x64/
xdg-app build-finish --command=hello.sh ${DIR}
xdg-app build-export repo ${DIR}

View File

@ -11,10 +11,17 @@ sed -i s/Application/Runtime/ ${DIR}/metadata
mkdir -p ${DIR}/usr/bin
mkdir -p ${DIR}/usr/lib
ln -s ../lib ${DIR}/usr/lib64
ln -s ../lib ${DIR}/usr/lib32
BASH=`which bash`
LS=`which ls`
CAT=`which cat`
ECHO=`which echo`
cp ${BASH} ${DIR}/usr/bin
cp ${LS} ${DIR}/usr/bin
cp ${CAT} ${DIR}/usr/bin
cp ${ECHO} ${DIR}/usr/bin
ln -s bash ${DIR}/usr/bin/sh
for i in `ldd ${BASH} | sed "s/.* => //" | awk '{ print $1}' | grep ^/`; do
for i in `ldd ${BASH} ${LS} ${CAT} ${ECHO} | sed "s/.* => //" | awk '{ print $1}' | grep -v :$ | grep ^/ | sort -u`; do
cp "$i" ${DIR}/usr/lib/
done

View File

@ -0,0 +1,38 @@
#!/bin/bash
#
# Copyright (C) 2011 Colin Walters <walters@verbum.org>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
set -euo pipefail
. $(dirname $0)/libtest.sh
echo "1..2"
${XDG_APP} --version > version_out
assert_file_has_content version_out '^xdg-app '
echo "ok version"
setup_repo
install_repo
run org.test.Hello > hello_out
assert_file_has_content hello_out '^Hello world, from a sandbox$'
echo "ok hello"

View File

@ -0,0 +1,199 @@
{
g_type_init_with_debug_flags calloc
Memcheck:Leak
fun:calloc
...
fun:g_type_init_with_debug_flags
...
}
{
g_type_add_interface_static malloc
Memcheck:Leak
fun:malloc
...
fun:g_type_add_interface_static
...
}
{
g_type_add_interface_dynamic malloc
Memcheck:Leak
fun:malloc
...
fun:g_type_add_interface_dynamic
...
}
{
g_type_class_ref malloc
Memcheck:Leak
fun:malloc
...
fun:g_type_class_ref
...
}
{
g_type_register_dynamic malloc
Memcheck:Leak
fun:malloc
...
fun:g_type_register_dynamic
...
}
{
g_type_init_with_debug_flags malloc
Memcheck:Leak
fun:malloc
...
fun:g_type_init_with_debug_flags
...
}
{
g_type_init_with_debug_flags realloc
Memcheck:Leak
fun:realloc
...
fun:g_type_init_with_debug_flags
...
}
{
g_test_add_vtable malloc
Memcheck:Leak
fun:malloc
...
fun:g_test_add_vtable
...
}
{
g_test_init
Memcheck:Leak
fun:malloc
...
fun:g_test_init
...
}
{
g_type_register_static malloc
Memcheck:Leak
fun:malloc
...
fun:g_type_register_static
...
}
{
g_type_register_static realloc
Memcheck:Leak
fun:realloc
...
fun:g_type_register_static
...
}
{
g_type_register_fundamental never freed
Memcheck:Leak
fun:malloc
...
fun:g_type_register_fundamental
...
}
{
g_type_class_ref never finalized
Memcheck:Leak
fun:calloc
...
fun:g_type_class_ref
...
}
{
DBusGValue qdata
Memcheck:Leak
fun:realloc
fun:g_realloc
fun:g_type_set_qdata
fun:_dbus_g_value_types_init
...
}
{
gettext conditional jump
Memcheck:Cond
fun:__GI___strcasecmp_l
fun:__gconv_open
fun:_nl_find_msg
fun:__dcigettext
...
}
{
gettext uninitialized value
Memcheck:Value8
fun:__GI___strcasecmp_l
fun:__gconv_open
fun:_nl_find_msg
fun:__dcigettext
...
}
{
font config invalid reads
Memcheck:Addr4
...
fun:FcConfigParseAndLoad
...
}
{
dynamic loader conditional jump
Memcheck:Cond
fun:index
fun:expand_dynamic_string_token
fun:_dl_map_object
fun:map_doit
fun:_dl_catch_error
fun:do_preload
fun:dl_main
...
}
{
g_vfs_get_local
Memcheck:Leak
...
fun:g_vfs_get_local
...
}
{
_g_io_modules_ensure_loaded
Memcheck:Leak
...
fun:_g_io_modules_ensure_loaded
...
}
{
_g_io_module_get_default
Memcheck:Leak
...
fun:_g_io_module_get_default
...
}
{
_dl_allocate_tls
Memcheck:Leak
...
fun:_dl_allocate_tls
...
}