tests: stop relying on environment in the new harness

Instead of relying on Meson setting up environment so that Weston and tests
find all their files, build those values into the tests. This way one can
execute a test program successfully wihtout Meson, simply by running it.

The old environment variables are still honoured if set. This might change in
the future.

Baking the source or build directory paths into the tests should not regress
reproducible builds, because the binaries where test-config.h values are used
will not be installed.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
Pekka Paalanen 2019-11-01 15:39:30 +02:00 committed by Daniel Stone
parent babb3b3bc2
commit 82dd6ce830
3 changed files with 17 additions and 3 deletions

View file

@ -64,7 +64,6 @@ exe_plugin_test = shared_library(
name_prefix: '', name_prefix: '',
install: false, install: false,
) )
config_h.set_quoted('TESTSUITE_PLUGIN_PATH', exe_plugin_test.full_path())
deps_zuc = [ dep_libshared ] deps_zuc = [ dep_libshared ]
if get_option('test-junit-xml') if get_option('test-junit-xml')
@ -250,6 +249,13 @@ env_test_weston = [
'WESTON_DATA_DIR=' + join_paths(meson.current_source_dir(), '..', 'data'), 'WESTON_DATA_DIR=' + join_paths(meson.current_source_dir(), '..', 'data'),
] ]
test_config_h = configuration_data()
test_config_h.set_quoted('WESTON_TEST_REFERENCE_PATH', meson.current_source_dir() + '/reference')
test_config_h.set_quoted('WESTON_MODULE_MAP', env_modmap)
test_config_h.set_quoted('WESTON_DATA_DIR', join_paths(meson.current_source_dir(), '..', 'data'))
test_config_h.set_quoted('TESTSUITE_PLUGIN_PATH', exe_plugin_test.full_path())
configure_file(output: 'test-config.h', configuration: test_config_h)
foreach t : tests foreach t : tests
t_name = 'test-' + t.get('name') t_name = 'test-' + t.get('name')
t_sources = t.get('sources', [t.get('name') + '-test.c']) t_sources = t.get('sources', [t.get('name') + '-test.c'])
@ -271,7 +277,7 @@ foreach t : tests
install: false, install: false,
) )
test(t.get('name'), t_exe, depends: t.get('test_deps', []), env: env_test_weston) test(t.get('name'), t_exe, depends: t.get('test_deps', []))
endforeach endforeach
# FIXME: the multiple loops is lame. rethink this. # FIXME: the multiple loops is lame. rethink this.

View file

@ -34,6 +34,7 @@
#include <sys/mman.h> #include <sys/mman.h>
#include <cairo.h> #include <cairo.h>
#include "test-config.h"
#include "shared/os-compatibility.h" #include "shared/os-compatibility.h"
#include "shared/xalloc.h" #include "shared/xalloc.h"
#include <libweston/zalloc.h> #include <libweston/zalloc.h>
@ -1025,7 +1026,7 @@ reference_path(void)
char *path = getenv("WESTON_TEST_REFERENCE_PATH"); char *path = getenv("WESTON_TEST_REFERENCE_PATH");
if (!path) if (!path)
return "./tests/reference"; return WESTON_TEST_REFERENCE_PATH;
return path; return path;
} }

View file

@ -31,6 +31,7 @@
#include "shared/helpers.h" #include "shared/helpers.h"
#include "weston-test-fixture-compositor.h" #include "weston-test-fixture-compositor.h"
#include "weston.h" #include "weston.h"
#include "test-config.h"
struct prog_args { struct prog_args {
int argc; int argc;
@ -180,6 +181,12 @@ execute_compositor(const struct compositor_setup *setup,
const char *ctmp; const char *ctmp;
int ret; int ret;
if (setenv("WESTON_MODULE_MAP", WESTON_MODULE_MAP, 0) < 0 ||
setenv("WESTON_DATA_DIR", WESTON_DATA_DIR, 0) < 0) {
fprintf(stderr, "Error: environment setup failed.\n");
return RESULT_HARD_ERROR;
}
#ifndef BUILD_DRM_COMPOSITOR #ifndef BUILD_DRM_COMPOSITOR
if (setup->backend == WESTON_BACKEND_DRM) { if (setup->backend == WESTON_BACKEND_DRM) {
fprintf(stderr, "DRM-backend required but not built, skipping.\n"); fprintf(stderr, "DRM-backend required but not built, skipping.\n");