client: Fix segmentation fault in the case weston-nested
[platform/upstream/weston.git] / tests / weston-test-runner.c
index ce0a670..f0566ac 100644 (file)
@@ -1,35 +1,39 @@
 /*
  * Copyright © 2012 Intel Corporation
  *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no representations
- * about the suitability of this software for any purpose.  It is provided "as
- * is" without express or implied warranty.
+ * 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 COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
+ * 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 "config.h"
+
 #include <unistd.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <sys/types.h>
 #include <sys/wait.h>
 #include <string.h>
 #include <assert.h>
 #include <errno.h>
 #include <signal.h>
+
 #include "weston-test-runner.h"
 
 #define SKIP 77
@@ -38,6 +42,14 @@ char __attribute__((weak)) *server_parameters="";
 
 extern const struct weston_test __start_test_section, __stop_test_section;
 
+static const char *test_name_;
+
+const char *
+get_test_name(void)
+{
+       return test_name_;
+}
+
 static const struct weston_test *
 find_test(const char *name)
 {
@@ -51,8 +63,17 @@ find_test(const char *name)
 }
 
 static void
-run_test(const struct weston_test *t, void *data)
+run_test(const struct weston_test *t, void *data, int iteration)
 {
+       char str[512];
+
+       if (data) {
+               snprintf(str, sizeof(str), "%s[%d]", t->name, iteration);
+               test_name_ = str;
+       } else {
+               test_name_ = t->name;
+       }
+
        t->run(data);
        exit(EXIT_SUCCESS);
 }
@@ -67,6 +88,7 @@ list_tests(void)
                fprintf(stderr, "       %s\n", t->name);
 }
 
+/* iteration is valid only if test_data is not NULL */
 static int
 exec_and_report_test(const struct weston_test *t, void *test_data, int iteration)
 {
@@ -79,7 +101,7 @@ exec_and_report_test(const struct weston_test *t, void *test_data, int iteration
        assert(pid >= 0);
 
        if (pid == 0)
-               run_test(t, test_data); /* never returns */
+               run_test(t, test_data, iteration); /* never returns */
 
        if (waitid(P_ALL, 0, &info, WEXITED)) {
                fprintf(stderr, "waitid failed: %m\n");
@@ -122,7 +144,10 @@ exec_and_report_test(const struct weston_test *t, void *test_data, int iteration
        }
 }
 
-/* Returns number of tests and number of pass / fail in param args */
+/* Returns number of tests and number of pass / fail in param args.
+ * Even non-iterated tests go through here, they simply have n_elements = 1 and
+ * table_data = NULL.
+ */
 static int
 iterate_test(const struct weston_test *t, int *passed, int *skipped)
 {