pacemaker 3.0.1-16e74fc4da
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
pcmk__scan_ll_test.c
Go to the documentation of this file.
1/*
2 * Copyright 2023-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
12#include <limits.h>
13
15
16static void
17empty_input_string(void **state)
18{
19 long long result;
20
21 assert_int_equal(pcmk__scan_ll(NULL, &result, 47), pcmk_rc_ok);
22 assert_int_equal(result, 47);
23}
24
25static void
26bad_input_string(void **state)
27{
28 long long result;
29
30 assert_int_equal(pcmk__scan_ll("asdf", &result, 47), pcmk_rc_bad_input);
31 assert_int_equal(result, 47);
32 assert_int_equal(pcmk__scan_ll("as12", &result, 47), pcmk_rc_bad_input);
33 assert_int_equal(result, 47);
34}
35
36static void
37trailing_chars(void **state)
38{
39 long long result;
40
41 assert_int_equal(pcmk__scan_ll("12as", &result, 47), pcmk_rc_ok);
42 assert_int_equal(result, 12);
43}
44
45static void
46no_result_variable(void **state)
47{
48 assert_int_equal(pcmk__scan_ll("1234", NULL, 47), pcmk_rc_ok);
49 assert_int_equal(pcmk__scan_ll("asdf", NULL, 47), pcmk_rc_bad_input);
50}
51
52static void
53out_of_range(void **state)
54{
55 long long result = 0LL;
56 char *very_long = crm_strdup_printf(" %lld0", LLONG_MAX);
57
58 assert_int_equal(pcmk__scan_ll(very_long, &result, 47), ERANGE);
59 assert_true(result == LLONG_MAX);
60
61 very_long[0] = '-';
62 assert_int_equal(pcmk__scan_ll(very_long, &result, 47), ERANGE);
63 assert_true(result == LLONG_MIN);
64
65 free(very_long);
66}
67
68static void
69typical_case(void **state)
70{
71 long long result;
72
73 assert_int_equal(pcmk__scan_ll("1234", &result, 47), pcmk_rc_ok);
74 assert_int_equal(result, 1234);
75}
76
77PCMK__UNIT_TEST(NULL, NULL,
78 cmocka_unit_test(empty_input_string),
79 cmocka_unit_test(bad_input_string),
80 cmocka_unit_test(trailing_chars),
81 cmocka_unit_test(no_result_variable),
82 cmocka_unit_test(out_of_range),
83 cmocka_unit_test(typical_case))
pcmk__action_result_t result
Definition pcmk_fence.c:37
@ pcmk_rc_ok
Definition results.h:159
@ pcmk_rc_bad_input
Definition results.h:119
char * crm_strdup_printf(char const *format,...) G_GNUC_PRINTF(1
int pcmk__scan_ll(const char *text, long long *result, long long default_value)
Definition strings.c:92
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)