diff options
Diffstat (limited to 'common/test-runtime.c')
-rw-r--r-- | common/test-runtime.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/common/test-runtime.c b/common/test-runtime.c new file mode 100644 index 0000000..294a7ad --- /dev/null +++ b/common/test-runtime.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2018 Red Hat Inc + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * * The names of contributors to this software may not be + * used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * Author: Daiki Ueno + */ + +#include "config.h" +#include "test.h" + +#include "runtime.h" +#include "compat.h" + +#include <stdio.h> +#include <stdlib.h> + +static struct { + char *directory; +} test; + +extern const char * const *_p11_runtime_bases; + +static void +setup (void *unused) +{ + test.directory = p11_test_directory ("p11-test-runtime"); +} + +static void +teardown (void *unused) +{ + p11_test_directory_delete (test.directory); + free (test.directory); +} + +static void +test_xdg_runtime_dir (void) +{ + char *directory; + + setenv ("XDG_RUNTIME_DIR", "/nowhere", 1); + p11_get_runtime_directory (&directory); + assert_str_eq ("/nowhere", directory); + free (directory); +} + +static void +test_bases (void) +{ + char *directory; + const char * bases[] = { + NULL, + NULL + }; + char *user, *path; + + if (asprintf (&user, "%s/user", test.directory) < 0) + assert_not_reached (); + if (mkdir (user, 0700) < 0) + assert_not_reached (); + if (asprintf (&path, "%s/%d", user, getuid ()) < 0) + assert_not_reached (); + free (user); + if (mkdir (path, 0700) < 0) + assert_not_reached (); + free (path); + + bases[0] = test.directory; + _p11_runtime_bases = bases; + + unsetenv ("XDG_RUNTIME_DIR"); + p11_get_runtime_directory (&directory); + if (asprintf (&path, "%s/user/%d", test.directory, getuid ()) < 0) + assert_not_reached (); + assert_str_eq (path, directory); + free (path); + free (directory); +} + +static void +test_xdg_cache_home (void) +{ + char *directory; + const char * bases[] = { + NULL + }; + _p11_runtime_bases = bases; + + unsetenv ("XDG_RUNTIME_DIR"); + setenv ("XDG_CACHE_HOME", "/cache", 1); + p11_get_runtime_directory (&directory); + assert_str_eq ("/cache", directory); + free (directory); +} + +int +main (int argc, + char *argv[]) +{ + p11_fixture (setup, teardown); + p11_test (test_xdg_runtime_dir, "/runtime/xdg-runtime-dir"); + p11_test (test_bases, "/runtime/bases"); + p11_test (test_xdg_cache_home, "/runtime/xdg-cache-home"); + p11_test_run (argc, argv); +} |