tests: migrate ivi-layout-test
The ivi-layout-test comprises of two halves: the client and the plugin. This migrates the test to the new test harness. In the old harness, the plugin was built as the test in meson.build and it fork & exec'd the client part. In the new harness client tests start from the client program which sets up the compositor in-process, so now the client is built as the test in meson.build and the plugin is just an additional file. Therefore there is not need for the plugin for fork & exec anything anymore, so all that code is removed. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
committed by
Daniel Stone
parent
57a4508ee4
commit
7f840b721a
@@ -34,6 +34,20 @@
|
|||||||
#include "weston-test-client-helper.h"
|
#include "weston-test-client-helper.h"
|
||||||
#include "ivi-application-client-protocol.h"
|
#include "ivi-application-client-protocol.h"
|
||||||
#include "ivi-test.h"
|
#include "ivi-test.h"
|
||||||
|
#include "weston-test-fixture-compositor.h"
|
||||||
|
|
||||||
|
static enum test_result_code
|
||||||
|
fixture_setup(struct weston_test_harness *harness)
|
||||||
|
{
|
||||||
|
struct compositor_setup setup;
|
||||||
|
|
||||||
|
compositor_setup_defaults(&setup);
|
||||||
|
setup.shell = SHELL_IVI;
|
||||||
|
setup.extra_module = "test-ivi-layout.so";
|
||||||
|
|
||||||
|
return weston_test_harness_execute_as_client(harness, &setup);
|
||||||
|
}
|
||||||
|
DECLARE_FIXTURE_SETUP(fixture_setup);
|
||||||
|
|
||||||
struct runner {
|
struct runner {
|
||||||
struct client *client;
|
struct client *client;
|
||||||
@@ -171,9 +185,6 @@ ivi_window_destroy(struct ivi_window *wnd)
|
|||||||
/******************************** tests ********************************/
|
/******************************** tests ********************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is a test program, launched by ivi-layout-test-plugin.c. Each TEST()
|
|
||||||
* is forked and exec'd as usual with the weston-test-runner framework.
|
|
||||||
*
|
|
||||||
* These tests make use of weston_test_runner global interface exposed by
|
* These tests make use of weston_test_runner global interface exposed by
|
||||||
* ivi-layout-test-plugin.c. This allows these tests to trigger compositor-side
|
* ivi-layout-test-plugin.c. This allows these tests to trigger compositor-side
|
||||||
* checks.
|
* checks.
|
||||||
|
|||||||
@@ -91,8 +91,6 @@ struct test_context {
|
|||||||
struct test_launcher {
|
struct test_launcher {
|
||||||
struct weston_compositor *compositor;
|
struct weston_compositor *compositor;
|
||||||
struct test_context context;
|
struct test_context context;
|
||||||
char exe[2048];
|
|
||||||
struct weston_process process;
|
|
||||||
const struct ivi_layout_interface *layout_interface;
|
const struct ivi_layout_interface *layout_interface;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -181,56 +179,10 @@ bind_runner(struct wl_client *client, void *data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
test_client_sigchld(struct weston_process *process, int status)
|
|
||||||
{
|
|
||||||
struct test_launcher *launcher =
|
|
||||||
container_of(process, struct test_launcher, process);
|
|
||||||
struct weston_compositor *c = launcher->compositor;
|
|
||||||
|
|
||||||
/* Chain up from weston-test-runner's exit code so that ninja
|
|
||||||
* knows the exit status and can report e.g. skipped tests. */
|
|
||||||
if (WIFEXITED(status))
|
|
||||||
weston_compositor_exit_with_code(c, WEXITSTATUS(status));
|
|
||||||
else
|
|
||||||
weston_compositor_exit_with_code(c, EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
idle_launch_client(void *data)
|
|
||||||
{
|
|
||||||
struct test_launcher *launcher = data;
|
|
||||||
pid_t pid;
|
|
||||||
sigset_t allsigs;
|
|
||||||
|
|
||||||
pid = fork();
|
|
||||||
if (pid == -1) {
|
|
||||||
weston_log("fatal: failed to fork '%s': %s\n", launcher->exe,
|
|
||||||
strerror(errno));
|
|
||||||
weston_compositor_exit_with_code(launcher->compositor,
|
|
||||||
EXIT_FAILURE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pid == 0) {
|
|
||||||
sigfillset(&allsigs);
|
|
||||||
sigprocmask(SIG_UNBLOCK, &allsigs, NULL);
|
|
||||||
execl(launcher->exe, launcher->exe, NULL);
|
|
||||||
weston_log("compositor: executing '%s' failed: %s\n",
|
|
||||||
launcher->exe, strerror(errno));
|
|
||||||
_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
launcher->process.pid = pid;
|
|
||||||
launcher->process.cleanup = test_client_sigchld;
|
|
||||||
weston_watch_process(&launcher->process);
|
|
||||||
}
|
|
||||||
|
|
||||||
WL_EXPORT int
|
WL_EXPORT int
|
||||||
wet_module_init(struct weston_compositor *compositor,
|
wet_module_init(struct weston_compositor *compositor,
|
||||||
int *argc, char *argv[])
|
int *argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct wl_event_loop *loop;
|
|
||||||
struct test_launcher *launcher;
|
struct test_launcher *launcher;
|
||||||
const struct ivi_layout_interface *iface;
|
const struct ivi_layout_interface *iface;
|
||||||
|
|
||||||
@@ -245,13 +197,6 @@ wet_module_init(struct weston_compositor *compositor,
|
|||||||
if (!launcher)
|
if (!launcher)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (weston_module_path_from_env("ivi-layout-test-client.ivi",
|
|
||||||
launcher->exe,
|
|
||||||
sizeof launcher->exe) == 0) {
|
|
||||||
weston_log("test setup failure: WESTON_MODULE_MAP not set\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
launcher->compositor = compositor;
|
launcher->compositor = compositor;
|
||||||
launcher->layout_interface = iface;
|
launcher->layout_interface = iface;
|
||||||
|
|
||||||
@@ -260,9 +205,6 @@ wet_module_init(struct weston_compositor *compositor,
|
|||||||
launcher, bind_runner) == NULL)
|
launcher, bind_runner) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
loop = wl_display_get_event_loop(compositor->wl_display);
|
|
||||||
wl_event_loop_add_idle(loop, idle_launch_client, launcher);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -301,18 +243,15 @@ runner_assert_fail(const char *cond, const char *file, int line,
|
|||||||
/*************************** tests **********************************/
|
/*************************** tests **********************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is a controller module: a plugin to ivi-shell.so, i.e. a sub-plugin.
|
* This is a IVI controller module requiring ivi-shell.so.
|
||||||
* This module is specially written to execute tests that target the
|
* This module is specially written to execute tests that target the
|
||||||
* ivi_layout API.
|
* ivi_layout API.
|
||||||
*
|
*
|
||||||
* This module is listed in meson.build which handles
|
* The test program containing the fixture setup and initiating the tests is
|
||||||
* this module specially by loading it in ivi-shell.
|
* test-ivi-layout-client (ivi-layout-test-client.c).
|
||||||
*
|
* That program uses the weston-test-runner framework to execute each TEST()
|
||||||
* Once Weston init completes, this module launches one test program:
|
* in ivi-layout-test-client.c with a fresh connection to the single
|
||||||
* ivi-layout-test-client.ivi (ivi-layout-test-client.c).
|
* compositor instance.
|
||||||
* That program uses the weston-test-runner
|
|
||||||
* framework to fork and exec each TEST() in ivi-layout-test-client.c with a fresh
|
|
||||||
* connection to the single compositor instance.
|
|
||||||
*
|
*
|
||||||
* Each TEST() in ivi-layout-test-client.c will bind to weston_test_runner global
|
* Each TEST() in ivi-layout-test-client.c will bind to weston_test_runner global
|
||||||
* interface. A TEST() will set up the client state, and issue
|
* interface. A TEST() will set up the client state, and issue
|
||||||
@@ -324,8 +263,7 @@ runner_assert_fail(const char *cond, const char *file, int line,
|
|||||||
*
|
*
|
||||||
* A RUNNER_TEST() function simply returns when it succeeds. If it fails,
|
* A RUNNER_TEST() function simply returns when it succeeds. If it fails,
|
||||||
* a fatal protocol error is sent to the client from runner_assert() or
|
* a fatal protocol error is sent to the client from runner_assert() or
|
||||||
* runner_assert_or_return(). This module catches the test program exit
|
* runner_assert_or_return().
|
||||||
* code and passes it out of Weston to the test harness.
|
|
||||||
*
|
*
|
||||||
* A single TEST() in ivi-layout-test-client.c may use multiple RUNNER_TEST()s to
|
* A single TEST() in ivi-layout-test-client.c may use multiple RUNNER_TEST()s to
|
||||||
* achieve multiple test points over a client action sequence.
|
* achieve multiple test points over a client action sequence.
|
||||||
|
|||||||
+22
-19
@@ -220,30 +220,33 @@ if get_option('shell-ivi')
|
|||||||
]
|
]
|
||||||
tests_weston_plugin += [
|
tests_weston_plugin += [
|
||||||
['ivi-layout-internal'],
|
['ivi-layout-internal'],
|
||||||
[
|
|
||||||
'ivi-layout',
|
|
||||||
[
|
|
||||||
'ivi-layout-test-plugin.c',
|
|
||||||
weston_test_server_protocol_h,
|
|
||||||
weston_test_protocol_c,
|
|
||||||
],
|
|
||||||
[ dep_libexec_weston ]
|
|
||||||
],
|
|
||||||
]
|
]
|
||||||
|
|
||||||
exe_ivi_layout_client = executable(
|
ivi_layout_test_plugin = shared_library(
|
||||||
'ivi-layout-test-client',
|
'test-ivi-layout',
|
||||||
'ivi-layout-test-client.c',
|
[
|
||||||
weston_test_client_protocol_h,
|
'ivi-layout-test-plugin.c',
|
||||||
weston_test_protocol_c,
|
weston_test_server_protocol_h,
|
||||||
ivi_application_client_protocol_h,
|
weston_test_protocol_c,
|
||||||
ivi_application_protocol_c,
|
],
|
||||||
include_directories: common_inc,
|
include_directories: common_inc,
|
||||||
dependencies: dep_test_client,
|
dependencies: [ dep_libweston_private, dep_libexec_weston ],
|
||||||
install: false
|
name_prefix: '',
|
||||||
|
install: false,
|
||||||
)
|
)
|
||||||
|
env_modmap += 'test-ivi-layout.so=' + ivi_layout_test_plugin.full_path() + ';'
|
||||||
|
|
||||||
env_modmap += 'ivi-layout-test-client.ivi=@0@;'.format(exe_ivi_layout_client.full_path())
|
tests += [
|
||||||
|
{
|
||||||
|
'name': 'ivi-layout-client',
|
||||||
|
'sources': [
|
||||||
|
'ivi-layout-test-client.c',
|
||||||
|
ivi_application_client_protocol_h,
|
||||||
|
ivi_application_protocol_c,
|
||||||
|
],
|
||||||
|
'test_deps': [ ivi_layout_test_plugin ],
|
||||||
|
},
|
||||||
|
]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
env_test_weston = [
|
env_test_weston = [
|
||||||
|
|||||||
Reference in New Issue
Block a user