pacemaker 2.1.5-a3f44794f94
Scalable High-Availability cluster resource manager
pcmk__parse_ll_range_test.c
Go to the documentation of this file.
1/*
2 * Copyright 2020-2022 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 Lesser General Public License
7 * version 2.1 or later (LGPLv2.1+) 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), pcmk_rc_unknown_format);
20 assert_int_equal(pcmk__parse_ll_range("", &start, &end), pcmk_rc_unknown_format);
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_unknown_format);
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_unknown_format);
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_unknown_format);
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_unknown_format);
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-", &start, &end), pcmk_rc_unknown_format);
104 assert_int_equal(pcmk__parse_ll_range("100-20000000000000000000", &start, &end), pcmk_rc_unknown_format);
105}
106
107PCMK__UNIT_TEST(NULL, NULL,
108 cmocka_unit_test(empty_input_string),
109 cmocka_unit_test(null_input_variables),
110 cmocka_unit_test(missing_separator),
111 cmocka_unit_test(only_separator),
112 cmocka_unit_test(no_range_end),
113 cmocka_unit_test(no_range_start),
114 cmocka_unit_test(range_start_and_end),
115 cmocka_unit_test(strtoll_errors),
116 cmocka_unit_test(garbage))
@ pcmk_rc_ok
Definition: results.h:148
@ pcmk_rc_unknown_format
Definition: results.h:142
int pcmk__parse_ll_range(const char *srcstring, long long *start, long long *end)
Definition: strings.c:810
#define PCMK__PARSE_INT_DEFAULT
#define pcmk__assert_asserts(stmt)
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)