summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Chalupa <mchqwerty@gmail.com>2014-07-16 11:27:06 +0200
committerPekka Paalanen <pq@iki.fi>2014-07-22 19:14:54 +0300
commit4d06d46ace7016dd6bed82bb60c56d00ac5ae4b9 (patch)
tree65fd1166c463fadbd049f9b2c4383178d1686c38
parente7d74685213a058c43c1b833447c4452e6fa858c (diff)
tests: add expect_protocol_error function
This function checks if a particular protocol error came in wire. It's usefull in the cases where we hitherto used FAIL_TEST. The problem with FAIL_TEST is that *any* assert will pass the test, but we want only some asserts to pass the test (i. e. we don't want the test to pass when it, for example, can't connect to display). FAIL_TESTs are good only for sanity testing. The expect_protocol_error allows us to turn all FAIL_TESTs to TESTs as will be introduced in following patches. v2: fixed white-space error and a mistake in comment Reviewed-by: Bryce Harrington <b.harrington@samsung.com> Reviewed-by: Pekka Paalanen <ppaalanen@gmail.com>
-rw-r--r--tests/weston-test-client-helper.c48
-rw-r--r--tests/weston-test-client-helper.h4
2 files changed, 52 insertions, 0 deletions
diff --git a/tests/weston-test-client-helper.c b/tests/weston-test-client-helper.c
index 186b3956..92cee9f0 100644
--- a/tests/weston-test-client-helper.c
+++ b/tests/weston-test-client-helper.c
@@ -26,6 +26,7 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <errno.h>
#include <sys/mman.h>
#include "../shared/os-compatibility.h"
@@ -512,6 +513,53 @@ skip(const char *fmt, ...)
exit(77);
}
+void
+expect_protocol_error(struct client *client,
+ const struct wl_interface *intf,
+ uint32_t code)
+{
+ int err;
+ uint32_t errcode, failed = 0;
+ const struct wl_interface *interface;
+ unsigned int id;
+
+ /* if the error has not come yet, make it happen */
+ wl_display_roundtrip(client->wl_display);
+
+ err = wl_display_get_error(client->wl_display);
+
+ assert(err && "Expected protocol error but nothing came");
+ assert(err == EPROTO && "Expected protocol error but got local error");
+
+ errcode = wl_display_get_protocol_error(client->wl_display,
+ &interface, &id);
+
+ /* check error */
+ if (errcode != code) {
+ fprintf(stderr, "Should get error code %d but got %d\n",
+ code, errcode);
+ failed = 1;
+ }
+
+ /* this should be definitely set */
+ assert(interface);
+
+ if (strcmp(intf->name, interface->name) != 0) {
+ fprintf(stderr, "Should get interface '%s' but got '%s'\n",
+ intf->name, interface->name);
+ failed = 1;
+ }
+
+ if (failed) {
+ fprintf(stderr, "Expected other protocol error\n");
+ abort();
+ }
+
+ /* all OK */
+ fprintf(stderr, "Got expected protocol error on '%s' (object id: %d) "
+ "with code %d\n", interface->name, id, errcode);
+}
+
static void
log_handler(const char *fmt, va_list args)
{
diff --git a/tests/weston-test-client-helper.h b/tests/weston-test-client-helper.h
index 4bfc3fac..f1546611 100644
--- a/tests/weston-test-client-helper.h
+++ b/tests/weston-test-client-helper.h
@@ -129,4 +129,8 @@ get_n_egl_buffers(struct client *client);
void
skip(const char *fmt, ...);
+void
+expect_protocol_error(struct client *client,
+ const struct wl_interface *intf, uint32_t code);
+
#endif