diff options
Diffstat (limited to 'lib/tests/test_utils.c')
| -rw-r--r-- | lib/tests/test_utils.c | 549 |
1 files changed, 190 insertions, 359 deletions
diff --git a/lib/tests/test_utils.c b/lib/tests/test_utils.c index 01afacdc..8040dec8 100644 --- a/lib/tests/test_utils.c +++ b/lib/tests/test_utils.c | |||
| @@ -1,20 +1,20 @@ | |||
| 1 | /***************************************************************************** | 1 | /***************************************************************************** |
| 2 | * | 2 | * |
| 3 | * This program is free software: you can redistribute it and/or modify | 3 | * This program is free software: you can redistribute it and/or modify |
| 4 | * it under the terms of the GNU General Public License as published by | 4 | * it under the terms of the GNU General Public License as published by |
| 5 | * the Free Software Foundation, either version 3 of the License, or | 5 | * the Free Software Foundation, either version 3 of the License, or |
| 6 | * (at your option) any later version. | 6 | * (at your option) any later version. |
| 7 | * | 7 | * |
| 8 | * This program is distributed in the hope that it will be useful, | 8 | * This program is distributed in the hope that it will be useful, |
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 | * GNU General Public License for more details. | 11 | * GNU General Public License for more details. |
| 12 | * | 12 | * |
| 13 | * You should have received a copy of the GNU General Public License | 13 | * You should have received a copy of the GNU General Public License |
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 15 | * | 15 | * |
| 16 | * | 16 | * |
| 17 | *****************************************************************************/ | 17 | *****************************************************************************/ |
| 18 | 18 | ||
| 19 | #include "common.h" | 19 | #include "common.h" |
| 20 | #include "utils_base.h" | 20 | #include "utils_base.h" |
| @@ -27,484 +27,315 @@ | |||
| 27 | 27 | ||
| 28 | #include "utils_base.c" | 28 | #include "utils_base.c" |
| 29 | 29 | ||
| 30 | int | 30 | int main(int argc, char **argv) { |
| 31 | main (int argc, char **argv) | 31 | plan_tests(155); |
| 32 | { | ||
| 33 | char state_path[1024]; | ||
| 34 | range *range; | ||
| 35 | double temp; | ||
| 36 | thresholds *thresholds = NULL; | ||
| 37 | int i, rc; | ||
| 38 | char *temp_string; | ||
| 39 | state_key *temp_state_key = NULL; | ||
| 40 | state_data *temp_state_data; | ||
| 41 | time_t current_time; | ||
| 42 | |||
| 43 | plan_tests(185); | ||
| 44 | 32 | ||
| 45 | ok( this_monitoring_plugin==NULL, "monitoring_plugin not initialised"); | 33 | ok(this_monitoring_plugin == NULL, "monitoring_plugin not initialised"); |
| 46 | 34 | ||
| 47 | np_init( "check_test", argc, argv ); | 35 | np_init("check_test", argc, argv); |
| 48 | 36 | ||
| 49 | ok( this_monitoring_plugin!=NULL, "monitoring_plugin now initialised"); | 37 | ok(this_monitoring_plugin != NULL, "monitoring_plugin now initialised"); |
| 50 | ok( !strcmp(this_monitoring_plugin->plugin_name, "check_test"), "plugin name initialised" ); | 38 | ok(!strcmp(this_monitoring_plugin->plugin_name, "check_test"), "plugin name initialised"); |
| 51 | 39 | ||
| 52 | ok( this_monitoring_plugin->argc==argc, "Argc set" ); | 40 | ok(this_monitoring_plugin->argc == argc, "Argc set"); |
| 53 | ok( this_monitoring_plugin->argv==argv, "Argv set" ); | 41 | ok(this_monitoring_plugin->argv == argv, "Argv set"); |
| 54 | 42 | ||
| 55 | np_set_args(0,0); | 43 | np_set_args(0, 0); |
| 56 | 44 | ||
| 57 | ok( this_monitoring_plugin->argc==0, "argc changed" ); | 45 | ok(this_monitoring_plugin->argc == 0, "argc changed"); |
| 58 | ok( this_monitoring_plugin->argv==0, "argv changed" ); | 46 | ok(this_monitoring_plugin->argv == 0, "argv changed"); |
| 59 | 47 | ||
| 60 | np_set_args(argc, argv); | 48 | np_set_args(argc, argv); |
| 61 | 49 | ||
| 62 | range = parse_range_string("6"); | 50 | range *range = parse_range_string("6"); |
| 63 | ok( range != NULL, "'6' is valid range"); | 51 | ok(range != NULL, "'6' is valid range"); |
| 64 | ok( range->start == 0, "Start correct"); | 52 | ok(range->start == 0, "Start correct"); |
| 65 | ok( range->start_infinity == false, "Not using negative infinity"); | 53 | ok(range->start_infinity == false, "Not using negative infinity"); |
| 66 | ok( range->end == 6, "End correct"); | 54 | ok(range->end == 6, "End correct"); |
| 67 | ok( range->end_infinity == false, "Not using infinity"); | 55 | ok(range->end_infinity == false, "Not using infinity"); |
| 68 | free(range); | 56 | free(range); |
| 69 | 57 | ||
| 70 | range = parse_range_string("1:12%%"); | 58 | range = parse_range_string("1:12%%"); |
| 71 | ok( range != NULL, "'1:12%%' is valid - percentages are ignored"); | 59 | ok(range != NULL, "'1:12%%' is valid - percentages are ignored"); |
| 72 | ok( range->start == 1, "Start correct"); | 60 | ok(range->start == 1, "Start correct"); |
| 73 | ok( range->start_infinity == false, "Not using negative infinity"); | 61 | ok(range->start_infinity == false, "Not using negative infinity"); |
| 74 | ok( range->end == 12, "End correct"); | 62 | ok(range->end == 12, "End correct"); |
| 75 | ok( range->end_infinity == false, "Not using infinity"); | 63 | ok(range->end_infinity == false, "Not using infinity"); |
| 76 | free(range); | 64 | free(range); |
| 77 | 65 | ||
| 78 | range = parse_range_string("-7:23"); | 66 | range = parse_range_string("-7:23"); |
| 79 | ok( range != NULL, "'-7:23' is valid range"); | 67 | ok(range != NULL, "'-7:23' is valid range"); |
| 80 | ok( range->start == -7, "Start correct"); | 68 | ok(range->start == -7, "Start correct"); |
| 81 | ok( range->start_infinity == false, "Not using negative infinity"); | 69 | ok(range->start_infinity == false, "Not using negative infinity"); |
| 82 | ok( range->end == 23, "End correct"); | 70 | ok(range->end == 23, "End correct"); |
| 83 | ok( range->end_infinity == false, "Not using infinity"); | 71 | ok(range->end_infinity == false, "Not using infinity"); |
| 84 | free(range); | 72 | free(range); |
| 85 | 73 | ||
| 86 | range = parse_range_string(":5.75"); | 74 | range = parse_range_string(":5.75"); |
| 87 | ok( range != NULL, "':5.75' is valid range"); | 75 | ok(range != NULL, "':5.75' is valid range"); |
| 88 | ok( range->start == 0, "Start correct"); | 76 | ok(range->start == 0, "Start correct"); |
| 89 | ok( range->start_infinity == false, "Not using negative infinity"); | 77 | ok(range->start_infinity == false, "Not using negative infinity"); |
| 90 | ok( range->end == 5.75, "End correct"); | 78 | ok(range->end == 5.75, "End correct"); |
| 91 | ok( range->end_infinity == false, "Not using infinity"); | 79 | ok(range->end_infinity == false, "Not using infinity"); |
| 92 | free(range); | 80 | free(range); |
| 93 | 81 | ||
| 94 | range = parse_range_string("~:-95.99"); | 82 | range = parse_range_string("~:-95.99"); |
| 95 | ok( range != NULL, "~:-95.99' is valid range"); | 83 | ok(range != NULL, "~:-95.99' is valid range"); |
| 96 | ok( range->start_infinity == true, "Using negative infinity"); | 84 | ok(range->start_infinity == true, "Using negative infinity"); |
| 97 | ok( range->end == -95.99, "End correct (with rounding errors)"); | 85 | ok(range->end == -95.99, "End correct (with rounding errors)"); |
| 98 | ok( range->end_infinity == false, "Not using infinity"); | 86 | ok(range->end_infinity == false, "Not using infinity"); |
| 99 | free(range); | 87 | free(range); |
| 100 | 88 | ||
| 101 | range = parse_range_string("12345678901234567890:"); | 89 | range = parse_range_string("12345678901234567890:"); |
| 102 | temp = atof("12345678901234567890"); /* Can't just use this because number too large */ | 90 | double temp = atof("12345678901234567890"); /* Can't just use this because number too large */ |
| 103 | ok( range != NULL, "'12345678901234567890:' is valid range"); | 91 | ok(range != NULL, "'12345678901234567890:' is valid range"); |
| 104 | ok( range->start == temp, "Start correct"); | 92 | ok(range->start == temp, "Start correct"); |
| 105 | ok( range->start_infinity == false, "Not using negative infinity"); | 93 | ok(range->start_infinity == false, "Not using negative infinity"); |
| 106 | ok( range->end_infinity == true, "Using infinity"); | 94 | ok(range->end_infinity == true, "Using infinity"); |
| 107 | /* Cannot do a "-1" on temp, as it appears to be same value */ | 95 | /* Cannot do a "-1" on temp, as it appears to be same value */ |
| 108 | ok( check_range(temp/1.1, range) == true, "12345678901234567890/1.1 - alert"); | 96 | ok(check_range(temp / 1.1, range) == true, "12345678901234567890/1.1 - alert"); |
| 109 | ok( check_range(temp, range) == false, "12345678901234567890 - no alert"); | 97 | ok(check_range(temp, range) == false, "12345678901234567890 - no alert"); |
| 110 | ok( check_range(temp*2, range) == false, "12345678901234567890*2 - no alert"); | 98 | ok(check_range(temp * 2, range) == false, "12345678901234567890*2 - no alert"); |
| 111 | free(range); | 99 | free(range); |
| 112 | 100 | ||
| 113 | range = parse_range_string("~:0"); | 101 | range = parse_range_string("~:0"); |
| 114 | ok( range != NULL, "'~:0' is valid range"); | 102 | ok(range != NULL, "'~:0' is valid range"); |
| 115 | ok( range->start_infinity == true, "Using negative infinity"); | 103 | ok(range->start_infinity == true, "Using negative infinity"); |
| 116 | ok( range->end == 0, "End correct"); | 104 | ok(range->end == 0, "End correct"); |
| 117 | ok( range->end_infinity == false, "Not using infinity"); | 105 | ok(range->end_infinity == false, "Not using infinity"); |
| 118 | ok( range->alert_on == OUTSIDE, "Will alert on outside of this range"); | 106 | ok(range->alert_on == OUTSIDE, "Will alert on outside of this range"); |
| 119 | ok( check_range(0.5, range) == true, "0.5 - alert"); | 107 | ok(check_range(0.5, range) == true, "0.5 - alert"); |
| 120 | ok( check_range(-10, range) == false, "-10 - no alert"); | 108 | ok(check_range(-10, range) == false, "-10 - no alert"); |
| 121 | ok( check_range(0, range) == false, "0 - no alert"); | 109 | ok(check_range(0, range) == false, "0 - no alert"); |
| 122 | free(range); | 110 | free(range); |
| 123 | 111 | ||
| 124 | range = parse_range_string("@0:657.8210567"); | 112 | range = parse_range_string("@0:657.8210567"); |
| 125 | ok( range != 0, "@0:657.8210567' is a valid range"); | 113 | ok(range != 0, "@0:657.8210567' is a valid range"); |
| 126 | ok( range->start == 0, "Start correct"); | 114 | ok(range->start == 0, "Start correct"); |
| 127 | ok( range->start_infinity == false, "Not using negative infinity"); | 115 | ok(range->start_infinity == false, "Not using negative infinity"); |
| 128 | ok( range->end == 657.8210567, "End correct"); | 116 | ok(range->end == 657.8210567, "End correct"); |
| 129 | ok( range->end_infinity == false, "Not using infinity"); | 117 | ok(range->end_infinity == false, "Not using infinity"); |
| 130 | ok( range->alert_on == INSIDE, "Will alert on inside of this range" ); | 118 | ok(range->alert_on == INSIDE, "Will alert on inside of this range"); |
| 131 | ok( check_range(32.88, range) == true, "32.88 - alert"); | 119 | ok(check_range(32.88, range) == true, "32.88 - alert"); |
| 132 | ok( check_range(-2, range) == false, "-2 - no alert"); | 120 | ok(check_range(-2, range) == false, "-2 - no alert"); |
| 133 | ok( check_range(657.8210567, range) == true, "657.8210567 - alert"); | 121 | ok(check_range(657.8210567, range) == true, "657.8210567 - alert"); |
| 134 | ok( check_range(0, range) == true, "0 - alert"); | 122 | ok(check_range(0, range) == true, "0 - alert"); |
| 135 | free(range); | 123 | free(range); |
| 136 | 124 | ||
| 137 | range = parse_range_string("@1:1"); | 125 | range = parse_range_string("@1:1"); |
| 138 | ok( range != NULL, "'@1:1' is a valid range"); | 126 | ok(range != NULL, "'@1:1' is a valid range"); |
| 139 | ok( range->start == 1, "Start correct"); | 127 | ok(range->start == 1, "Start correct"); |
| 140 | ok( range->start_infinity == false, "Not using negative infinity"); | 128 | ok(range->start_infinity == false, "Not using negative infinity"); |
| 141 | ok( range->end == 1, "End correct"); | 129 | ok(range->end == 1, "End correct"); |
| 142 | ok( range->end_infinity == false, "Not using infinity"); | 130 | ok(range->end_infinity == false, "Not using infinity"); |
| 143 | ok( range->alert_on == INSIDE, "Will alert on inside of this range" ); | 131 | ok(range->alert_on == INSIDE, "Will alert on inside of this range"); |
| 144 | ok( check_range(0.5, range) == false, "0.5 - no alert"); | 132 | ok(check_range(0.5, range) == false, "0.5 - no alert"); |
| 145 | ok( check_range(1, range) == true, "1 - alert"); | 133 | ok(check_range(1, range) == true, "1 - alert"); |
| 146 | ok( check_range(5.2, range) == false, "5.2 - no alert"); | 134 | ok(check_range(5.2, range) == false, "5.2 - no alert"); |
| 147 | free(range); | 135 | free(range); |
| 148 | 136 | ||
| 149 | range = parse_range_string("1:1"); | 137 | range = parse_range_string("1:1"); |
| 150 | ok( range != NULL, "'1:1' is a valid range"); | 138 | ok(range != NULL, "'1:1' is a valid range"); |
| 151 | ok( range->start == 1, "Start correct"); | 139 | ok(range->start == 1, "Start correct"); |
| 152 | ok( range->start_infinity == false, "Not using negative infinity"); | 140 | ok(range->start_infinity == false, "Not using negative infinity"); |
| 153 | ok( range->end == 1, "End correct"); | 141 | ok(range->end == 1, "End correct"); |
| 154 | ok( range->end_infinity == false, "Not using infinity"); | 142 | ok(range->end_infinity == false, "Not using infinity"); |
| 155 | ok( check_range(0.5, range) == true, "0.5 - alert"); | 143 | ok(check_range(0.5, range) == true, "0.5 - alert"); |
| 156 | ok( check_range(1, range) == false, "1 - no alert"); | 144 | ok(check_range(1, range) == false, "1 - no alert"); |
| 157 | ok( check_range(5.2, range) == true, "5.2 - alert"); | 145 | ok(check_range(5.2, range) == true, "5.2 - alert"); |
| 158 | free(range); | 146 | free(range); |
| 159 | 147 | ||
| 160 | range = parse_range_string("2:1"); | 148 | range = parse_range_string("2:1"); |
| 161 | ok( range == NULL, "'2:1' rejected"); | 149 | ok(range == NULL, "'2:1' rejected"); |
| 162 | 150 | ||
| 163 | rc = _set_thresholds(&thresholds, NULL, NULL); | 151 | thresholds *thresholds = NULL; |
| 164 | ok( rc == 0, "Thresholds (NULL, NULL) set"); | 152 | int returnCode; |
| 165 | ok( thresholds->warning == NULL, "Warning not set"); | 153 | returnCode = _set_thresholds(&thresholds, NULL, NULL); |
| 166 | ok( thresholds->critical == NULL, "Critical not set"); | 154 | ok(returnCode == 0, "Thresholds (NULL, NULL) set"); |
| 167 | 155 | ok(thresholds->warning == NULL, "Warning not set"); | |
| 168 | rc = _set_thresholds(&thresholds, NULL, "80"); | 156 | ok(thresholds->critical == NULL, "Critical not set"); |
| 169 | ok( rc == 0, "Thresholds (NULL, '80') set"); | 157 | |
| 170 | ok( thresholds->warning == NULL, "Warning not set"); | 158 | returnCode = _set_thresholds(&thresholds, NULL, "80"); |
| 171 | ok( thresholds->critical->end == 80, "Critical set correctly"); | 159 | ok(returnCode == 0, "Thresholds (NULL, '80') set"); |
| 172 | 160 | ok(thresholds->warning == NULL, "Warning not set"); | |
| 173 | rc = _set_thresholds(&thresholds, "5:33", NULL); | 161 | ok(thresholds->critical->end == 80, "Critical set correctly"); |
| 174 | ok( rc == 0, "Thresholds ('5:33', NULL) set"); | 162 | |
| 175 | ok( thresholds->warning->start == 5, "Warning start set"); | 163 | returnCode = _set_thresholds(&thresholds, "5:33", NULL); |
| 176 | ok( thresholds->warning->end == 33, "Warning end set"); | 164 | ok(returnCode == 0, "Thresholds ('5:33', NULL) set"); |
| 177 | ok( thresholds->critical == NULL, "Critical not set"); | 165 | ok(thresholds->warning->start == 5, "Warning start set"); |
| 178 | 166 | ok(thresholds->warning->end == 33, "Warning end set"); | |
| 179 | rc = _set_thresholds(&thresholds, "30", "60"); | 167 | ok(thresholds->critical == NULL, "Critical not set"); |
| 180 | ok( rc == 0, "Thresholds ('30', '60') set"); | 168 | |
| 181 | ok( thresholds->warning->end == 30, "Warning set correctly"); | 169 | returnCode = _set_thresholds(&thresholds, "30", "60"); |
| 182 | ok( thresholds->critical->end == 60, "Critical set correctly"); | 170 | ok(returnCode == 0, "Thresholds ('30', '60') set"); |
| 183 | ok( get_status(15.3, thresholds) == STATE_OK, "15.3 - ok"); | 171 | ok(thresholds->warning->end == 30, "Warning set correctly"); |
| 184 | ok( get_status(30.0001, thresholds) == STATE_WARNING, "30.0001 - warning"); | 172 | ok(thresholds->critical->end == 60, "Critical set correctly"); |
| 185 | ok( get_status(69, thresholds) == STATE_CRITICAL, "69 - critical"); | 173 | ok(get_status(15.3, thresholds) == STATE_OK, "15.3 - ok"); |
| 186 | 174 | ok(get_status(30.0001, thresholds) == STATE_WARNING, "30.0001 - warning"); | |
| 187 | rc = _set_thresholds(&thresholds, "-10:-2", "-30:20"); | 175 | ok(get_status(69, thresholds) == STATE_CRITICAL, "69 - critical"); |
| 188 | ok( rc == 0, "Thresholds ('-30:20', '-10:-2') set"); | 176 | |
| 189 | ok( thresholds->warning->start == -10, "Warning start set correctly"); | 177 | returnCode = _set_thresholds(&thresholds, "-10:-2", "-30:20"); |
| 190 | ok( thresholds->warning->end == -2, "Warning end set correctly"); | 178 | ok(returnCode == 0, "Thresholds ('-30:20', '-10:-2') set"); |
| 191 | ok( thresholds->critical->start == -30, "Critical start set correctly"); | 179 | ok(thresholds->warning->start == -10, "Warning start set correctly"); |
| 192 | ok( thresholds->critical->end == 20, "Critical end set correctly"); | 180 | ok(thresholds->warning->end == -2, "Warning end set correctly"); |
| 193 | ok( get_status(-31, thresholds) == STATE_CRITICAL, "-31 - critical"); | 181 | ok(thresholds->critical->start == -30, "Critical start set correctly"); |
| 194 | ok( get_status(-29, thresholds) == STATE_WARNING, "-29 - warning"); | 182 | ok(thresholds->critical->end == 20, "Critical end set correctly"); |
| 195 | ok( get_status(-11, thresholds) == STATE_WARNING, "-11 - warning"); | 183 | ok(get_status(-31, thresholds) == STATE_CRITICAL, "-31 - critical"); |
| 196 | ok( get_status(-10, thresholds) == STATE_OK, "-10 - ok"); | 184 | ok(get_status(-29, thresholds) == STATE_WARNING, "-29 - warning"); |
| 197 | ok( get_status(-2, thresholds) == STATE_OK, "-2 - ok"); | 185 | ok(get_status(-11, thresholds) == STATE_WARNING, "-11 - warning"); |
| 198 | ok( get_status(-1, thresholds) == STATE_WARNING, "-1 - warning"); | 186 | ok(get_status(-10, thresholds) == STATE_OK, "-10 - ok"); |
| 199 | ok( get_status(19, thresholds) == STATE_WARNING, "19 - warning"); | 187 | ok(get_status(-2, thresholds) == STATE_OK, "-2 - ok"); |
| 200 | ok( get_status(21, thresholds) == STATE_CRITICAL, "21 - critical"); | 188 | ok(get_status(-1, thresholds) == STATE_WARNING, "-1 - warning"); |
| 189 | ok(get_status(19, thresholds) == STATE_WARNING, "19 - warning"); | ||
| 190 | ok(get_status(21, thresholds) == STATE_CRITICAL, "21 - critical"); | ||
| 201 | 191 | ||
| 202 | char *test; | 192 | char *test; |
| 203 | test = np_escaped_string("bob\\n"); | 193 | test = np_escaped_string("bob\\n"); |
| 204 | ok( strcmp(test, "bob\n") == 0, "bob\\n ok"); | 194 | ok(strcmp(test, "bob\n") == 0, "bob\\n ok"); |
| 205 | free(test); | 195 | free(test); |
| 206 | 196 | ||
| 207 | test = np_escaped_string("rhuba\\rb"); | 197 | test = np_escaped_string("rhuba\\rb"); |
| 208 | ok( strcmp(test, "rhuba\rb") == 0, "rhuba\\rb okay"); | 198 | ok(strcmp(test, "rhuba\rb") == 0, "rhuba\\rb okay"); |
| 209 | free(test); | 199 | free(test); |
| 210 | 200 | ||
| 211 | test = np_escaped_string("ba\\nge\\r"); | 201 | test = np_escaped_string("ba\\nge\\r"); |
| 212 | ok( strcmp(test, "ba\nge\r") == 0, "ba\\nge\\r okay"); | 202 | ok(strcmp(test, "ba\nge\r") == 0, "ba\\nge\\r okay"); |
| 213 | free(test); | 203 | free(test); |
| 214 | 204 | ||
| 215 | test = np_escaped_string("\\rabbi\\t"); | 205 | test = np_escaped_string("\\rabbi\\t"); |
| 216 | ok( strcmp(test, "\rabbi\t") == 0, "\\rabbi\\t okay"); | 206 | ok(strcmp(test, "\rabbi\t") == 0, "\\rabbi\\t okay"); |
| 217 | free(test); | 207 | free(test); |
| 218 | 208 | ||
| 219 | test = np_escaped_string("and\\\\or"); | 209 | test = np_escaped_string("and\\\\or"); |
| 220 | ok( strcmp(test, "and\\or") == 0, "and\\\\or okay"); | 210 | ok(strcmp(test, "and\\or") == 0, "and\\\\or okay"); |
| 221 | free(test); | 211 | free(test); |
| 222 | 212 | ||
| 223 | test = np_escaped_string("bo\\gus"); | 213 | test = np_escaped_string("bo\\gus"); |
| 224 | ok( strcmp(test, "bogus") == 0, "bo\\gus okay"); | 214 | ok(strcmp(test, "bogus") == 0, "bo\\gus okay"); |
| 225 | free(test); | 215 | free(test); |
| 226 | 216 | ||
| 227 | test = np_escaped_string("everything"); | 217 | test = np_escaped_string("everything"); |
| 228 | ok( strcmp(test, "everything") == 0, "everything okay"); | 218 | ok(strcmp(test, "everything") == 0, "everything okay"); |
| 229 | 219 | ||
| 230 | /* np_extract_ntpvar tests (23) */ | 220 | /* np_extract_ntpvar tests (23) */ |
| 231 | test=np_extract_ntpvar("foo=bar, bar=foo, foobar=barfoo\n", "foo"); | 221 | test = np_extract_ntpvar("foo=bar, bar=foo, foobar=barfoo\n", "foo"); |
| 232 | ok(test && !strcmp(test, "bar"), "1st test as expected"); | 222 | ok(test && !strcmp(test, "bar"), "1st test as expected"); |
| 233 | free(test); | 223 | free(test); |
| 234 | 224 | ||
| 235 | test=np_extract_ntpvar("foo=bar,bar=foo,foobar=barfoo\n", "bar"); | 225 | test = np_extract_ntpvar("foo=bar,bar=foo,foobar=barfoo\n", "bar"); |
| 236 | ok(test && !strcmp(test, "foo"), "2nd test as expected"); | 226 | ok(test && !strcmp(test, "foo"), "2nd test as expected"); |
| 237 | free(test); | 227 | free(test); |
| 238 | 228 | ||
| 239 | test=np_extract_ntpvar("foo=bar, bar=foo, foobar=barfoo\n", "foobar"); | 229 | test = np_extract_ntpvar("foo=bar, bar=foo, foobar=barfoo\n", "foobar"); |
| 240 | ok(test && !strcmp(test, "barfoo"), "3rd test as expected"); | 230 | ok(test && !strcmp(test, "barfoo"), "3rd test as expected"); |
| 241 | free(test); | 231 | free(test); |
| 242 | 232 | ||
| 243 | test=np_extract_ntpvar("foo=bar\n", "foo"); | 233 | test = np_extract_ntpvar("foo=bar\n", "foo"); |
| 244 | ok(test && !strcmp(test, "bar"), "Single test as expected"); | 234 | ok(test && !strcmp(test, "bar"), "Single test as expected"); |
| 245 | free(test); | 235 | free(test); |
| 246 | 236 | ||
| 247 | test=np_extract_ntpvar("foo=bar, bar=foo, foobar=barfooi\n", "abcd"); | 237 | test = np_extract_ntpvar("foo=bar, bar=foo, foobar=barfooi\n", "abcd"); |
| 248 | ok(!test, "Key not found 1"); | 238 | ok(!test, "Key not found 1"); |
| 249 | 239 | ||
| 250 | test=np_extract_ntpvar("foo=bar\n", "abcd"); | 240 | test = np_extract_ntpvar("foo=bar\n", "abcd"); |
| 251 | ok(!test, "Key not found 2"); | 241 | ok(!test, "Key not found 2"); |
| 252 | 242 | ||
| 253 | test=np_extract_ntpvar("foo=bar=foobar", "foo"); | 243 | test = np_extract_ntpvar("foo=bar=foobar", "foo"); |
| 254 | ok(test && !strcmp(test, "bar=foobar"), "Strange string 1"); | 244 | ok(test && !strcmp(test, "bar=foobar"), "Strange string 1"); |
| 255 | free(test); | 245 | free(test); |
| 256 | 246 | ||
| 257 | test=np_extract_ntpvar("foo", "foo"); | 247 | test = np_extract_ntpvar("foo", "foo"); |
| 258 | ok(!test, "Malformed string 1"); | 248 | ok(!test, "Malformed string 1"); |
| 259 | 249 | ||
| 260 | test=np_extract_ntpvar("foo,", "foo"); | 250 | test = np_extract_ntpvar("foo,", "foo"); |
| 261 | ok(!test, "Malformed string 2"); | 251 | ok(!test, "Malformed string 2"); |
| 262 | 252 | ||
| 263 | test=np_extract_ntpvar("foo=", "foo"); | 253 | test = np_extract_ntpvar("foo=", "foo"); |
| 264 | ok(!test, "Malformed string 3"); | 254 | ok(!test, "Malformed string 3"); |
| 265 | 255 | ||
| 266 | test=np_extract_ntpvar("foo=,bar=foo", "foo"); | 256 | test = np_extract_ntpvar("foo=,bar=foo", "foo"); |
| 267 | ok(!test, "Malformed string 4"); | 257 | ok(!test, "Malformed string 4"); |
| 268 | 258 | ||
| 269 | test=np_extract_ntpvar(",foo", "foo"); | 259 | test = np_extract_ntpvar(",foo", "foo"); |
| 270 | ok(!test, "Malformed string 5"); | 260 | ok(!test, "Malformed string 5"); |
| 271 | 261 | ||
| 272 | test=np_extract_ntpvar("=foo", "foo"); | 262 | test = np_extract_ntpvar("=foo", "foo"); |
| 273 | ok(!test, "Malformed string 6"); | 263 | ok(!test, "Malformed string 6"); |
| 274 | 264 | ||
| 275 | test=np_extract_ntpvar("=foo,", "foo"); | 265 | test = np_extract_ntpvar("=foo,", "foo"); |
| 276 | ok(!test, "Malformed string 7"); | 266 | ok(!test, "Malformed string 7"); |
| 277 | 267 | ||
| 278 | test=np_extract_ntpvar(",,,", "foo"); | 268 | test = np_extract_ntpvar(",,,", "foo"); |
| 279 | ok(!test, "Malformed string 8"); | 269 | ok(!test, "Malformed string 8"); |
| 280 | 270 | ||
| 281 | test=np_extract_ntpvar("===", "foo"); | 271 | test = np_extract_ntpvar("===", "foo"); |
| 282 | ok(!test, "Malformed string 9"); | 272 | ok(!test, "Malformed string 9"); |
| 283 | 273 | ||
| 284 | test=np_extract_ntpvar(",=,=,", "foo"); | 274 | test = np_extract_ntpvar(",=,=,", "foo"); |
| 285 | ok(!test, "Malformed string 10"); | 275 | ok(!test, "Malformed string 10"); |
| 286 | 276 | ||
| 287 | test=np_extract_ntpvar("=,=,=", "foo"); | 277 | test = np_extract_ntpvar("=,=,=", "foo"); |
| 288 | ok(!test, "Malformed string 11"); | 278 | ok(!test, "Malformed string 11"); |
| 289 | 279 | ||
| 290 | test=np_extract_ntpvar(" foo=bar ,\n bar=foo\n , foobar=barfoo \n ", "foo"); | 280 | test = np_extract_ntpvar(" foo=bar ,\n bar=foo\n , foobar=barfoo \n ", "foo"); |
| 291 | ok(test && !strcmp(test, "bar"), "Random spaces and newlines 1"); | 281 | ok(test && !strcmp(test, "bar"), "Random spaces and newlines 1"); |
| 292 | free(test); | 282 | free(test); |
| 293 | 283 | ||
| 294 | test=np_extract_ntpvar(" foo=bar ,\n bar=foo\n , foobar=barfoo \n ", "bar"); | 284 | test = np_extract_ntpvar(" foo=bar ,\n bar=foo\n , foobar=barfoo \n ", "bar"); |
| 295 | ok(test && !strcmp(test, "foo"), "Random spaces and newlines 2"); | 285 | ok(test && !strcmp(test, "foo"), "Random spaces and newlines 2"); |
| 296 | free(test); | 286 | free(test); |
| 297 | 287 | ||
| 298 | test=np_extract_ntpvar(" foo=bar ,\n bar=foo\n , foobar=barfoo \n ", "foobar"); | 288 | test = np_extract_ntpvar(" foo=bar ,\n bar=foo\n , foobar=barfoo \n ", "foobar"); |
| 299 | ok(test && !strcmp(test, "barfoo"), "Random spaces and newlines 3"); | 289 | ok(test && !strcmp(test, "barfoo"), "Random spaces and newlines 3"); |
| 300 | free(test); | 290 | free(test); |
| 301 | 291 | ||
| 302 | test=np_extract_ntpvar(" foo=bar ,\n bar\n \n= \n foo\n , foobar=barfoo \n ", "bar"); | 292 | test = np_extract_ntpvar(" foo=bar ,\n bar\n \n= \n foo\n , foobar=barfoo \n ", "bar"); |
| 303 | ok(test && !strcmp(test, "foo"), "Random spaces and newlines 4"); | 293 | ok(test && !strcmp(test, "foo"), "Random spaces and newlines 4"); |
| 304 | free(test); | 294 | free(test); |
| 305 | 295 | ||
| 306 | test=np_extract_ntpvar("", "foo"); | 296 | test = np_extract_ntpvar("", "foo"); |
| 307 | ok(!test, "Empty string return NULL"); | 297 | ok(!test, "Empty string return NULL"); |
| 308 | 298 | ||
| 309 | |||
| 310 | /* This is the result of running ./test_utils */ | ||
| 311 | temp_string = (char *) _np_state_generate_key(); | ||
| 312 | ok(!strcmp(temp_string, "e2d17f995fd4c020411b85e3e3d0ff7306d4147e"), "Got hash with exe and no parameters" ) || | ||
| 313 | diag( "You are probably running in wrong directory. Must run as ./test_utils" ); | ||
| 314 | |||
| 315 | |||
| 316 | this_monitoring_plugin->argc=4; | ||
| 317 | this_monitoring_plugin->argv[0] = "./test_utils"; | ||
| 318 | this_monitoring_plugin->argv[1] = "here"; | ||
| 319 | this_monitoring_plugin->argv[2] = "--and"; | ||
| 320 | this_monitoring_plugin->argv[3] = "now"; | ||
| 321 | temp_string = (char *) _np_state_generate_key(); | ||
| 322 | ok(!strcmp(temp_string, "bd72da9f78ff1419fad921ea5e43ce56508aef6c"), "Got based on expected argv" ); | ||
| 323 | |||
| 324 | unsetenv("MP_STATE_PATH"); | ||
| 325 | temp_string = (char *) _np_state_calculate_location_prefix(); | ||
| 326 | ok(!strcmp(temp_string, NP_STATE_DIR_PREFIX), "Got default directory" ); | ||
| 327 | |||
| 328 | setenv("MP_STATE_PATH", "", 1); | ||
| 329 | temp_string = (char *) _np_state_calculate_location_prefix(); | ||
| 330 | ok(!strcmp(temp_string, NP_STATE_DIR_PREFIX), "Got default directory even with empty string" ); | ||
| 331 | |||
| 332 | setenv("MP_STATE_PATH", "/usr/local/nagios/var", 1); | ||
| 333 | temp_string = (char *) _np_state_calculate_location_prefix(); | ||
| 334 | ok(!strcmp(temp_string, "/usr/local/nagios/var"), "Got default directory" ); | ||
| 335 | |||
| 336 | |||
| 337 | |||
| 338 | ok(temp_state_key==NULL, "temp_state_key initially empty"); | ||
| 339 | |||
| 340 | this_monitoring_plugin->argc=1; | ||
| 341 | this_monitoring_plugin->argv[0] = "./test_utils"; | ||
| 342 | np_enable_state(NULL, 51); | ||
| 343 | temp_state_key = this_monitoring_plugin->state; | ||
| 344 | ok( !strcmp(temp_state_key->plugin_name, "check_test"), "Got plugin name" ); | ||
| 345 | ok( !strcmp(temp_state_key->name, "e2d17f995fd4c020411b85e3e3d0ff7306d4147e"), "Got generated filename" ); | ||
| 346 | |||
| 347 | |||
| 348 | np_enable_state("allowedchars_in_keyname", 77); | ||
| 349 | temp_state_key = this_monitoring_plugin->state; | ||
| 350 | sprintf(state_path, "/usr/local/nagios/var/%lu/check_test/allowedchars_in_keyname", (unsigned long)geteuid()); | ||
| 351 | ok( !strcmp(temp_state_key->plugin_name, "check_test"), "Got plugin name" ); | ||
| 352 | ok( !strcmp(temp_state_key->name, "allowedchars_in_keyname"), "Got key name with valid chars" ); | ||
| 353 | ok( !strcmp(temp_state_key->_filename, state_path), "Got internal filename" ); | ||
| 354 | |||
| 355 | |||
| 356 | /* Don't do this test just yet. Will die */ | ||
| 357 | /* | ||
| 358 | np_enable_state("bad^chars$in@here", 77); | ||
| 359 | temp_state_key = this_monitoring_plugin->state; | ||
| 360 | ok( !strcmp(temp_state_key->name, "bad_chars_in_here"), "Got key name with bad chars replaced" ); | ||
| 361 | */ | ||
| 362 | |||
| 363 | np_enable_state("funnykeyname", 54); | ||
| 364 | temp_state_key = this_monitoring_plugin->state; | ||
| 365 | sprintf(state_path, "/usr/local/nagios/var/%lu/check_test/funnykeyname", (unsigned long)geteuid()); | ||
| 366 | ok( !strcmp(temp_state_key->plugin_name, "check_test"), "Got plugin name" ); | ||
| 367 | ok( !strcmp(temp_state_key->name, "funnykeyname"), "Got key name" ); | ||
| 368 | |||
| 369 | |||
| 370 | |||
| 371 | ok( !strcmp(temp_state_key->_filename, state_path), "Got internal filename" ); | ||
| 372 | ok( temp_state_key->data_version==54, "Version set" ); | ||
| 373 | |||
| 374 | temp_state_data = np_state_read(); | ||
| 375 | ok( temp_state_data==NULL, "Got no state data as file does not exist" ); | ||
| 376 | |||
| 377 | |||
| 378 | /* | ||
| 379 | temp_fp = fopen("var/statefile", "r"); | ||
| 380 | if (temp_fp==NULL) | ||
| 381 | printf("Error opening. errno=%d\n", errno); | ||
| 382 | printf("temp_fp=%s\n", temp_fp); | ||
| 383 | ok( _np_state_read_file(temp_fp) == true, "Can read state file" ); | ||
| 384 | fclose(temp_fp); | ||
| 385 | */ | ||
| 386 | |||
| 387 | temp_state_key->_filename="var/statefile"; | ||
| 388 | temp_state_data = np_state_read(); | ||
| 389 | ok( this_monitoring_plugin->state->state_data!=NULL, "Got state data now" ) || diag("Are you running in right directory? Will get coredump next if not"); | ||
| 390 | ok( this_monitoring_plugin->state->state_data->time==1234567890, "Got time" ); | ||
| 391 | ok( !strcmp((char *)this_monitoring_plugin->state->state_data->data, "String to read"), "Data as expected" ); | ||
| 392 | |||
| 393 | temp_state_key->data_version=53; | ||
| 394 | temp_state_data = np_state_read(); | ||
| 395 | ok( temp_state_data==NULL, "Older data version gives NULL" ); | ||
| 396 | temp_state_key->data_version=54; | ||
| 397 | |||
| 398 | temp_state_key->_filename="var/nonexistent"; | ||
| 399 | temp_state_data = np_state_read(); | ||
| 400 | ok( temp_state_data==NULL, "Missing file gives NULL" ); | ||
| 401 | ok( this_monitoring_plugin->state->state_data==NULL, "No state information" ); | ||
| 402 | |||
| 403 | temp_state_key->_filename="var/oldformat"; | ||
| 404 | temp_state_data = np_state_read(); | ||
| 405 | ok( temp_state_data==NULL, "Old file format gives NULL" ); | ||
| 406 | |||
| 407 | temp_state_key->_filename="var/baddate"; | ||
| 408 | temp_state_data = np_state_read(); | ||
| 409 | ok( temp_state_data==NULL, "Bad date gives NULL" ); | ||
| 410 | |||
| 411 | temp_state_key->_filename="var/missingdataline"; | ||
| 412 | temp_state_data = np_state_read(); | ||
| 413 | ok( temp_state_data==NULL, "Missing data line gives NULL" ); | ||
| 414 | |||
| 415 | |||
| 416 | |||
| 417 | |||
| 418 | unlink("var/generated"); | ||
| 419 | temp_state_key->_filename="var/generated"; | ||
| 420 | current_time=1234567890; | ||
| 421 | np_state_write_string(current_time, "String to read"); | ||
| 422 | ok(system("cmp var/generated var/statefile")==0, "Generated file same as expected"); | ||
| 423 | |||
| 424 | |||
| 425 | |||
| 426 | |||
| 427 | unlink("var/generated_directory/statefile"); | ||
| 428 | unlink("var/generated_directory"); | ||
| 429 | temp_state_key->_filename="var/generated_directory/statefile"; | ||
| 430 | current_time=1234567890; | ||
| 431 | np_state_write_string(current_time, "String to read"); | ||
| 432 | ok(system("cmp var/generated_directory/statefile var/statefile")==0, "Have created directory"); | ||
| 433 | |||
| 434 | /* This test to check cannot write to dir - can't automate yet */ | ||
| 435 | /* | ||
| 436 | unlink("var/generated_bad_dir"); | ||
| 437 | mkdir("var/generated_bad_dir", S_IRUSR); | ||
| 438 | np_state_write_string(current_time, "String to read"); | ||
| 439 | */ | ||
| 440 | |||
| 441 | |||
| 442 | temp_state_key->_filename="var/generated"; | ||
| 443 | time(¤t_time); | ||
| 444 | np_state_write_string(0, "String to read"); | ||
| 445 | temp_state_data = np_state_read(); | ||
| 446 | /* Check time is set to current_time */ | ||
| 447 | ok(system("cmp var/generated var/statefile > /dev/null")!=0, "Generated file should be different this time"); | ||
| 448 | ok(this_monitoring_plugin->state->state_data->time-current_time<=1, "Has time generated from current time"); | ||
| 449 | |||
| 450 | |||
| 451 | /* Don't know how to automatically test this. Need to be able to redefine die and catch the error */ | ||
| 452 | /* | ||
| 453 | temp_state_key->_filename="/dev/do/not/expect/to/be/able/to/write"; | ||
| 454 | np_state_write_string(0, "Bad file"); | ||
| 455 | */ | ||
| 456 | |||
| 457 | |||
| 458 | np_cleanup(); | ||
| 459 | |||
| 460 | ok(this_monitoring_plugin==NULL, "Free'd this_monitoring_plugin"); | ||
| 461 | |||
| 462 | ok(mp_suid() == false, "Test aren't suid"); | 299 | ok(mp_suid() == false, "Test aren't suid"); |
| 463 | 300 | ||
| 464 | /* base states with random case */ | 301 | /* base states with random case */ |
| 465 | char *states[] = { | 302 | char *states[] = {"Ok", "wArnINg", "cRiTIcaL", "UnKNoWN", NULL}; |
| 466 | "Ok", | 303 | |
| 467 | "wArnINg", | 304 | for (int i = 0; states[i] != NULL; i++) { |
| 468 | "cRiTIcaL", | 305 | /* out of the random case states, create the lower and upper versions + numeric string one |
| 469 | "UnKNoWN", | 306 | */ |
| 470 | NULL | ||
| 471 | }; | ||
| 472 | |||
| 473 | for (i=0; states[i]!=NULL; i++) { | ||
| 474 | /* out of the random case states, create the lower and upper versions + numeric string one */ | ||
| 475 | char *statelower = strdup(states[i]); | 307 | char *statelower = strdup(states[i]); |
| 476 | char *stateupper = strdup(states[i]); | 308 | char *stateupper = strdup(states[i]); |
| 477 | char statenum[2]; | 309 | char statenum[2]; |
| 478 | char *temp_ptr; | 310 | for (char *temp_ptr = statelower; *temp_ptr; temp_ptr++) { |
| 479 | for (temp_ptr = statelower; *temp_ptr; temp_ptr++) { | 311 | *temp_ptr = (char)tolower(*temp_ptr); |
| 480 | *temp_ptr = tolower(*temp_ptr); | ||
| 481 | } | 312 | } |
| 482 | for (temp_ptr = stateupper; *temp_ptr; temp_ptr++) { | 313 | for (char *temp_ptr = stateupper; *temp_ptr; temp_ptr++) { |
| 483 | *temp_ptr = toupper(*temp_ptr); | 314 | *temp_ptr = (char)toupper(*temp_ptr); |
| 484 | } | 315 | } |
| 485 | snprintf(statenum, 2, "%i", i); | 316 | snprintf(statenum, 2, "%i", i); |
| 486 | 317 | ||
| 487 | /* Base test names, we'll append the state string */ | 318 | /* Base test names, we'll append the state string */ |
| 488 | char testname[64] = "Translate state string: "; | 319 | char testname[64] = "Translate state string: "; |
| 489 | int tlen = strlen(testname); | 320 | size_t tlen = strlen(testname); |
| 490 | 321 | ||
| 491 | strcpy(testname+tlen, states[i]); | 322 | strcpy(testname + tlen, states[i]); |
| 492 | ok(i==mp_translate_state(states[i]), testname); | 323 | ok(i == mp_translate_state(states[i]), testname); |
| 493 | 324 | ||
| 494 | strcpy(testname+tlen, statelower); | 325 | strcpy(testname + tlen, statelower); |
| 495 | ok(i==mp_translate_state(statelower), testname); | 326 | ok(i == mp_translate_state(statelower), testname); |
| 496 | 327 | ||
| 497 | strcpy(testname+tlen, stateupper); | 328 | strcpy(testname + tlen, stateupper); |
| 498 | ok(i==mp_translate_state(stateupper), testname); | 329 | ok(i == mp_translate_state(stateupper), testname); |
| 499 | 330 | ||
| 500 | strcpy(testname+tlen, statenum); | 331 | strcpy(testname + tlen, statenum); |
| 501 | ok(i==mp_translate_state(statenum), testname); | 332 | ok(i == mp_translate_state(statenum), testname); |
| 502 | } | 333 | } |
| 503 | ok(ERROR==mp_translate_state("warningfewgw"), "Translate state string with garbage"); | 334 | ok(ERROR == mp_translate_state("warningfewgw"), "Translate state string with garbage"); |
| 504 | ok(ERROR==mp_translate_state("00"), "Translate state string: bad numeric string 1"); | 335 | ok(ERROR == mp_translate_state("00"), "Translate state string: bad numeric string 1"); |
| 505 | ok(ERROR==mp_translate_state("01"), "Translate state string: bad numeric string 2"); | 336 | ok(ERROR == mp_translate_state("01"), "Translate state string: bad numeric string 2"); |
| 506 | ok(ERROR==mp_translate_state("10"), "Translate state string: bad numeric string 3"); | 337 | ok(ERROR == mp_translate_state("10"), "Translate state string: bad numeric string 3"); |
| 507 | ok(ERROR==mp_translate_state(""), "Translate state string: empty string"); | 338 | ok(ERROR == mp_translate_state(""), "Translate state string: empty string"); |
| 508 | 339 | ||
| 509 | return exit_status(); | 340 | return exit_status(); |
| 510 | } | 341 | } |
