pacemaker 3.0.1-16e74fc4da
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
pcmk__procfs_pid2path_test.c
Go to the documentation of this file.
1/*
2 * Copyright 2022-2024 the Pacemaker project contributors
3 *
4 * The version control history for this file may have further details.
5 *
6 * This source code is licensed under the GNU General Public License version 2
7 * or later (GPLv2+) WITHOUT ANY WARRANTY.
8 */
9
10#include <crm_internal.h>
11
13
14#include "mock_private.h"
15
16#include <unistd.h>
17#include <string.h>
18#include <errno.h>
19
20static void
21no_exe_file(void **state)
22{
23 size_t len = PATH_MAX;
24 char *path = pcmk__assert_alloc(len, sizeof(char));
25
26 // Set readlink() errno and link contents
28
29 expect_string(__wrap_readlink, path, "/proc/1000/exe");
30 expect_value(__wrap_readlink, buf, path);
31 expect_value(__wrap_readlink, bufsize, len - 1);
32 will_return(__wrap_readlink, ENOENT);
33 will_return(__wrap_readlink, NULL);
34
35 assert_int_equal(pcmk__procfs_pid2path(1000, path, len), ENOENT);
36
37 pcmk__mock_readlink = false;
38
39 free(path);
40}
41
42static void
43contents_too_long(void **state)
44{
45 size_t len = 10;
46 char *path = pcmk__assert_alloc(len, sizeof(char));
47
48 // Set readlink() errno and link contents
50
51 expect_string(__wrap_readlink, path, "/proc/1000/exe");
52 expect_value(__wrap_readlink, buf, path);
53 expect_value(__wrap_readlink, bufsize, len - 1);
54 will_return(__wrap_readlink, 0);
55 will_return(__wrap_readlink, "/more/than/10/characters");
56
57 assert_int_equal(pcmk__procfs_pid2path(1000, path, len),
58 ENAMETOOLONG);
59
60 pcmk__mock_readlink = false;
61
62 free(path);
63}
64
65static void
66contents_ok(void **state)
67{
68 size_t len = PATH_MAX;
69 char *path = pcmk__assert_alloc(len, sizeof(char));
70
71 // Set readlink() errno and link contents
73
74 expect_string(__wrap_readlink, path, "/proc/1000/exe");
75 expect_value(__wrap_readlink, buf, path);
76 expect_value(__wrap_readlink, bufsize, len - 1);
77 will_return(__wrap_readlink, 0);
78 will_return(__wrap_readlink, "/ok");
79
80 assert_int_equal(pcmk__procfs_pid2path((pid_t) 1000, path, len),
82 assert_string_equal(path, "/ok");
83
84 pcmk__mock_readlink = false;
85
86 free(path);
87}
88
89PCMK__UNIT_TEST(NULL, NULL,
90 cmocka_unit_test(no_exe_file),
91 cmocka_unit_test(contents_too_long),
92 cmocka_unit_test(contents_ok))
const char * path
Definition cib.c:28
int pcmk__procfs_pid2path(pid_t pid, char path[], size_t path_size)
Definition procfs.c:203
#define pcmk__assert_alloc(nmemb, size)
Definition internal.h:246
bool pcmk__mock_readlink
Definition mock.c:412
ssize_t __wrap_readlink(const char *restrict path, char *restrict buf, size_t bufsize)
Definition mock.c:415
@ pcmk_rc_ok
Definition results.h:159
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)