[Libreoffice-commits] online.git: loolwsd/configure.ac loolwsd/Makefile.am loolwsd/README loolwsd/test
Michael Meeks
michael.meeks at collabora.com
Mon Apr 11 21:03:27 UTC 2016
loolwsd/Makefile.am | 22 ++++++++++++++
loolwsd/README | 66 ++++++++++++++++++++++++++------------------
loolwsd/configure.ac | 14 ++++++++-
loolwsd/test/.gitignore | 2 +
loolwsd/test/Makefile.am | 30 +++-----------------
loolwsd/test/data/hello.odt |binary
loolwsd/test/run_test.sh.in | 33 ++++++++++++++++++++++
loolwsd/test/run_unit.sh | 25 ----------------
loolwsd/test/run_unit.sh.in | 32 +++++++++++++++++++++
9 files changed, 145 insertions(+), 79 deletions(-)
New commits:
commit ea1e2493bf64a8ec4ac5b5791d10c9ea896a01a7
Author: Michael Meeks <michael.meeks at collabora.com>
Date: Mon Apr 11 18:21:16 2016 +0100
Re-factor tests, move jails & systemplate up a level into loolwsd.
Also generate the test scripts with config.status containing absolute
paths to make them easier to run, and enable the older unit tests.
diff --git a/loolwsd/Makefile.am b/loolwsd/Makefile.am
index c35b39c..0a336fe 100644
--- a/loolwsd/Makefile.am
+++ b/loolwsd/Makefile.am
@@ -86,6 +86,26 @@ EXTRA_DIST = discovery.xml \
loolwsd.service \
sysconfig.loolwsd
+if HAVE_LO_PATH
+
+ at SYSTEMPLATE_PATH@/system_stamp :
+ if test "z at SYSTEMPLATE_PATH@" != "z"; then rm -rf "@SYSTEMPLATE_PATH@"; fi
+ ${top_srcdir}/loolwsd-systemplate-setup "@SYSTEMPLATE_PATH@" "@LO_PATH@" && touch $@
+
+ at JAILS_PATH@ :
+ mkdir -p $@
+
+clean-local:
+ if test "z at JAILS_PATH@" != "z"; then rm -rf "@JAILS_PATH@"; fi
+ if test "z at SYSTEMPLATE_PATH@" != "z"; then rm -rf "@SYSTEMPLATE_PATH@"; fi
+
+run: @JAILS_PATH@ @SYSTEMPLATE_PATH@/system_stamp
+ @echo "Launching loolwsd - launch this in your browser:"
+ @echo " https://localhost:9980/loleaflet/dist/loleaflet.html?file_path=file://$(abs_top_srcdir)/test/data/hello.odt&host=wss://localhost:9980"
+ ./loolwsd --systemplate="@SYSTEMPLATE_PATH@" --lotemplate="@LO_PATH@" \
+ --childroot="@JAILS_PATH@" --allowlocalstorage
+endif
+
clean-cache:
# Intentionally don't use "*" below... Avoid risk of accidentally running rm -rf /*
test -n "@LOOLWSD_CACHEDIR@" && rm -rf "@LOOLWSD_CACHEDIR@"/[0-9a-f]
@@ -96,7 +116,7 @@ clean-cache:
# capabilities won't survive packaging anyway. Instead, handle it when
# installing the RPM or Debian package.
-all-local: loolforkit certificates
+all-local: loolforkit certificates @JAILS_PATH@ @SYSTEMPLATE_PATH@/system_stamp
if test "$$BUILDING_FROM_RPMBUILD" != yes; then \
sudo @SETCAP@ cap_fowner,cap_mknod,cap_sys_chroot=ep loolforkit; \
sudo @SETCAP@ cap_sys_admin=ep loolmount; \
diff --git a/loolwsd/README b/loolwsd/README
index 7034b9d..618fe6c 100644
--- a/loolwsd/README
+++ b/loolwsd/README
@@ -36,7 +36,8 @@ possibly iterating several times...
and then
- ./configure --enable-silent-rules --with-lokit-path=${MASTER}/include
+ ./configure --enable-silent-rules --with-lokit-path=${MASTER}/include \
+ --with-lo-path=${MASTER}/instdir --enable-debug
make
@@ -44,7 +45,7 @@ where ${MASTER} is the location of the LibreOffice source tree.
When building from a tarball less magic is needed.
-Run 'make check' after each commit. Requires loolwsd to be running.
+Run 'make check' after each commit.
Note that the loolforkit program needs the CAP_SYS_CHROOT capability,
thus you will be asked the root password when running make as it
@@ -79,7 +80,22 @@ If you're using the defaults you'll need to:
sudo mkdir -p /usr/local/var/cache/loolwsd
sudo chown `whoami` /usr/local/var/cache/loolwsd
-Now you need to set up a minimal chroot system, and directory for the jails:
+Now you can just do:
+
+ make run
+
+and follow the link that recommends (see loleaflet/README for more info).
+
+Again, ${MASTER} is location of the LibreOffice source tree with a built
+LibreOffice. This is work in progress, and consequently needs the latest
+LibreOffice master.
+
+
+Running manually
+----------------
+
+If you want to do the 'make run' yourself, you need to set up a minimal
+chroot system, and directory for the jails:
SYSTEMPLATE=`pwd`/systemplate # or tweak for your system
ROOTFORJAILS=`pwd`/jails # or tweak for your system
@@ -93,12 +109,6 @@ now do:
./loolwsd --systemplate=${SYSTEMPLATE} --lotemplate=${MASTER}/instdir --childroot=${ROOTFORJAILS}
-and connect loleaflet to that (see loleaflet/README for more info).
-
-Again, ${MASTER} is location of the LibreOffice source tree with a built
-LibreOffice. This is work in progress, and consequently needs the latest
-LibreOffice master.
-
The ${SYSTEMPLATE} is a directory tree set up using the
loolwsd-systemplate-setup script here. (It should not exist before
running the script.) It will contain the runtime environment needed by
@@ -114,24 +124,26 @@ ${SYSTEMPLATE} and the ${MASTER}/instdir directories into each chroot
jail, ${SYSTEMPLATE} and ${MASTER}/instdir need to be on the same file
system as ${ROOTFORJAILS}.
-Leaflet files are served itself by loolwsd internal file server. You can specify the
-root of this fileserver using the --fileserverroot flag in loolwsd commandline.
-By default, if you do not specify this flag, the parent directory of loolwsd/
-is assumed to be the fileserverroot. So, for development purposes, you can access
-the leaflet files (using /loleaflet/), but it is advised to explicitly set the
-fileserverroot to prevent any unwanted files from reading, especially when lool
-is deployed for normal public usage on servers.
-
-Please note that it is necessary that all the leaflet files that are meant to be
-served is under a directory named 'loleaflet'. Since, the loleaflet files, in
-lool git repo, are itself in a directory named 'loleaflet', this would work out of
-the box for development purposes.
-
-loolwsd only runs on HTTPS which means you would have to set up your own private
-key and certificate (in PEM format only). Currently, loolwsd assumes files with
-name cert.pem, and key.pem to be certificate and private key respectively.
-Dummy self-signed cert.pem and key.pem are already included, but it is better
-to replace those with your own files.
+Leaflet files are served itself by loolwsd internal file server. You
+can specify the root of this fileserver using the --fileserverroot
+flag in loolwsd commandline. By default, if you do not specify this
+flag, the parent directory of loolwsd/ is assumed to be the
+fileserverroot. So, for development purposes, you can access the
+leaflet files (using /loleaflet/), but it is advised to explicitly set
+the fileserverroot to prevent any unwanted files from reading,
+especially when lool is deployed for normal public usage on servers.
+
+Please note that it is necessary that all the leaflet files that are
+meant to be served is under a directory named 'loleaflet'. Since, the
+loleaflet files, in lool git repo, are itself in a directory named
+'loleaflet', this would work out of the box for development purposes.
+
+loolwsd only runs on HTTPS which means you would have to set up your
+own private key and certificate (in PEM format only). Currently,
+loolwsd assumes files with name cert.pem, and key.pem to be
+certificate and private key respectively. Dummy self-signed cert.pem
+and key.pem are already included, but it is better to replace those
+with your own files.
If you plan to hack on loolwsd, you probably want to familiarize
yourself with loolwsd's --test and --numprespawns switches, and the
diff --git a/loolwsd/configure.ac b/loolwsd/configure.ac
index 5434980..bd33091 100644
--- a/loolwsd/configure.ac
+++ b/loolwsd/configure.ac
@@ -78,7 +78,7 @@ AS_IF([test "$enable_debug" = yes -a -n "$with_poco_libs"],
[POCO_DEBUG_SUFFIX=])
AS_IF([test "$enable_debug" = yes],
- [AC_DEFINE([ENABLE_DEBUG],1,[Whether to compile in some extra debugging support code])])
+ [AC_DEFINE([ENABLE_DEBUG],1,[Whether to compile in some extra debugging support code and disable some security pieces ])])
# Test for build environment
@@ -97,12 +97,16 @@ dnl
dnl lo_path is not required; but useful for testing.
dnl
LO_PATH=
+JAIL_PATH=not-set
+SYSTEMPLATE_PATH=not-set
have_lo_path=false
AC_MSG_CHECKING([whether to run tests against a LibreOffice])
if test -n "$with_lo_path"; then
version_file="$with_lo_path/program/versionrc"
if test -f $version_file; then
LO_PATH="$with_lo_path"
+ JAILS_PATH="\${abs_top_builddir}/jails"
+ SYSTEMPLATE_PATH="\${abs_top_builddir}/systemplate"
have_lo_path=true
lo_msg="test against $LO_PATH"
AC_MSG_RESULT([yes])
@@ -114,6 +118,8 @@ else
AC_MSG_RESULT([no])
fi
AC_SUBST(LO_PATH)
+AC_SUBST(JAILS_PATH)
+AC_SUBST(SYSTEMPLATE_PATH)
AM_CONDITIONAL(HAVE_LO_PATH,[test "$have_lo_path" = "true"])
AS_IF([test -n "$with_poco_includes"],
@@ -209,6 +215,9 @@ AC_SUBST(LOOLWSD_CONFIGDIR)
AC_CONFIG_FILES([Makefile
test/Makefile
loolwsd.spec])
+AC_CONFIG_FILES([test/run_unit.sh],[chmod +x test/run_unit.sh])
+AC_CONFIG_FILES([test/run_test.sh],[chmod +x test/run_test.sh])
+
AC_OUTPUT
AC_LANG_POP
@@ -220,6 +229,9 @@ Configuration:
LOKit path ${lokit_msg}
LO integration tests ${lo_msg}
SSL support ${enable_ssl}
+
+ Systemplate path ${systemplate_msg}
+ Jail path ${jail_msg}
"
dnl vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/loolwsd/test/.gitignore b/loolwsd/test/.gitignore
index 2016409..908d52e 100644
--- a/loolwsd/test/.gitignore
+++ b/loolwsd/test/.gitignore
@@ -9,3 +9,5 @@ Makefile.in
*.lo
*.o
test
+run_unit.sh
+run_test.sh
diff --git a/loolwsd/test/Makefile.am b/loolwsd/test/Makefile.am
index f0a9c21..49c2567 100644
--- a/loolwsd/test/Makefile.am
+++ b/loolwsd/test/Makefile.am
@@ -1,9 +1,6 @@
# variables for tests
jails=${top_builddir}/test/jails
systemplate=${top_builddir}/test/systemplate
-export jails
-export systemplate
-export LO_PATH
AUTOMAKE_OPTION = serial-tests
@@ -16,10 +13,8 @@ lib_LTLIBRARIES = unit-timeout.la unit-prefork.la unit-storage.la
AM_CPPFLAGS = -pthread -I$(top_srcdir)
test_CPPFLAGS = -DTDOC=\"$(top_srcdir)/test/data\"
-
-test_LDADD = $(CPPUNIT_LIBS)
-
test_SOURCES = httpposttest.cpp httpwstest.cpp test.cpp ../LOOLProtocol.cpp
+test_LDADD = $(CPPUNIT_LIBS)
# unit test modules:
unit_timeout_la_SOURCES = UnitTimeout.cpp
@@ -29,34 +24,19 @@ unit_prefork_la_LDFLAGS = -module
unit_storage_la_SOURCES = UnitStorage.cpp
unit_storage_la_LDFLAGS = -module
-${systemplate}/system_stamp :
- rm -rf ${systemplate}
- ${top_srcdir}/loolwsd-systemplate-setup ${systemplate} ${LO_PATH} && touch ${systemplate}/system_stamp
-
-${jails} :
- mkdir -p ${jails}
-
${top_builddir}/test/run_unit.sh.log ${top_builddir}/test/run_unit.sh.trs : \
- ${systemplate}/system_stamp ${jails} \
+ ${systemplate}/system_stamp @JAILS_PATH@ \
${top_srcdir}/test/run_unit.sh \
- ${top_builddir}/loolwsd \
- ${top_builddir}/loolforkit \
- unit-timeout.la unit-prefork.la unit-storage.la
+ ${top_builddir}/loolwsd ${top_builddir}/loolforkit \
+ $(wildcard *.la)
if ${top_srcdir}/test/run_unit.sh; then \
touch ${top_builddir}/test/run_unit.sh.log; \
fi
if HAVE_LO_PATH
-TESTS = ${top_builddir}/test/run_unit.sh ${top_builddir}/test/test
-
-clean-local:
- rm -rf ${top_builddir}/test/jails
- rm -rf ${systemplate}
- rm -f ${top_builddir}/test/unit_stamp;
+TESTS = ${top_srcdir}/test/run_unit.sh ${top_srcdir}/test/run_test.sh
else
TESTS = ${top_builddir}/test/test
endif
EXTRA_DIST = data/hello.odt data/hello.txt $(test_SOURCES) run_unit.sh
-
-
diff --git a/loolwsd/test/data/hello.odt b/loolwsd/test/data/hello.odt
index 8340bfb..9624a1c 100644
Binary files a/loolwsd/test/data/hello.odt and b/loolwsd/test/data/hello.odt differ
diff --git a/loolwsd/test/run_test.sh.in b/loolwsd/test/run_test.sh.in
new file mode 100755
index 0000000..84d907b
--- /dev/null
+++ b/loolwsd/test/run_test.sh.in
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# DO NOT EDIT - this file is generated from run_test.sh.in.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+test_build="${abs_top_builddir}/test"
+test_output="$test_build/run_test.sh.trs"
+test_log_output="$test_build/test_output"
+
+mkdir -p $test_log_output
+
+# result logging
+echo > $test_output
+
+${abs_top_builddir}/loolwsd --systemplate="@SYSTEMPLATE_PATH@" --lotemplate="@LO_PATH@" \
+ --childroot="@JAILS_PATH@" --allowlocalstorage 2>$test_log_output/run_test.log &
+
+sleep 1 # sad - need to add a wait to the start of test.cpp ...
+
+cd $test_build
+if ./test; then
+ echo "Test run_test.sh passed."
+ echo ":test-result: PASS run_test.sh" >> $test_output
+else
+ cat $test_log_output/run_test.log
+ echo "============================================================="
+ echo "Test failed on unit:"
+ echo "============================================================="
+ echo ":test-result: FAIL run_test.sh" >> $test_output
+fi
+
+kill $!
diff --git a/loolwsd/test/run_unit.sh b/loolwsd/test/run_unit.sh.in
similarity index 56%
rename from loolwsd/test/run_unit.sh
rename to loolwsd/test/run_unit.sh.in
index a86fb70..b9bc830 100755
--- a/loolwsd/test/run_unit.sh
+++ b/loolwsd/test/run_unit.sh.in
@@ -1,7 +1,12 @@
#!/bin/sh
+#
+# DO NOT EDIT - this file is generated from run_unit.sh.in.
+#
export LOOL_LOGLEVEL=trace
+abs_top_builddir="@abs_top_builddir@"
+
mkdir -p test_output
# result logging
@@ -10,14 +15,16 @@ echo > run_unit.sh.trs
for tst in timeout storage prefork; do
tst_log="test_output/$tst.log"
echo "Running test: $tst | $tst_log ...";
- if ../loolwsd --systemplate=${systemplate} --lotemplate="${LO_PATH}" --childroot="${jails}" --unitlib=".libs/unit-$tst.so" 2> "$tst_log"; then
+ if ../loolwsd --systemplate="@SYSTEMPLATE_PATH@" --lotemplate="@LO_PATH@" \
+ --childroot="@JAILS_PATH@" --unitlib=".libs/unit-$tst.so" 2> "$tst_log"; then
echo "Test $tst passed."
echo ":test-result: PASS $tst" >> run_unit.sh.trs
else
cat "$tst_log"
echo "============================================================="
echo "Test failed on unit: $tst re-run with:"
- echo " $ gdb --args ../loolwsd --systemplate=${systemplate} --lotemplate=\"${LO_PATH}\" --childroot=\"${jails}\" --unitlib=\".libs/unit-$tst.so\""
+ echo " $ gdb --args ../loolwsd --systemplate=\"@SYSTEMPLATE_PATH@\" --lotemplate=\"@LO_PATH@\" \\"
+ echo " --childroot=\"@JAILS_PATH@\" --unitlib=\".libs/unit-$tst.so\""
echo "============================================================="
echo ":test-result: FAIL $tst" >> run_unit.sh.trs
fi
More information about the Libreoffice-commits
mailing list