test: use unique names for all the test suite names
authorPeter Hutterer <peter.hutterer@who-t.net>
Fri, 2 Jun 2017 06:59:09 +0000 (16:59 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Thu, 8 Jun 2017 21:48:55 +0000 (07:48 +1000)
This makes it possible to run multiple test suite simultaneously on the same
host without messing up the other runs (provided that all instances use
the same udev/hwdb files). Previously, removing the udev rules/hwdb at the end
of a test run would cause test case failures in other runs that hadn't
completed yet.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
test/litest.c

index 69f87aa0e40d5b604137dd743944e097abf38184..4ab681e9b7b683bcc0accc2d81daee981fc011cd 100644 (file)
 #define UDEV_RULE_PREFIX "99-litest-"
 #define UDEV_HWDB_D "/etc/udev/hwdb.d"
 #define UDEV_MODEL_QUIRKS_RULE_FILE UDEV_RULES_D \
-       "/91-litest-model-quirks-REMOVEME.rules"
+       "/91-litest-model-quirks-REMOVEME-XXXXXX.rules"
 #define UDEV_MODEL_QUIRKS_HWDB_FILE UDEV_HWDB_D \
-       "/91-litest-model-quirks-REMOVEME.hwdb"
+       "/91-litest-model-quirks-REMOVEME-XXXXXX.hwdb"
 #define UDEV_TEST_DEVICE_RULE_FILE UDEV_RULES_D \
-       "/91-litest-test-device-REMOVEME.rules"
+       "/91-litest-test-device-REMOVEME-XXXXXXX.rules"
 #define UDEV_DEVICE_GROUPS_FILE UDEV_RULES_D \
-       "/80-libinput-device-groups-litest.rules"
+       "/80-libinput-device-groups-litest-XXXXXX.rules"
 
 static int jobs = 8;
 static int in_debugger = -1;
@@ -1124,17 +1124,20 @@ litest_copy_file(const char *dest, const char *src, const char *header)
 {
        int in, out, length;
        struct created_file *file;
+       int suffixlen;
 
        file = zalloc(sizeof(*file));
        litest_assert(file);
        file->path = strdup(dest);
        litest_assert(file->path);
 
-       out = open(dest, O_CREAT|O_WRONLY, 0644);
+       suffixlen = file->path + strlen(file->path)  - rindex(file->path, '.');
+       out = mkstemps(file->path, suffixlen);
        if (out == -1)
                litest_abort_msg("Failed to write to file %s (%s)\n",
-                                dest,
+                                file->path,
                                 strerror(errno));
+       litest_assert_int_ne(chmod(file->path, 0644), -1);
 
        if (header) {
                length = strlen(header);
@@ -1227,6 +1230,7 @@ static char *
 litest_init_device_udev_rules(struct litest_test_device *dev)
 {
        int rc;
+       int fd;
        FILE *f;
        char *path = NULL;
 
@@ -1234,7 +1238,7 @@ litest_init_device_udev_rules(struct litest_test_device *dev)
                return NULL;
 
        rc = xasprintf(&path,
-                     "%s/%s%s.rules",
+                     "%s/%s%s-XXXXXX.rules",
                      UDEV_RULES_D,
                      UDEV_RULE_PREFIX,
                      dev->shortname);
@@ -1242,8 +1246,11 @@ litest_init_device_udev_rules(struct litest_test_device *dev)
                             (int)(
                                   strlen(UDEV_RULES_D) +
                                   strlen(UDEV_RULE_PREFIX) +
-                                  strlen(dev->shortname) + 7));
-       f = fopen(path, "w");
+                                  strlen(dev->shortname) + 14));
+
+       fd = mkstemps(path, 6);
+       litest_assert_int_ne(fd, -1);
+       f = fdopen(fd, "w");
        litest_assert_notnull(f);
        litest_assert_int_ge(fputs(dev->udev_rule, f), 0);
        fclose(f);