pacemaker 3.0.1-16e74fc4da
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
pcmk__xe_get_datetime_test.c
Go to the documentation of this file.
1/*
2 * Copyright 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 <errno.h>
13#include <libxml/tree.h>
14
16
17#include <crm/common/iso8601.h>
18#include <crm/common/xml.h>
20
21#define REFERENCE_ISO8601 "2024-001"
22#define ATTR_PRESENT "start"
23#define ATTR_MISSING "end"
24#define REFERENCE_XML "<date_expression id=\"id1\" " \
25 ATTR_PRESENT "=\"" REFERENCE_ISO8601 "\"" \
26 " operation=\"gt\"/>"
27#define BAD_XML "<date_expression id=\"id1\" " \
28 ATTR_PRESENT "=\"not_a_time\"" \
29 " operation=\"gt\"/>"
30
31static void
32null_invalid(void **state)
33{
34 xmlNode *xml = pcmk__xml_parse(REFERENCE_XML);
35 crm_time_t *t = NULL;
36
37 assert_int_equal(pcmk__xe_get_datetime(NULL, NULL, NULL), EINVAL);
38 assert_int_equal(pcmk__xe_get_datetime(xml, NULL, NULL), EINVAL);
39 assert_int_equal(pcmk__xe_get_datetime(xml, ATTR_PRESENT, NULL), EINVAL);
40 assert_int_equal(pcmk__xe_get_datetime(xml, NULL, &t), EINVAL);
41 assert_null(t);
42 assert_int_equal(pcmk__xe_get_datetime(NULL, ATTR_PRESENT, NULL), EINVAL);
43 assert_int_equal(pcmk__xe_get_datetime(NULL, ATTR_PRESENT, &t), EINVAL);
44 assert_null(t);
45 assert_int_equal(pcmk__xe_get_datetime(NULL, NULL, &t), EINVAL);
46 assert_null(t);
47
48 pcmk__xml_free(xml);
49}
50
51static void
52nonnull_time_invalid(void **state)
53{
54 xmlNode *xml = pcmk__xml_parse(REFERENCE_XML);
56
57 assert_int_equal(pcmk__xe_get_datetime(xml, ATTR_PRESENT, &t), EINVAL);
58
60 pcmk__xml_free(xml);
61}
62
63static void
64attr_missing(void **state)
65{
66 xmlNode *xml = pcmk__xml_parse(REFERENCE_XML);
67 crm_time_t *t = NULL;
68
69 assert_int_equal(pcmk__xe_get_datetime(xml, ATTR_MISSING, &t), pcmk_rc_ok);
70 assert_null(t);
71
72 pcmk__xml_free(xml);
73}
74
75static void
76attr_valid(void **state)
77{
78 xmlNode *xml = pcmk__xml_parse(REFERENCE_XML);
79 crm_time_t *t = NULL;
81
82 assert_int_equal(pcmk__xe_get_datetime(xml, ATTR_PRESENT, &t), pcmk_rc_ok);
83 assert_int_equal(crm_time_compare(t, reference), 0);
84
86 crm_time_free(reference);
87 pcmk__xml_free(xml);
88}
89
90static void
91attr_invalid(void **state)
92{
93 xmlNode *xml = pcmk__xml_parse(BAD_XML);
94 crm_time_t *t = NULL;
95
96 assert_int_equal(pcmk__xe_get_datetime(xml, ATTR_PRESENT, &t),
98 assert_null(t);
99
100 pcmk__xml_free(xml);
101}
102
104 cmocka_unit_test(null_invalid),
105 cmocka_unit_test(nonnull_time_invalid),
106 cmocka_unit_test(attr_missing),
107 cmocka_unit_test(attr_valid),
108 cmocka_unit_test(attr_invalid))
ISO_8601 Date handling.
void crm_time_free(crm_time_t *dt)
Definition iso8601.c:150
crm_time_t * crm_time_new(const char *string)
Definition iso8601.c:112
crm_time_t * crm_time_new_undefined(void)
Allocate memory for an uninitialized time object.
Definition iso8601.c:129
struct crm_time_s crm_time_t
Definition iso8601.h:32
int crm_time_compare(const crm_time_t *a, const crm_time_t *b)
Definition iso8601.c:1736
#define ATTR_MISSING
#define BAD_XML
#define ATTR_PRESENT
#define REFERENCE_ISO8601
#define REFERENCE_XML
@ pcmk_rc_ok
Definition results.h:159
@ pcmk_rc_unpack_error
Definition results.h:122
int pcmk__xml_test_teardown_group(void **state)
Definition unittest.c:105
#define PCMK__UNIT_TEST(group_setup, group_teardown,...)
int pcmk__xml_test_setup_group(void **state)
Definition unittest.c:87
Wrappers for and extensions to libxml2.
int pcmk__xe_get_datetime(const xmlNode *xml, const char *attr, crm_time_t **t)
void pcmk__xml_free(xmlNode *xml)
Definition xml.c:816
xmlNode * pcmk__xml_parse(const char *input)
Definition xml_io.c:167