pacemaker 3.0.1-16e74fc4da
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
pcmk__parse_ll_range_test.c
Go to the documentation of this file.
1/*
2 * Copyright 2020-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
14static void
15empty_input_string(void **state)
16{
17 long long start, end;
18
19 assert_int_equal(pcmk__parse_ll_range(NULL, &start, &end), ENODATA);
20 assert_int_equal(pcmk__parse_ll_range("", &start, &end), ENODATA);
21}
22
23static void
24null_input_variables(void **state)
25{
26 long long start, end;
27
28 pcmk__assert_asserts(pcmk__parse_ll_range("1234", NULL, &end));
29 pcmk__assert_asserts(pcmk__parse_ll_range("1234", &start, NULL));
30}
31
32static void
33missing_separator(void **state)
34{
35 long long start, end;
36
37 assert_int_equal(pcmk__parse_ll_range("1234", &start, &end), pcmk_rc_ok);
38 assert_int_equal(start, 1234);
39 assert_int_equal(end, 1234);
40}
41
42static void
43only_separator(void **state)
44{
45 long long start, end;
46
47 assert_int_equal(pcmk__parse_ll_range("-", &start, &end), pcmk_rc_bad_input);
48 assert_int_equal(start, PCMK__PARSE_INT_DEFAULT);
49 assert_int_equal(end, PCMK__PARSE_INT_DEFAULT);
50}
51
52static void
53no_range_end(void **state)
54{
55 long long start, end;
56
57 assert_int_equal(pcmk__parse_ll_range("2000-", &start, &end), pcmk_rc_ok);
58 assert_int_equal(start, 2000);
59 assert_int_equal(end, PCMK__PARSE_INT_DEFAULT);
60}
61
62static void
63no_range_start(void **state)
64{
65 long long start, end;
66
67 assert_int_equal(pcmk__parse_ll_range("-2020", &start, &end), pcmk_rc_ok);
68 assert_int_equal(start, PCMK__PARSE_INT_DEFAULT);
69 assert_int_equal(end, 2020);
70}
71
72static void
73range_start_and_end(void **state)
74{
75 long long start, end;
76
77 assert_int_equal(pcmk__parse_ll_range("2000-2020", &start, &end), pcmk_rc_ok);
78 assert_int_equal(start, 2000);
79 assert_int_equal(end, 2020);
80
81 assert_int_equal(pcmk__parse_ll_range("2000-2020-2030", &start, &end), pcmk_rc_bad_input);
82}
83
84static void
85garbage(void **state)
86{
87 long long start, end;
88
89 assert_int_equal(pcmk__parse_ll_range("2000x-", &start, &end), pcmk_rc_bad_input);
90 assert_int_equal(start, PCMK__PARSE_INT_DEFAULT);
91 assert_int_equal(end, PCMK__PARSE_INT_DEFAULT);
92
93 assert_int_equal(pcmk__parse_ll_range("-x2000", &start, &end), pcmk_rc_bad_input);
94 assert_int_equal(start, PCMK__PARSE_INT_DEFAULT);
95 assert_int_equal(end, PCMK__PARSE_INT_DEFAULT);
96}
97
98static void
99strtoll_errors(void **state)
100{
101 long long start, end;
102
103 assert_int_equal(pcmk__parse_ll_range("20000000000000000000-",
104 &start, &end),
105 ERANGE);
106 assert_int_equal(pcmk__parse_ll_range("100-20000000000000000000",
107 &start, &end),
108 ERANGE);
109}
110
111PCMK__UNIT_TEST(NULL, NULL,
112 cmocka_unit_test(empty_input_string),
113 cmocka_unit_test(null_input_variables),
114 cmocka_unit_test(missing_separator),
115 cmocka_unit_test(only_separator),
116 cmocka_unit_test(no_range_end),
117 cmocka_unit_test(no_range_start),
118 cmocka_unit_test(range_start_and_end),
119 cmocka_unit_test(strtoll_errors),
120 cmocka_unit_test(garbage))
#define ENODATA
Definition portability.h:61
@ pcmk_rc_ok
Definition results.h:159
@ pcmk_rc_bad_input
Definition results.h:119
int pcmk__parse_ll_range(const char *srcstring, long long *start, long long *end)
Definition strings.c:905
#define PCMK__PARSE_INT_DEFAULT
#define pcmk__assert_asserts(stmt)
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)