LCOV - code coverage report
Current view: top level - test - test-path-lookup.c (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 55 55 100.0 %
Date: 2019-08-22 15:41:25 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: LGPL-2.1+ */
       2             : 
       3             : #include <stdlib.h>
       4             : #include <sys/stat.h>
       5             : 
       6             : #include "log.h"
       7             : #include "path-lookup.h"
       8             : #include "rm-rf.h"
       9             : #include "string-util.h"
      10             : #include "strv.h"
      11             : #include "tests.h"
      12             : 
      13           3 : static void test_paths(UnitFileScope scope) {
      14           3 :         char template[] = "/tmp/test-path-lookup.XXXXXXX";
      15             : 
      16           3 :         _cleanup_(lookup_paths_free) LookupPaths lp_without_env = {};
      17           3 :         _cleanup_(lookup_paths_free) LookupPaths lp_with_env = {};
      18             :         char *systemd_unit_path;
      19             : 
      20           3 :         assert_se(mkdtemp(template));
      21             : 
      22           3 :         assert_se(unsetenv("SYSTEMD_UNIT_PATH") == 0);
      23           3 :         assert_se(lookup_paths_init(&lp_without_env, scope, 0, NULL) >= 0);
      24           3 :         assert_se(!strv_isempty(lp_without_env.search_path));
      25           3 :         assert_se(lookup_paths_reduce(&lp_without_env) >= 0);
      26             : 
      27          15 :         systemd_unit_path = strjoina(template, "/systemd-unit-path");
      28           3 :         assert_se(setenv("SYSTEMD_UNIT_PATH", systemd_unit_path, 1) == 0);
      29           3 :         assert_se(lookup_paths_init(&lp_with_env, scope, 0, NULL) == 0);
      30           3 :         assert_se(strv_length(lp_with_env.search_path) == 1);
      31           3 :         assert_se(streq(lp_with_env.search_path[0], systemd_unit_path));
      32           3 :         assert_se(lookup_paths_reduce(&lp_with_env) >= 0);
      33           3 :         assert_se(strv_isempty(lp_with_env.search_path));
      34             : 
      35           3 :         assert_se(rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
      36           3 : }
      37             : 
      38           1 : static void test_user_and_global_paths(void) {
      39           1 :         _cleanup_(lookup_paths_free) LookupPaths lp_global = {}, lp_user = {};
      40             :         char **u, **g, **p;
      41           1 :         unsigned k = 0;
      42             : 
      43           1 :         assert_se(unsetenv("SYSTEMD_UNIT_PATH") == 0);
      44           1 :         assert_se(unsetenv("XDG_DATA_DIRS") == 0);
      45           1 :         assert_se(unsetenv("XDG_CONFIG_DIRS") == 0);
      46             : 
      47           1 :         assert_se(lookup_paths_init(&lp_global, UNIT_FILE_GLOBAL, 0, NULL) == 0);
      48           1 :         assert_se(lookup_paths_init(&lp_user, UNIT_FILE_USER, 0, NULL) == 0);
      49           1 :         g = lp_global.search_path;
      50           1 :         u = lp_user.search_path;
      51             : 
      52             :         /* Go over all entries in global search path, and verify
      53             :          * that they also exist in the user search path. Skip any
      54             :          * entries in user search path which don't exist in the global
      55             :          * one, but not vice versa. */
      56           1 :         log_info("/* %s */", __func__);
      57           7 :         STRV_FOREACH(p, g) {
      58          14 :                 while (u[k] && !streq(*p, u[k])) {
      59           8 :                         log_info("+ %s", u[k]);
      60           8 :                         k++;
      61             :                 }
      62           6 :                 log_info("  %s", *p);
      63           6 :                 assert(u[k]); /* If NULL, we didn't find a matching entry */
      64           6 :                 k++;
      65             :         }
      66           2 :         STRV_FOREACH(p, u + k)
      67           1 :                 log_info("+ %s", *p);
      68           1 : }
      69             : 
      70           2 : static void print_generator_binary_paths(UnitFileScope scope) {
      71           2 :         _cleanup_strv_free_ char **paths;
      72             :         char **dir;
      73             : 
      74           2 :         log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
      75             : 
      76           2 :         paths = generator_binary_paths(scope);
      77          10 :         STRV_FOREACH(dir, paths)
      78           8 :                 log_info("        %s", *dir);
      79           2 : }
      80             : 
      81           1 : int main(int argc, char **argv) {
      82           1 :         test_setup_logging(LOG_DEBUG);
      83             : 
      84           1 :         test_paths(UNIT_FILE_SYSTEM);
      85           1 :         test_paths(UNIT_FILE_USER);
      86           1 :         test_paths(UNIT_FILE_GLOBAL);
      87             : 
      88           1 :         test_user_and_global_paths();
      89             : 
      90           1 :         print_generator_binary_paths(UNIT_FILE_SYSTEM);
      91           1 :         print_generator_binary_paths(UNIT_FILE_USER);
      92             : 
      93           1 :         return EXIT_SUCCESS;
      94             : }

Generated by: LCOV version 1.14