root/lib/common/tests/rules/pcmk__evaluate_date_spec_test.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. run_one_test
  2. null_invalid
  3. spec_id_missing
  4. invalid_range
  5. time_satisfies_year_spec
  6. time_after_year_spec
  7. time_satisfies_year_range
  8. time_before_year_range
  9. time_after_year_range
  10. range_without_start_year_passes
  11. range_without_end_year_passes
  12. yeardays_satisfies
  13. time_after_yeardays_spec
  14. yeardays_feb_29_satisfies
  15. exact_ymd_satisfies
  16. range_in_month_satisfies
  17. exact_ymd_after_range
  18. time_after_monthdays_range

   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 
  12 #include <errno.h>
  13 #include <glib.h>
  14 
  15 #include <crm/common/xml.h>
  16 #include <crm/common/rules_internal.h>
  17 #include <crm/common/unittest_internal.h>
  18 #include "crmcommon_private.h"
  19 
  20 static void
  21 run_one_test(const char *t, const char *x, int expected)
     /* [previous][next][first][last][top][bottom][index][help] */
  22 {
  23     crm_time_t *tm = crm_time_new(t);
  24     xmlNodePtr xml = pcmk__xml_parse(x);
  25 
  26     assert_int_equal(pcmk__evaluate_date_spec(xml, tm), expected);
  27 
  28     crm_time_free(tm);
  29     pcmk__xml_free(xml);
  30 }
  31 
  32 static void
  33 null_invalid(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  34 {
  35     xmlNodePtr xml = pcmk__xml_parse("<" PCMK_XE_DATE_SPEC " "
  36                                      PCMK_XA_ID "='spec' "
  37                                      PCMK_XA_YEARS "='2019'/>");
  38     crm_time_t *tm = crm_time_new(NULL);
  39 
  40     assert_int_equal(pcmk__evaluate_date_spec(NULL, NULL), EINVAL);
  41     assert_int_equal(pcmk__evaluate_date_spec(xml, NULL), EINVAL);
  42     assert_int_equal(pcmk__evaluate_date_spec(NULL, tm), EINVAL);
  43 
  44     crm_time_free(tm);
  45     pcmk__xml_free(xml);
  46 }
  47 
  48 static void
  49 spec_id_missing(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  50 {
  51     run_one_test("2020-01-01", "<date_spec years='2020'/>",
  52                  pcmk_rc_unpack_error);
  53 }
  54 
  55 static void
  56 invalid_range(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  57 {
  58     run_one_test("2020-01-01", "<date_spec years='not-a-year' months='1'/>",
  59                  pcmk_rc_unpack_error);
  60 }
  61 
  62 static void
  63 time_satisfies_year_spec(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  64 {
  65     run_one_test("2020-01-01",
  66                  "<date_spec " PCMK_XA_ID "='spec' years='2020'/>",
  67                  pcmk_rc_ok);
  68 }
  69 
  70 static void
  71 time_after_year_spec(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  72 {
  73     run_one_test("2020-01-01",
  74                  "<" PCMK_XE_DATE_SPEC " "
  75                      PCMK_XA_ID "='spec' "
  76                      PCMK_XA_YEARS "='2019'/>",
  77                  pcmk_rc_after_range);
  78 }
  79 
  80 static void
  81 time_satisfies_year_range(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  82 {
  83     run_one_test("2020-01-01",
  84                  "<" PCMK_XE_DATE_SPEC " "
  85                      PCMK_XA_ID "='spec' "
  86                      PCMK_XA_YEARS "='2010-2030'/>",
  87                  pcmk_rc_ok);
  88 }
  89 
  90 static void
  91 time_before_year_range(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
  92 {
  93     run_one_test("2000-01-01",
  94                  "<" PCMK_XE_DATE_SPEC " "
  95                      PCMK_XA_ID "='spec' "
  96                      PCMK_XA_YEARS "='2010-2030'/>",
  97                  pcmk_rc_before_range);
  98 }
  99 
 100 static void
 101 time_after_year_range(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 102 {
 103     run_one_test("2020-01-01",
 104                  "<" PCMK_XE_DATE_SPEC " "
 105                      PCMK_XA_ID "='spec' "
 106                      PCMK_XA_YEARS "='2010-2015'/>",
 107                  pcmk_rc_after_range);
 108 }
 109 
 110 static void
 111 range_without_start_year_passes(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 112 {
 113     run_one_test("2010-01-01",
 114                  "<" PCMK_XE_DATE_SPEC " "
 115                      PCMK_XA_ID "='spec' "
 116                      PCMK_XA_YEARS "='-2020'/>",
 117                  pcmk_rc_ok);
 118 }
 119 
 120 static void
 121 range_without_end_year_passes(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 122 {
 123     run_one_test("2010-01-01",
 124                  "<" PCMK_XE_DATE_SPEC " "
 125                      PCMK_XA_ID "='spec' "
 126                      PCMK_XA_YEARS "='2000-'/>",
 127                  pcmk_rc_ok);
 128     run_one_test("2000-10-01",
 129                  "<" PCMK_XE_DATE_SPEC " "
 130                      PCMK_XA_ID "='spec' "
 131                      PCMK_XA_YEARS "='2000-'/>",
 132                  pcmk_rc_ok);
 133 }
 134 
 135 static void
 136 yeardays_satisfies(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 137 {
 138     run_one_test("2020-01-30",
 139                  "<" PCMK_XE_DATE_SPEC " "
 140                      PCMK_XA_ID "='spec' "
 141                      PCMK_XA_YEARDAYS "='30'/>",
 142                  pcmk_rc_ok);
 143 }
 144 
 145 static void
 146 time_after_yeardays_spec(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 147 {
 148     run_one_test("2020-02-15",
 149                  "<" PCMK_XE_DATE_SPEC " "
 150                      PCMK_XA_ID "='spec' "
 151                      PCMK_XA_YEARDAYS "='40'/>",
 152                  pcmk_rc_after_range);
 153 }
 154 
 155 static void
 156 yeardays_feb_29_satisfies(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 157 {
 158     run_one_test("2016-02-29",
 159                  "<" PCMK_XE_DATE_SPEC " "
 160                      PCMK_XA_ID "='spec' "
 161                      PCMK_XA_YEARDAYS "='60'/>",
 162                  pcmk_rc_ok);
 163 }
 164 
 165 static void
 166 exact_ymd_satisfies(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 167 {
 168     run_one_test("2001-12-31",
 169                  "<" PCMK_XE_DATE_SPEC " "
 170                      PCMK_XA_ID "='spec' "
 171                      PCMK_XA_YEARS "='2001' "
 172                      PCMK_XA_MONTHS "='12' "
 173                      PCMK_XA_MONTHDAYS "='31'/>",
 174                  pcmk_rc_ok);
 175 }
 176 
 177 static void
 178 range_in_month_satisfies(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 179 {
 180     run_one_test("2001-06-10",
 181                  "<" PCMK_XE_DATE_SPEC " "
 182                      PCMK_XA_ID "='spec' "
 183                      PCMK_XA_YEARS "='2001' "
 184                      PCMK_XA_MONTHS "='6' "
 185                      PCMK_XA_MONTHDAYS "='1-10'/>",
 186                  pcmk_rc_ok);
 187 }
 188 
 189 static void
 190 exact_ymd_after_range(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 191 {
 192     run_one_test("2001-12-31",
 193                  "<" PCMK_XE_DATE_SPEC " "
 194                      PCMK_XA_ID "='spec' "
 195                      PCMK_XA_YEARS "='2001' "
 196                      PCMK_XA_MONTHS "='12' "
 197                      PCMK_XA_MONTHDAYS "='30'/>",
 198                  pcmk_rc_after_range);
 199 }
 200 
 201 static void
 202 time_after_monthdays_range(void **state)
     /* [previous][next][first][last][top][bottom][index][help] */
 203 {
 204     run_one_test("2001-06-10",
 205                  "<" PCMK_XE_DATE_SPEC " "
 206                      PCMK_XA_ID "='spec' "
 207                      PCMK_XA_YEARS "='2001' "
 208                      PCMK_XA_MONTHS "='6' "
 209                      PCMK_XA_MONTHDAYS "='11-15'/>",
 210                  pcmk_rc_before_range);
 211 }
 212 
 213 PCMK__UNIT_TEST(pcmk__xml_test_setup_group, pcmk__xml_test_teardown_group,
 214                 cmocka_unit_test(null_invalid),
 215                 cmocka_unit_test(spec_id_missing),
 216                 cmocka_unit_test(invalid_range),
 217                 cmocka_unit_test(time_satisfies_year_spec),
 218                 cmocka_unit_test(time_after_year_spec),
 219                 cmocka_unit_test(time_satisfies_year_range),
 220                 cmocka_unit_test(time_before_year_range),
 221                 cmocka_unit_test(time_after_year_range),
 222                 cmocka_unit_test(range_without_start_year_passes),
 223                 cmocka_unit_test(range_without_end_year_passes),
 224                 cmocka_unit_test(yeardays_satisfies),
 225                 cmocka_unit_test(time_after_yeardays_spec),
 226                 cmocka_unit_test(yeardays_feb_29_satisfies),
 227                 cmocka_unit_test(exact_ymd_satisfies),
 228                 cmocka_unit_test(range_in_month_satisfies),
 229                 cmocka_unit_test(exact_ymd_after_range),
 230                 cmocka_unit_test(time_after_monthdays_range))

/* [previous][next][first][last][top][bottom][index][help] */