On Mon, Feb 22, 2016 at 02:35:42PM -0800, Bryce Harrington wrote: > On Mon, Feb 22, 2016 at 03:03:11PM +0100, Marek Chalupa wrote: > > Hi > > > > On 02/22/16 06:52, Jonas Ådahl wrote: > > >Add a test case that tests the servers behaviour when creating a pool > > >of size 0. The test suite will do the memory and fd leak check for us, > > >so the test case is only a triggerer. > > > > > >Signed-off-by: Jonas Ådahl <jad...@gmail.com> > > >--- > > > Makefile.am | 5 ++- > > > tests/shm-test.c | 108 > > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > > 2 files changed, 112 insertions(+), 1 deletion(-) > > > create mode 100644 tests/shm-test.c > > > > > >diff --git a/Makefile.am b/Makefile.am > > >index e850abc..5a82dd4 100644 > > >--- a/Makefile.am > > >+++ b/Makefile.am > > >@@ -157,7 +157,8 @@ TESTS = > > >\ > > > signal-test \ > > > resources-test \ > > > message-test \ > > >- headers-test > > >+ headers-test \ > > >+ shm-test > > > > > > if ENABLE_CPP_TEST > > > TESTS += cpp-compile-test > > >@@ -218,6 +219,8 @@ headers_test_SOURCES = tests/headers-test.c \ > > > tests/headers-protocol-test.c \ > > > tests/headers-protocol-core-test.c > > > headers_test_LDADD = libtest-runner.la > > >+shm_test_SOURCES = tests/shm-test.c > > >+shm_test_LDADD = libtest-runner.la > > > nodist_headers_test_SOURCES = \ > > > protocol/wayland-server-protocol-core.h \ > > > protocol/wayland-client-protocol-core.h > > >diff --git a/tests/shm-test.c b/tests/shm-test.c > > >new file mode 100644 > > >index 0000000..1190808 > > >--- /dev/null > > >+++ b/tests/shm-test.c > > >@@ -0,0 +1,108 @@ > > >+/* > > >+ * Copyright © 2016 Red Hat Inc. > > >+ * > > >+ * Permission is hereby granted, free of charge, to any person obtaining > > >+ * a copy of this software and associated documentation files (the > > >+ * "Software"), to deal in the Software without restriction, including > > >+ * without limitation the rights to use, copy, modify, merge, publish, > > >+ * distribute, sublicense, and/or sell copies of the Software, and to > > >+ * permit persons to whom the Software is furnished to do so, subject to > > >+ * the following conditions: > > >+ * > > >+ * The above copyright notice and this permission notice (including the > > >+ * next paragraph) shall be included in all copies or substantial > > >+ * portions of the Software. > > >+ * > > >+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > > >+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > > >+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND > > >+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS > > >+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN > > >+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN > > >+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > > >+ * SOFTWARE. > > >+ */ > > >+ > > >+#include <assert.h> > > >+#include <linux/memfd.h> > > >+#include <stdbool.h> > > >+#include <string.h> > > >+#include <sys/syscall.h> > > >+#include <unistd.h> > > >+ > > >+#include "wayland-client.h" > > >+#include "test-runner.h" > > >+#include "test-compositor.h" > > >+ > > >+static void > > >+registry_handle_global(void *data, struct wl_registry *registry, > > >+ uint32_t id, const char *interface, uint32_t version) > > >+{ > > >+ bool *tested = data; > > >+ struct wl_shm *shm; > > >+ int fd, ret; > > >+ struct wl_shm_pool *pool; > > >+ > > >+ if (strcmp (interface, "wl_shm")) > > >+ return; > > >+ > > >+ shm = wl_registry_bind(registry, id, &wl_shm_interface, 1); > > >+ assert(shm); > > >+ > > >+ fd = syscall(__NR_memfd_create, "wayland-tests", MFD_CLOEXEC); > > > > memfd_create is rather new syscall, I think that this test won't > > compile on older systems. Shouldn't we guard it somehow? For > > example: > > https://github.com/systemd/kdbus/commit/392f91521592869d67d29a231211b93aa2069dc9 > > Good point, on ubuntu 14.04 for example: > > CC tests/shm-test.o > tests/shm-test.c:27:25: fatal error: linux/memfd.h: No such file or directory > #include <linux/memfd.h> > ^ > compilation terminated. > > > I'd be okay with having this SKIP on older kernels; better to have the > test than not, and eventually distros will all catch up. > > But is there a different syscall or set of calls that would work on the > older kernels? Would be nice to get fuller coverage out of this test.
The other way is to create anonymous files etc. I was lazy as this didn't need to copy that functio here (os_create_anonymous_file()) but if we want to support testing on older systems, I guess I'll just drop the memfd thing and go via tmpfs instead. I suspect BSD won't have memfd as well so it'd be more portable as well. Jonas > > Bryce > > > Best, > > Marek > > > > >+ assert(fd >= 0); > > >+ > > >+ ret = ftruncate(fd, 1); > > >+ assert(ret >= 0); > > >+ > > >+ pool = wl_shm_create_pool (shm, fd, 0); > > >+ wl_shm_pool_destroy(pool); > > >+ wl_shm_destroy(shm); > > >+ close(fd); > > >+ > > >+ *tested = true; > > >+} > > >+ > > >+static const struct wl_registry_listener registry_listener = { > > >+ registry_handle_global, > > >+ NULL > > >+}; > > >+ > > >+static void > > >+client_test_shm_zero_size(void) > > >+{ > > >+ struct wl_display *display; > > >+ struct wl_registry *registry; > > >+ bool tested = false; > > >+ > > >+ display = wl_display_connect(NULL); > > >+ assert(display); > > >+ > > >+ registry = wl_display_get_registry(display); > > >+ assert(registry != NULL); > > >+ > > >+ wl_registry_add_listener(registry, ®istry_listener, &tested); > > >+ > > >+ assert(wl_display_roundtrip(display) != -1); > > >+ assert(tested); > > >+ > > >+ wl_registry_destroy(registry); > > >+ > > >+ /* Make sure the server processes the shm requests before destroying the > > >+ * client. */ > > >+ wl_display_roundtrip(display); > > >+ > > >+ wl_display_disconnect(display); > > >+} > > >+ > > >+TEST(shm_zero_size) > > >+{ > > >+ struct display *d = display_create(); > > >+ > > >+ wl_display_init_shm(d->wl_display); > > >+ > > >+ client_create_noarg(d, client_test_shm_zero_size); > > >+ > > >+ display_run(d); > > >+ display_destroy(d); > > >+} > > > > > _______________________________________________ > > wayland-devel mailing list > > wayland-devel@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel