─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── # │ Status │ Test case description ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── evaluate ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ strings comparison, brackets outside of the first operand 1 │ OK │ strings comparison, broken expression 2 │ OK │ strings comparison, location of brackets around operands is different 3 │ OK │ strings comparison, brackets inside of the second operand 4 │ OK │ strings comparison, castable to ints 5 │ OK │ strings comparison, single bracket 6 │ OK │ strings comparison 7 │ OK │ strings that are ints comparison 8 │ OK │ strings empty space 1 9 │ OK │ strings empty space 2 10 │ OK │ strings null terminators 11 │ OK │ strings are quotes 1 12 │ OK │ strings are quotes 2 13 │ OK │ strings are escapes 1 14 │ OK │ strings are escapes 2 15 │ OK │ strings are escapes 3 16 │ OK │ strings are escapes 4 17 │ OK │ strings comparison, carriage return 1 18 │ OK │ strings comparison, carriage return 2 19 │ OK │ strings comparison, carriage return 3 20 │ OK │ strings comparison, carriage return 4 21 │ OK │ strings comparison, carriage return 5 22 │ OK │ strings comparison, operands are different 23 │ OK │ strings comparison, empty strings 24 │ OK │ strings comparison, brackets are outside of the second operand 25 │ OK │ strings comparison, brackets are outside of both operands 26 │ OK │ strings comparison, empty operands 1 27 │ OK │ strings comparison, empty operands 2 28 │ OK │ strings comparison, empty operands 3 29 │ OK │ strings comparison, empty operands 3 30 │ OK │ strings comparison, operands are are brackets 31 │ OK │ string castable 32 │ OK │ not_castable_str 1 33 │ OK │ not_castable_str 2 34 │ OK │ not_castable_str 3 35 │ OK │ string castable negative 36 │ OK │ string castable with suffix 37 │ OK │ string castable with suffix str comparison 1 38 │ OK │ string castable with suffix str comparison 2 39 │ OK │ string castable with suffix str comparison 3 40 │ OK │ string castable with suffix int comparison 1 41 │ OK │ string castable with suffix int comparison 2 42 │ OK │ string castable with suffix, suffix comparison 1 43 │ OK │ string castable with suffix, suffix comparison 2 44 │ OK │ unicode 1 45 │ OK │ unicode 2 46 │ OK │ scientific notation, simple comparison 47 │ OK │ scientific notation, large int number 48 │ OK │ scientific notation, large string number 49 │ OK │ scientific notation, negative exponent 50 │ OK │ scientific notation, precision limit holds 51 │ OK │ scientific notation, precision limit does not hold 52 │ OK │ scientific notation, precision limit does not hold 2 53 │ OK │ scientific notation, negative number 54 │ OK │ scientific notation, negative number 2 55 │ OK │ scientific notation, addition 56 │ OK │ term 8, one on its own 57 │ OK │ term 8, one with brackets 58 │ OK │ term 8, not_castable_str negative 1 59 │ OK │ term 8, not_castable_str negative 2 60 │ OK │ term 8, not_castable_str quotes 61 │ OK │ term 8, not_castable_str quotes 2 62 │ OK │ term 8, not_castable_str quotes 3 63 │ OK │ term 8, not_castable_str quotes 4 64 │ OK │ term 8, not_castable_str quotes 5 65 │ OK │ term 8, not_castable_str quotes 6 66 │ OK │ term 7, one 67 │ OK │ term 7, zero 68 │ OK │ term 7, negative 69 │ OK │ term 7, no space 70 │ OK │ term 7, not_castable_str 71 │ OK │ term 6 / str and str 72 │ OK │ term 6 / int and str 73 │ OK │ term 6 / str and int 74 │ OK │ term 6 / not_castable_str and int 75 │ OK │ term 6 / int and not_castable_str 76 │ OK │ term 6 / int and not_castable_string negative 77 │ OK │ term 6 / not_castable_str and not_castable_str 78 │ OK │ term 6 / castable_str and not_castable_str 79 │ OK │ term 6 / not_castable_str and zero int 80 │ OK │ term 6 / not_castable_str and zero str 81 │ OK │ term 6 / str and zero str 82 │ OK │ term 6 * str and str 83 │ OK │ term 6 * str and int 84 │ OK │ term 6 * int and str 85 │ OK │ term 6 * int and not_castable_str 86 │ OK │ term 6 * not_castable_str and int 87 │ OK │ term 6 * not_castable_str and not_castable_str 88 │ OK │ term 5 + str and str 89 │ OK │ term 5 + str and int 90 │ OK │ term 5 + int and str 91 │ OK │ term 5 + int and not_castable_str 92 │ OK │ term 5 + not_castable_str and int 93 │ OK │ term 5 + castable_str and not_castable_str 94 │ OK │ term 5 - str and str 95 │ OK │ term 5 - int and str 96 │ OK │ term 5 - str and int 97 │ OK │ term 5 - not_castable_str and int 98 │ OK │ term 5 - int and not_castable_str 99 │ OK │ term 4 <= str and str 1 100 │ OK │ term 4 <= str and str 2 101 │ OK │ term 4 <= str and int 102 │ OK │ term 4 <= str and int 103 │ OK │ term 4 <= int and not_castable_str 104 │ OK │ term 4 <= not_castable_str and castable_str 105 │ OK │ term 4 >= str and str 1 106 │ OK │ term 4 >= not_castable_str and int 107 │ OK │ term 4 >= int and not_castable_str 108 │ OK │ term 4 >= str and str 2 109 │ OK │ term 4 >= str and int 110 │ OK │ term 4 >= str and int 111 │ OK │ term 4 < str and str 1 112 │ OK │ term 4 < str and str 2 113 │ OK │ term 4 < str and int 114 │ OK │ term 4 < str and int 115 │ OK │ term 4 < not_castable_str and int 116 │ OK │ term 4 < str and not_castable_str 117 │ OK │ term 4 > str and str 1 118 │ OK │ term 4 > str and str 2 119 │ OK │ term 4 > str and int 120 │ OK │ term 4 > str and int 121 │ OK │ term 4 > str and not_castable_str 122 │ OK │ term 4 > not_castable_str and int 123 │ OK │ term 3 = str and str 1 124 │ OK │ term 3 = str and str 2 125 │ OK │ term 3 = str and str 2, empty space 126 │ OK │ term 3 = not_castable_str and not_castable_str 1 127 │ OK │ term 3 = not_castable_str and not_castable_str 2 128 │ OK │ term 3 = not_castable_str and not_castable_str 3 129 │ OK │ term 3 = str and int 1 130 │ OK │ term 3 = str and int 2 131 │ OK │ term 3 = str and int empty space 132 │ OK │ term 3 = int and str 1 133 │ OK │ term 3 = int and str 2 134 │ OK │ term 3 = int and str empty space 135 │ OK │ term 3 = int and not_castable_str 136 │ OK │ term 3 <> str and str 1 137 │ OK │ term 3 <> str and str 2 138 │ OK │ term 3 <> not_castable_str and not_castable_str 1 139 │ OK │ term 3 <> not_castable_str and not_castable_str 2 140 │ OK │ term 3 <> not_castable_str and not_castable_str 3 141 │ OK │ term 3 <> str and int 1 142 │ OK │ term 3 <> str and int 2 143 │ OK │ term 3 <> int and str 1 144 │ OK │ term 3 <> int and str 2 145 │ OK │ term 3 <> not_castable_str and int 146 │ OK │ term 2 and str and str 1 147 │ OK │ term 2 and str and str 2 148 │ OK │ term 2 and str and not_castable_str 149 │ OK │ term 2 and not_castable_str and int 150 │ OK │ term 2 and not_castable_str and not_castable_str 151 │ OK │ term 2 and str and int 1 152 │ OK │ term 2 and str and int 2 153 │ OK │ term 2 and int and str 1 154 │ OK │ term 2 and int and str 1 155 │ OK │ term 1 or str and str 1 156 │ OK │ term 1 or str and str 2 157 │ OK │ term 1 or str and not_castable_str 158 │ OK │ term 1 or not_castable_str and int 159 │ OK │ term 1 or not_castable_str and not_castable_str 1 160 │ OK │ term 1 or not_castable_str and not_castable_str 2 161 │ OK │ term 1 or str and int 1 162 │ OK │ term 1 or str and int 2 163 │ OK │ term 1 or int and str 1 164 │ OK │ term 1 or int and str 1 165 │ OK │ Valid expression "-1" 166 │ OK │ Valid expression "- 1" 167 │ OK │ Valid expression " - 1K " 168 │ OK │ Valid expression "not -1" 169 │ OK │ Valid expression "not 1" 170 │ OK │ Valid expression "not 0" 171 │ OK │ Valid expression "1.5 * 4" 172 │ OK │ Valid expression "1024K/4M" 173 │ OK │ Valid expression "1+2 174 │ OK │ Valid expression "1-2" 175 │ OK │ Valid expression "1<2" 176 │ OK │ Valid expression "1<1" 177 │ OK │ Valid expression "2<1" 178 │ OK │ Valid expression "1<=2" 179 │ OK │ Valid expression "2<=2" 180 │ OK │ Valid expression "3<=2" 181 │ OK │ Valid expression "2>=1" 182 │ OK │ Valid expression "2>=2" 183 │ OK │ Valid expression "1>=2" 184 │ OK │ Valid expression "2>1" 185 │ OK │ Valid expression "1>1" 186 │ OK │ Valid expression "1>2" 187 │ OK │ Valid expression "1=1" 188 │ OK │ Valid expression "1=2" 189 │ OK │ Valid expression "1<>1" 190 │ OK │ Valid expression "1<>2" 191 │ OK │ Valid expression "1 and 1" 192 │ OK │ Valid expression "0 and 1" 193 │ OK │ Valid expression "1 and 0" 194 │ OK │ Valid expression "0 and 0" 195 │ OK │ Valid expression "1 or 1" 196 │ OK │ Valid expression "0 or 1" 197 │ OK │ Valid expression "1 or 0" 198 │ OK │ Valid expression "0 or 0" 199 │ OK │ Valid expression "not 1 or 1" int int 200 │ OK │ Valid expression "not 1 or 1" str str 201 │ OK │ Valid expression "not 1 or 1" str int 202 │ OK │ Valid expression "not 0 and 0" int str 203 │ OK │ Valid expression "-1-2-3-4" int int int int 204 │ OK │ Valid expression "-1-2-3-4" int str str str 205 │ OK │ Valid expression "-1-2-3-4" int str not_castable_str str 206 │ OK │ Valid expression "-1-(2-3-4)" 207 │ OK │ Valid expression "-1-(2-(3-4))" 208 │ OK │ Valid expression "-1/2/3/4" 209 │ OK │ Valid expression "-1/(2/3/4)" 210 │ OK │ Valid expression "1/(2/(3/4))" int int int int 211 │ OK │ Valid expression "1/(2/(3/4))" int str int str 212 │ OK │ Valid expression "5 + 10 / 3 * (not 0 + (1 or 0) + (1K and 1M))" all ints 213 │ OK │ Valid expression "5 + 10 / 3 * (not 0 + (1 or 0) + (1K and 1M))" ints and strings 214 │ OK │ Valid expression "3 * not 1 + (5 = 2 + 3) / 1000000000G + (1/10/100/1000 <> 1/1000000)" 215 │ OK │ Valid expression "2 * 3 * 5 * 7 = 300 + 4 * -30 - -20 + 10" all ints 216 │ OK │ Valid expression "2 * 3 * 5 * 7 = 300 + 4 * -30 - -20 + 10" all strings 217 │ OK │ Valid expression "-5 + 10 * -6 + 1e+2 + "1e+3" - 700 / (49 * (1 / (2 + 5))) = 935" 218 │ OK │ Valid expression "1<2=2<1" 219 │ OK │ Valid expression "1<2<>2<1" 220 │ OK │ Valid expression "0<>1<2<>0" 221 │ OK │ Valid expression "0<1<=1>=1>0" 222 │ OK │ Valid expression "1/0.2" 223 │ OK │ Valid expression "(1-(2=2))or(1/100000)" 224 │ OK │ Valid expression "(1-(2=2))or(1/1000000)" 225 │ OK │ Valid expression "(1-(2=2))or(1/2000000)" 226 │ OK │ Valid expression "1K-1 < 2 * 512 and not(0000000000000000000000000000000000000000000000000000000000000000000000000)" 227 │ OK │ Valid expression "2.5K = 256 * 10 and (not(1)or(1))" all ints 228 │ OK │ Valid expression "2.5K = 256 * 10 and (not(1)or(1))" all strings 229 │ OK │ Valid expression "not(not(not(not(not(not 1)))))" 230 │ OK │ Valid expression "-(-(-(-(-(-2.G)))))" int 231 │ OK │ Valid expression "-(-(-(-(-(-2.G)))))" string 232 │ OK │ Valid expression "-(-(-(-(-(-.1T)))))" 233 │ OK │ Valid expression "not 0 <> not 1" 234 │ OK │ Valid expression "not 0K >= not 1" 235 │ OK │ Valid expression "not 00.M > not 1" 236 │ OK │ Valid expression "not .000G > not 1" all ints 237 │ OK │ Valid expression "not .000G > not 1" all strings 238 │ OK │ Valid expression " 1 + 2 * 3 = 7 and ( - 1 or - 2 ) and not 0 " 239 │ OK │ Valid expression "(1+((2)*(3))=(7)and(-(1)or(-(2)))and(not(0)))" 240 │ OK │ Valid expression "\t1\t+\t2\t*\t3\t=\t7\tand\t(\t-\t1\tor\t-\t2\t)\tand\tnot\t0\t" all ints 241 │ OK │ Valid expression "\t1\t+\t2\t*\t3\t=\t7\tand\t(\t-\t1\tor\t-\t2\t)\tand\tnot\t0\t" all strings 242 │ OK │ Valid expression "\r1\r+\r2\r*\r3\r=\r7\rand\r(\r-\r1\ror\r-\r2\r)\rand\rnot\r0\r" 243 │ OK │ Valid expression "\n1\n+\n2\n*\n3\n=\n7\nand\n(\n-\n1\nor\n-\n2\n)\nand\nnot\n0\n" all ints 244 │ OK │ Valid expression "\n1\n+\n2\n*\n3\n=\n7\nand\n(\n-\n1\nor\n-\n2\n)\nand\nnot\n0\n" some ints some strings 245 │ OK │ Valid expression "(((((((((((((((((((((((((((((((1)))))))))))))))))))))))))))))))" int 246 │ OK │ Valid expression "(((((((((((((((((((((((((((((((1)))))))))))))))))))))))))))))))" string 247 │ OK │ Valid expression "-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-1)))))))))))))))))))))))))))))))" int 248 │ OK │ Valid expression "-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-1)))))))))))))))))))))))))))))))" str 249 │ OK │ Valid expression "-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-1)))))))))))))))))))))))))))))))" not_castable_str 250 │ OK │ Valid expression "17179869184 > 17179869184" 251 │ OK │ Valid expression "17179869184 < 17179869184" 252 │ OK │ Valid expression "17179869184 = 17179869184" 253 │ OK │ Valid expression "1 > 1 or 1 < 1 or 1 = 1" 254 │ OK │ Valid expression "0 > 0 or 0 < 0 or 0 = 0" all ints 255 │ OK │ Valid expression "0 > 0 or 0 < 0 or 0 = 0" some ints some strings 256 │ OK │ Valid expression "0 > 0 or 0 < 0 or 0 = 0" all strings 257 │ OK │ Valid expression "17179869184 > 17179869184 or 17179869184 < 17179869184 or 17179869184 = 17179869184" 258 │ OK │ Valid expression "17179869184.000001 > 17179869184 or 17179869184.000001 < 17179869184 or 17179869184.000001 = 17179869184" 259 │ OK │ Valid expression "17179869184 > 17179869184.000001 or 17179869184 < 17179869184.000001 or 17179869184 = 17179869184.000001" all ints 260 │ OK │ Valid expression "17179869184 > 17179869184.000001 or 17179869184 < 17179869184.000001 or 17179869184 = 17179869184.000001" some ints some strings 261 │ OK │ Valid expression "17179869184.000001 > 17179869184" 262 │ OK │ Valid expression "17179869184.000001 = 17179869184" all ints 263 │ OK │ Valid expression "17179869184.000001 = 17179869184" some ints some strings 264 │ OK │ Valid expression "17179869184.000001 < 17179869184" 265 │ OK │ Valid expression "17179869184.000001 <= 17179869184" 266 │ OK │ Valid expression "17179869184.000001 >= 17179869184" ints 267 │ OK │ Valid expression "17179869184.000001 >= 17179869184" string and int 268 │ OK │ Invalid expression "" 269 │ OK │ Invalid expression "" string 270 │ OK │ Invalid expression "+1" 271 │ OK │ Invalid expression "+1" string 272 │ OK │ Invalid expression "--1" 273 │ OK │ Invalid expression "--1" string 274 │ OK │ Expression "-"-1"" is valid 275 │ OK │ Invalid expression "--1" string 3 276 │ OK │ Invalid expression "not1" 277 │ OK │ Invalid expression "1not" 278 │ OK │ Invalid expression "not-1" 279 │ OK │ Invalid expression "not-1" string 280 │ OK │ Invalid expression "-not 1" 281 │ OK │ Invalid expression "-not 1" string 282 │ OK │ Invalid expression "- not(1)" 283 │ OK │ Invalid expression "not not 1" 284 │ OK │ Invalid expression "not not 1" string 285 │ OK │ Invalid expression "1and 1" 286 │ OK │ Invalid expression "1and 1" str 1 287 │ OK │ Invalid expression "1and 1" str 2 288 │ OK │ Invalid expression "1or 1" 289 │ OK │ Invalid expression "1or 1" str 290 │ OK │ Invalid expression "1 or1" 291 │ OK │ Invalid expression "1or 1" str 292 │ OK │ Invalid expression "1 or1" string 293 │ OK │ Invalid expression "1..2" 294 │ OK │ Invalid expression "1..2" string 1 295 │ OK │ Invalid expression "1..2" string 2 296 │ OK │ Invalid expression "1..2" string 3 297 │ OK │ Invalid expression "1.K2" 298 │ OK │ Invalid expression "1.K2" string 1 299 │ OK │ Invalid expression "1.K2" string 2 300 │ OK │ Invalid expression "1.K2" string 3 301 │ OK │ Invalid expression "1.K2" string 4 302 │ OK │ Invalid expression "1.2Kand 1" 303 │ OK │ Invalid expression "1 andnot 1" 304 │ OK │ Invalid expression "1 andnot 1" string 305 │ OK │ Invalid expression "1 andor 1" 306 │ OK │ Invalid expression "1/(5-10/2)" 307 │ OK │ Invalid expression "1/(5-10/2)" string 308 │ OK │ Invalid expression "1/(5-10/2)" string 2 309 │ OK │ Invalid expression "1/(5-10/2)" string 3 310 │ OK │ Invalid expression "1/(5-10/2)" all strings 311 │ OK │ Invalid expression "((((((((((((((((((((((((((((((((1))))))))))))))))))))))))))))))))" 312 │ OK │ Invalid expression "((((((((((((((((((((((((((((((((1))))))))))))))))))))))))))))))))" string 313 │ OK │ Invalid expression "-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-1))))))))))))))))))))))))))))))))" 314 │ OK │ Invalid expression "-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-1))))))))))))))))))))))))))))))))" string 315 │ OK │ Invalid expression "-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-(-1))))))))))))))))))))))))))))))))" string 2 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── evaluate_unknown ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Valid expression "1 and not(0 or 1)" 1 │ OK │ Unknown comparison 2 │ OK │ Unknown comparison 3 │ OK │ Expression with unknown element "1 or ZBX_UNKNOWN0" 4 │ OK │ Expression with unknown element "1 or not(ZBX_UNKNOWN0)" 5 │ OK │ Expression with unknown result "1 and not(ZBX_UNKNOWN0)" 6 │ OK │ Expression with unknown result "1 > ZBX_UNKNOWN0" 7 │ OK │ Expression with unknown result "1 - ZBX_UNKNOWN0" ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── queue ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ test queue range "1, 0" 1 │ OK │ test queue range "1, 2, 0" 2 │ OK │ test queue range "1, 2, 3, 0" 3 │ OK │ test queue range "1, 2, 3, 4, 0" 4 │ OK │ test queue range "1, 2, 3, 4, 5, 0" 5 │ OK │ test queue range "1, 2, 3, 4, 5, 6, 0" 6 │ OK │ test queue range "1, 2, 3, 4, 5, 6, 7, 0" 7 │ OK │ test queue range "1, 2, 3, 4, 5, 6, 7, 8, 0" 8 │ OK │ test queue range "1, 2, 3, 4, 5, 6, 7, 8, 9, 0" 9 │ OK │ test compacting when tail is before head (no data wraparound) "1, 2, 3, 4, 5, 6, 7" 10 │ OK │ test compacting when head is before tail (data wraparound) with empty space in the middle "1, 2, 3, 4, 5, 6, 7" 11 │ OK │ test removal when tail is before head (no data wraparound) "1, 2, 3, 4, 5, 6, 7" 12 │ OK │ test removal when tail is after head (data wraparound) "1, 2, 3, 4, 5, 6, 7" ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── calculate_item_nextcheck ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Calculate active item nextcheck from simple delay 1 │ OK │ Calculate active item nextcheck from scheduled interval 2 │ OK │ Scheduled every 15m check when changing from summer time to winter 3 │ OK │ Scheduled every 1h check when changing from summer time to winter 4 │ OK │ Scheduled 9:00 check when changing from summer time to winter 5 │ OK │ Scheduled 15m check when changing from summer time to winter 6 │ OK │ Scheduled 3:30 check when changing from summer time to winter 7 │ OK │ Scheduled every 2h check when changing from summer time to winter 8 │ OK │ Scheduled every 15m check when changing from winter time to summer 9 │ OK │ Scheduled every 1h check when changing from winter time to summer 10 │ OK │ Scheduled 9:00 check when changing from winter time to summer 11 │ OK │ Scheduled 15m check when changing from winter time to summer 12 │ OK │ Scheduled 3:30 check when changing from winter time to summer 13 │ OK │ Scheduled every 2h check when changing from winter time to summer 14 │ OK │ Scheduled 3:00 check when changing from winter time to summer 15 │ OK │ Time zone 1:30 west of UTC 16 │ OK │ Time zone 0:45 west of UTC 17 │ OK │ Scheduling interval with month day and week day filters 18 │ OK │ Scheduling interval month day is outside of current month day range 19 │ OK │ Scheduling check every day at 2 a.m. when government decides drastically change the timezone 20 │ OK │ Scheduling check around DST change in the Southern Hemisphere 21 │ OK │ Scheduling check around DST change back in the Moscow 22 │ OK │ Scheduling check around DST change forward in the Moscow ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── calculate_item_nextcheck_unreachable ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Calculate nextcheck for unreachable host 1 │ OK │ Calculate nextcheck for unreachable host (2) 2 │ OK │ Calculate nextcheck for unreachable host (3) 3 │ OK │ Calculate nextcheck for unreachable host (4) 4 │ OK │ Calculate nextcheck for unreachable host (5) 5 │ OK │ Calculate nextcheck for unreachable host (6) 6 │ OK │ Calculate nextcheck for unreachable host (7) 7 │ OK │ Calculate nextcheck for unreachable host (8) 8 │ OK │ Calculate nextcheck for unreachable host (9) ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── convert_to_utf8 ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ empty text nothing happens 1 │ OK │ bom is not added to plain data utf8 assumed 2 │ OK │ utf8 bom is removed 3 │ OK │ utf8 bom is removed2 4 │ OK │ utf8 bom is removed with encoding specified 5 │ OK │ utf8 bom is removed empty text 6 │ OK │ utf16 LE bom is removed 7 │ OK │ utf16 LE noBOM with encoding 8 │ OK │ utf16 LE bom is removed empty text 9 │ OK │ utf16 BE bom is removed 10 │ OK │ utf16 BE noBOM with enconding 11 │ OK │ utf16 BE bom is removed empty text 12 │ OK │ utf32 LE bom is removed incorrect guess conversion to utf16 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── is_double ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ fail -10w 1 │ OK │ succeed -1.0 2 │ OK │ succeed 1.0 3 │ OK │ succeed -1 4 │ OK │ succeed 1 5 │ OK │ succeed 1234567890.0987654321 6 │ OK │ succeed -1234567890.0987654321 7 │ OK │ fail 1234567890.0987654321K 8 │ OK │ fail -1234567890.0987654321K 9 │ OK │ fail . 10 │ OK │ fail -. 11 │ OK │ fail +. 12 │ OK │ fail --1 13 │ OK │ fail ++1 14 │ OK │ fail "- -1" 15 │ OK │ fail "+ +1" 16 │ OK │ fail .K 17 │ OK │ fail -.K 18 │ OK │ fail +.K 19 │ OK │ fail -1.0k 20 │ OK │ fail -1.0Kk 21 │ OK │ fail -1,0K 22 │ OK │ fail -1,0 23 │ OK │ succeed +1 24 │ OK │ succeed +1.0 25 │ OK │ succeed +.1 26 │ OK │ fail 1.K 27 │ OK │ fail .1K 28 │ OK │ fail -1.K 29 │ OK │ fail -.1K 30 │ OK │ succeed 1. 31 │ OK │ succeed -1. 32 │ OK │ succeed .1 33 │ OK │ succeed -.1 34 │ OK │ fail "1. " 35 │ OK │ fail "-1. " 36 │ OK │ fail " .1" 37 │ OK │ fail "- .1" 38 │ OK │ fail " -0.1" 39 │ OK │ fail "-0.1 " 40 │ OK │ fail "-0.1 K" 41 │ OK │ fail "1 K" 42 │ OK │ fail "1K " 43 │ OK │ fail "1 " 44 │ OK │ fail " 1" 45 │ OK │ fail ..1 46 │ OK │ fail .1. 47 │ OK │ fail 1.. 48 │ OK │ fail .1.2 49 │ OK │ fail 1..2 50 │ OK │ fail .. 51 │ OK │ succeed 1e+2 52 │ OK │ succeed 1E+2 53 │ OK │ succeed 1e-2 54 │ OK │ succeed 1E-2 55 │ OK │ succeed -1e+2 56 │ OK │ succeed -1E+2 57 │ OK │ succeed -1e-2 58 │ OK │ succeed -1E-2 59 │ OK │ succeed +1e+2 60 │ OK │ succeed +1E+2 61 │ OK │ succeed +1e-2 62 │ OK │ succeed +1E-2 63 │ OK │ succeed 0.1e+2 64 │ OK │ succeed 1.0e+2 65 │ OK │ succeed -0.1e+2 66 │ OK │ succeed -1.0e+2 67 │ OK │ succeed +0.1e+2 68 │ OK │ succeed +1.0e+2 69 │ OK │ succeed 0.1e-2 70 │ OK │ succeed 1.0e-2 71 │ OK │ succeed -0.1e-2 72 │ OK │ succeed -1.0e-2 73 │ OK │ succeed +0.1e-2 74 │ OK │ succeed +1.0e-2 75 │ OK │ succeed .1e+2 76 │ OK │ succeed 1.e+2 77 │ OK │ succeed -.1e+2 78 │ OK │ succeed -1.e+2 79 │ OK │ succeed +.1e+2 80 │ OK │ succeed +1.e+2 81 │ OK │ succeed .1e-2 82 │ OK │ succeed 1.e-2 83 │ OK │ succeed -.1e-2 84 │ OK │ succeed -1.e-2 85 │ OK │ succeed +.1e-2 86 │ OK │ succeed +1.e-2 87 │ OK │ succeed 1234567890.0123456789e-1234567890 88 │ OK │ succeed -1234567890.0123456789e-1234567890 89 │ OK │ succeed +1234567890.0123456789e-1234567890 90 │ OK │ succeed 1234567890.0123456789e+1234567890 91 │ OK │ succeed -1234567890.0123456789e+1234567890 92 │ OK │ succeed +1234567890.0123456789e+1234567890 93 │ OK │ fail 1.e-2K 94 │ OK │ fail "1.e-2 " 95 │ OK │ fail " 1.e-2 " 96 │ OK │ fail "1.e-2 K" 97 │ OK │ fail "1.e-2 ." 98 │ OK │ fail 1.e-2. 99 │ OK │ fail .e-2 100 │ OK │ fail e-2 101 │ OK │ fail "1.0e- 2" 102 │ OK │ fail "1.0e -2" 103 │ OK │ fail "1.0 e-2" 104 │ OK │ fail "1. 0e-2" 105 │ OK │ fail "1 .0e-2" 106 │ OK │ fail " 1.0e-2" 107 │ OK │ succeed 8E307 108 │ OK │ fail 8E310 109 │ OK │ num == DBL_MAX 110 │ OK │ num > DBL_MAX 111 │ OK │ num == -DBL_MAX 112 │ OK │ num < -DBL_MAX 113 │ OK │ num == DBL_MIN ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── is_double_suffix ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ succeed -1.0K 1 │ OK │ succeed -1.0M 2 │ OK │ succeed -1.0G 3 │ OK │ succeed -1.0T 4 │ OK │ succeed -1.0s 5 │ OK │ succeed -1.0m 6 │ OK │ succeed -1.0h 7 │ OK │ succeed -1.0d 8 │ OK │ succeed -1.0w 9 │ OK │ succeed 10K 10 │ OK │ succeed 10M 11 │ OK │ succeed 10G 12 │ OK │ succeed 10T 13 │ OK │ succeed 10s 14 │ OK │ succeed 10m 15 │ OK │ succeed 10h 16 │ OK │ succeed 10d 17 │ OK │ succeed 10w 18 │ OK │ succeed 1.0K 19 │ OK │ succeed 1.0M 20 │ OK │ succeed 1.0G 21 │ OK │ succeed 1.0T 22 │ OK │ succeed 1.0s 23 │ OK │ succeed 1.0m 24 │ OK │ succeed 1.0h 25 │ OK │ succeed 1.0d 26 │ OK │ succeed 1.0w 27 │ OK │ succeed -10K 28 │ OK │ succeed -10M 29 │ OK │ succeed -10G 30 │ OK │ succeed -10T 31 │ OK │ succeed -10s 32 │ OK │ succeed -10m 33 │ OK │ succeed -10h 34 │ OK │ succeed -10d 35 │ OK │ succeed -10w 36 │ OK │ succeed -1.0 37 │ OK │ succeed 1.0 38 │ OK │ succeed -1 39 │ OK │ succeed 1 40 │ OK │ succeed 1234567890.0987654321 41 │ OK │ succeed -1234567890.0987654321 42 │ OK │ succeed 1234567890.0987654321K 43 │ OK │ succeed -1234567890.0987654321K 44 │ OK │ fail . 45 │ OK │ fail -. 46 │ OK │ fail +. 47 │ OK │ fail .K 48 │ OK │ fail -.K 49 │ OK │ fail +.K 50 │ OK │ fail -1.0k 51 │ OK │ fail -1.0Kk 52 │ OK │ fail -1,0K 53 │ OK │ fail +1 54 │ OK │ fail +1.0 55 │ OK │ fail +.1 56 │ OK │ succeed 1.K 57 │ OK │ succeed .1K 58 │ OK │ succeed -1.K 59 │ OK │ succeed -.1K 60 │ OK │ succeed 1. 61 │ OK │ succeed -1. 62 │ OK │ succeed .1 63 │ OK │ succeed -.1 64 │ OK │ fail "1. " 65 │ OK │ fail "-1. " 66 │ OK │ fail " .1" 67 │ OK │ fail "- .1" 68 │ OK │ fail " -0.1" 69 │ OK │ fail "-0.1 " 70 │ OK │ fail "-0.1 K" 71 │ OK │ fail "1 K" 72 │ OK │ fail "1K " 73 │ OK │ fail "1 " 74 │ OK │ fail " 1" 75 │ OK │ fail ..1 76 │ OK │ fail .1. 77 │ OK │ fail 1.. 78 │ OK │ fail .1.2 79 │ OK │ fail 1..2 80 │ OK │ fail .. 81 │ OK │ succeed 1e+2 82 │ OK │ succeed 1E+2 83 │ OK │ fail --1 84 │ OK │ fail "- -1" ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── parse_key ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ valid key with no parameters 1 │ OK │ valid key with empty brackets 2 │ OK │ valid key with quoted empty string in brackets 3 │ OK │ valid key with space in brackets 4 │ OK │ valid key with leading space before quoted empty string in brackets 5 │ OK │ valid key with leading and trailing spaces around quoted empty string in brackets 6 │ OK │ valid key with 'a' in brackets 7 │ OK │ valid key with leading space before 'a' in brackets 8 │ OK │ valid key with leading and trailing spaces around 'a' in brackets 9 │ OK │ valid key with quoted 'a' in brackets 10 │ OK │ valid key with quoted 'a' followed by comma in brackets 11 │ OK │ valid key with unquoted 'a' followed by comma in brackets 12 │ OK │ valid key with multiple unquoted parameters in brackets 13 │ OK │ valid key with multiple quoted parameters in brackets 14 │ OK │ valid key with first unquoted parameter and second array parameter containing two unquoted parameters 15 │ OK │ valid key with first unquoted parameter and second array parameter containing unquoted and empty parameter 16 │ OK │ valid key with two unquoted parameters where second parameter contains opening square bracket 17 │ OK │ valid key with multiple quoted parameters and array 18 │ OK │ valid key with multiple quoted parameters and multiple arrays 19 │ OK │ valid key, single parameter with unquoted string containing double quote characters 20 │ OK │ valid key, multiple different type parameters where one is unquoted string containing double quote characters 21 │ OK │ valid key with many quoted/unquoted parameters with/without trailing/leading spaces also featuring escaping 22 │ OK │ valid key in the beginning, invalid character for unquoted parameter, multiple parameter key 23 │ OK │ valid key in the beginning, unmatched closing bracket, parameter followed by trailing space 24 │ OK │ valid key in the beginning, unmatched closing bracket, parameter followed by leading space 25 │ OK │ valid key in the beginning, part of parameters list not enclosed in brackets 26 │ OK │ valid key in the beginning, comma is not allowed in key or parameters should be enclosed in brackets 27 │ OK │ valid key in the beginning, multiple square bracket pairs are not allowed 28 │ OK │ valid key in the beginning, multiple square bracket pairs containing parameters are not allowed 29 │ OK │ valid key in the beginning, followed by character ] 30 │ OK │ valid key in the beginning, character [ is allowed in unquoted parameter string 31 │ OK │ valid key in the beginning, followed by comma, key with multiple different type parameters 32 │ OK │ invalid key, unmatched opening bracket (1) 33 │ OK │ invalid key, unmatched opening bracket (2) 34 │ OK │ invalid key, invalid character (double quote) after array-closing bracket 35 │ OK │ invalid key, braces are not allowed in key 36 │ OK │ invalid key, multi-level arrays are not allowed 37 │ OK │ invalid key, multi-level arrays are not allowed, array consists of multiple different type parameters 38 │ OK │ invalid key, multi-level arrays are not allowed, array consists of single parameter which is another array 39 │ OK │ invalid key, quoted parameter cannot contain unquoted part 40 │ OK │ invalid key, second parameter of the array cannot contain unquoted part 41 │ OK │ invalid key, array type parameter cannot contain quoted parameter with unquoted part 42 │ OK │ invalid key, array type parameter cannot contain quoted part ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── replace_key_params_dyn ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ valid key with no parameters 1 │ OK │ valid key with empty brackets 2 │ OK │ valid key with quoted empty string in brackets 3 │ OK │ valid key with space in brackets 4 │ OK │ valid key with leading space before quoted empty string in brackets 5 │ OK │ valid key with leading and trailing spaces around quoted empty string in brackets 6 │ OK │ valid key with 'a' in brackets 7 │ OK │ valid key with leading space before 'a' in brackets 8 │ OK │ valid key with leading and trailing spaces around 'a' in brackets 9 │ OK │ valid key with quoted 'a' in brackets 10 │ OK │ valid key with quoted 'a' followed by comma in brackets 11 │ OK │ valid key with unquoted 'a' followed by comma in brackets 12 │ OK │ valid key with multiple unquoted parameters in brackets 13 │ OK │ valid key with multiple quoted parameters in brackets 14 │ OK │ valid key with first unquoted parameter and second array parameter containing two unquoted parameters 15 │ OK │ valid key with first unquoted parameter and second array parameter containing unquoted and empty parameter 16 │ OK │ valid key with two unquoted parameters where second parameter contains opening square bracket 17 │ OK │ valid key with multiple quoted parameters and array 18 │ OK │ valid key with multiple quoted parameters and multiple array parameters 19 │ OK │ valid key, single parameter with unquoted string containing double quote characters 20 │ OK │ valid key, multiple different type parameters where one is unquoted string containing double quote characters 21 │ OK │ valid key with many quoted/unquoted parameters with/without trailing/leading spaces also featuring escaping 22 │ OK │ invalid key, unmatched opening bracket (1) 23 │ OK │ invalid key, unmatched opening bracket (2) 24 │ OK │ invalid key, unmatched opening bracket (3) 25 │ OK │ invalid key, invalid character for unquoted parameter, multiple parameter key 26 │ OK │ invalid key, invalid character for unquoted parameter, multiple parameter key 27 │ OK │ invalid key, unmatched closing bracket, parameter followed by trailing space 28 │ OK │ invalid key, part of parameters list not enclosed in brackets 29 │ OK │ invalid key, braces are not allowed in key 30 │ OK │ invalid key, comma is not allowed in key or parameters should be enclosed in brackets 31 │ OK │ invalid key, multiple square bracket pairs are not allowed 32 │ OK │ invalid key, multiple square bracket pairs containing parameters are not allowed 33 │ OK │ invalid key, multi-level arrays are not allowed 34 │ OK │ invalid key, multi-level arrays are not allowed, array consists of multiple different type parameters 35 │ OK │ invalid key, multi-level arrays are not allowed, array consists of single parameter which is another array 36 │ OK │ invalid key, character ] is not allowed in unquoted parameter string 37 │ OK │ invalid key, character [ is allowed in unquoted parameter string but character ] is not 38 │ OK │ invalid key, character ] is not allowed in unquoted parameter string, key with multiple different type parameters 39 │ OK │ invalid key, quoted parameter cannot contain unquoted part 40 │ OK │ invalid key, second parameter of the array cannot contain unquoted part 41 │ OK │ invalid key, array type parameter cannot contain quoted parameter with unquoted part 42 │ OK │ invalid key, array type parameter cannot contain quoted part ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_dyn_escape_string ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ double quotes 1 │ OK │ backslash ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_function_find ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ successfully found simple function #1 1 │ OK │ successfully found simple function #2 2 │ OK │ function name not found #1 3 │ OK │ function name not found #2 4 │ OK │ function name not found #3 5 │ OK │ function name not found #4 6 │ OK │ function name not found #5 7 │ OK │ function name not found #6 8 │ OK │ function parameters not found #1 9 │ OK │ function parameters not found #2 10 │ OK │ function parameters not found #3 11 │ OK │ function parameters not found #4 12 │ OK │ function parameters not found #5 13 │ OK │ successfully found function that started after a space #1 14 │ OK │ successfully found function that started after a space #2 15 │ OK │ successfully found function that started after a space #3 16 │ OK │ successfully found the function #1 17 │ OK │ successfully found the function #2 18 │ OK │ successfully found the function #3 19 │ OK │ successfully found the function #4 20 │ OK │ function with a complex set of parameters was successfully found #1 21 │ OK │ function with a complex set of parameters was successfully found #2 22 │ OK │ function with LLD function 23 │ OK │ function with LLD function in macro context 24 │ OK │ function with LLD function double escaped 25 │ OK │ Check that opening of LLD function macro is skipped if no macro 26 │ OK │ Check that emptynested LLD function macro is skipped if no macro 27 │ OK │ Only opening of LLD macro function must fail #1 28 │ OK │ Only opening of LLD macro function must fail #2 29 │ OK │ Only opening of LLD macro function must fail #3 30 │ OK │ Only opening of LLD macro function must fail #4 31 │ OK │ Unit suffix support in calculated item formulas #1 32 │ OK │ Unit suffix support in calculated item formulas #2 33 │ OK │ Valid expression without function 34 │ OK │ successfully found simple function #1, string comparison 35 │ OK │ successfully found simple function #2, string comparison 36 │ OK │ function name not found #1, string comparison 37 │ OK │ function name not found #2, string comparison 38 │ OK │ function name not found #3, string comparison 39 │ OK │ function name not found #4, string comparison 40 │ OK │ function name not found #5, string comparison 41 │ OK │ function name not found #6, string comparison 42 │ OK │ function parameters not found #1, string comparison 43 │ OK │ function parameters not found #2, string comparison 44 │ OK │ function parameters not found #3, string comparison 45 │ OK │ function parameters not found #4, string comparison 46 │ OK │ function parameters not found #5, string comparison 47 │ OK │ successfully found function that started after a space #1, string comparison 48 │ OK │ successfully found function that started after a space #2, string comparison 49 │ OK │ successfully found function that started after a space #3, string comparison 50 │ OK │ successfully found the function #1, string comparison 51 │ OK │ successfully found the function #2, string comparison 52 │ OK │ successfully found the function #3, string comparison 53 │ OK │ successfully found the function #4, string comparison 54 │ OK │ function with a complex set of parameters was successfully found #1, string comparison 55 │ OK │ function with a complex set of parameters was successfully found #2, string comparison 56 │ OK │ function with LLD function, string comparison 57 │ OK │ function with LLD function in macro context, string comparison 58 │ OK │ function with LLD function double escaped, string comparison 59 │ OK │ Check that opening of LLD function macro is skipped if no macro, string comparison 60 │ OK │ Broken expressoin ending with inside quotes ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_function_get_param_dyn ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ valid 1 parameter 1 │ OK │ valid 2 parameter 2 │ OK │ valid 2 empty parameter 3 │ OK │ valid last empty parameter 4 │ OK │ non-existent 4 parameter 5 │ OK │ valid 1 parameter with [] 6 │ OK │ valid 2 parameter with [] 7 │ OK │ invalid params with empty 1 value 8 │ OK │ invalid params with empty 2 value 9 │ OK │ valid param with quoted 'a' in brackets 10 │ OK │ valid param with quoted '[a]' in brackets 11 │ OK │ valid param with quoted 'a' followed by comma 12 │ OK │ valid param with quoted 'a' prefixed by comma 13 │ OK │ valid param with unquoted 'a' followed by comma 14 │ OK │ valid param with multiple quoted parameters 15 │ OK │ valid param with first unquoted parameter and second array parameter containing two unquoted parameters 16 │ OK │ valid param with first unquoted parameter and second array parameter containing unquoted and empty parameter 17 │ OK │ valid param with two unquoted parameters where second parameter contains opening square bracket 18 │ OK │ valid param with multiple quoted parameters and array 19 │ OK │ valid param with multiple quoted parameters and multiple arrays 20 │ OK │ valid param, single parameter with unquoted string containing double quote characters 21 │ OK │ valid param, multiple different type parameters where one is unquoted string containing double quote characters ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_interval_preproc ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ min 1 │ OK │ max 2 │ OK │ more than allowed 3 │ OK │ min seconds 4 │ OK │ max seconds 5 │ OK │ more than allowed seconds 6 │ OK │ min minutes 7 │ OK │ max minutes 8 │ OK │ more than allowed minutes 9 │ OK │ min hours 10 │ OK │ max hours 11 │ OK │ more than allowed hours 12 │ OK │ min/max days 13 │ OK │ more than allowed days 14 │ OK │ weeks not allowed 15 │ OK │ zero alone are not allowed 16 │ OK │ zero seconds alone are not allowed 17 │ OK │ custom intervals don't matter so we cannot determine if 0 is OK 18 │ OK │ custom intervals don't matter so we cannot determine if 0 seconds is OK 19 │ OK │ custom intervals don't matter even if are invalid 20 │ OK │ don't allow invalid custom intervals if matter 21 │ OK │ don't allow 0 update interval even if custom is used and still 0 22 │ OK │ don't allow 0 simple update interval if one of custom update intervals has 0 update interval 23 │ OK │ don't allow 0 update interval if one of custom update intervals has 0 update interval and scheduling 24 │ OK │ allow 0 update interval even if custom has non 0 25 │ OK │ allow 0 custom update interval even if custom is 0 26 │ OK │ allow 0 simple update interval if only scheduling is present 27 │ OK │ custom intervals are missing, there is only separator ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_str_extract ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Success: abcd, 4 1 │ OK │ Success: abcd, 1 2 │ OK │ Success: abcd, 0 3 │ OK │ Success: "abcd", 6 4 │ OK │ Success: "ab\\/cd", 9 5 │ OK │ Success: "\\", 4 6 │ OK │ Success: "a\"bc\"d", 10 7 │ OK │ Success: "", 2 8 │ OK │ Failure: "", 1 9 │ OK │ Failure: "\a", 4 10 │ OK │ Failure: "abcd", 7 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_trim_float ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ 123 1 │ OK │ 123 2 │ OK │ 123 3 │ OK │ 123 4 │ OK │ 123 5 │ OK │ 123 6 │ OK │ 123 7 │ OK │ "123" 8 │ OK │ "123" 9 │ OK │ "123" 10 │ OK │ "123" 11 │ OK │ "123" 12 │ OK │ "123" 13 │ OK │ "123" 14 │ OK │ 15 │ OK │ " 16 │ OK │ "" 17 │ OK │ " " 18 │ OK │ " 19 │ OK │ "" 20 │ OK │ " " 21 │ OK │ " 22 │ OK │ "" 23 │ OK │ " " 24 │ OK │ " 25 │ OK │ "" 26 │ OK │ " " 27 │ OK │ "123 " 28 │ OK │ " 123" 29 │ OK │ " 123 " 30 │ OK │ "123 " 31 │ OK │ " 123" 32 │ OK │ " 123 " 33 │ OK │ "123 " 34 │ OK │ " 123" 35 │ OK │ " 123 " 36 │ OK │ "123 " 37 │ OK │ " 123" 38 │ OK │ " 123 " 39 │ OK │ + 40 │ OK │ ++ 41 │ OK │ +123 42 │ OK │ ++123 43 │ OK │ +"123" 44 │ OK │ "+123" 45 │ OK │ "+" 46 │ OK │ "+ " 47 │ OK │ " +" 48 │ OK │ " + " ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_trim_integer ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ 123 1 │ OK │ 123 2 │ OK │ 123 3 │ OK │ 123 4 │ OK │ 123 5 │ OK │ 123 6 │ OK │ 123 7 │ OK │ "123" 8 │ OK │ "123" 9 │ OK │ "123" 10 │ OK │ "123" 11 │ OK │ "123" 12 │ OK │ "123" 13 │ OK │ "123" 14 │ OK │ 15 │ OK │ " 16 │ OK │ "" 17 │ OK │ " " 18 │ OK │ " 19 │ OK │ "" 20 │ OK │ " " 21 │ OK │ " 22 │ OK │ "" 23 │ OK │ " " 24 │ OK │ " 25 │ OK │ "" 26 │ OK │ " " 27 │ OK │ "123 " 28 │ OK │ " 123" 29 │ OK │ " 123 " 30 │ OK │ "123 " 31 │ OK │ " 123" 32 │ OK │ " 123 " 33 │ OK │ "123 " 34 │ OK │ " 123" 35 │ OK │ " 123 " 36 │ OK │ "123 " 37 │ OK │ " 123" 38 │ OK │ " 123 " 39 │ OK │ + 40 │ OK │ ++ 41 │ OK │ +123 42 │ OK │ ++123 43 │ OK │ +"123" 44 │ OK │ "+123" 45 │ OK │ "+" 46 │ OK │ "+ " 47 │ OK │ " +" 48 │ OK │ " + " ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_truncate_itemkey ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ #0 condition 1.1 1 │ OK │ #1 condition 1.2 2 │ OK │ #2 condition 1.3 3 │ OK │ #3 condition 1.4 4 │ OK │ #4 condition 1.5 5 │ OK │ #5 condition 1.6 6 │ OK │ #6 condition 2.1 7 │ OK │ #7 condition 2.2 8 │ OK │ #8 condition 3.1 9 │ OK │ #9 condition 3.2 10 │ OK │ #10 condition 3.3 11 │ OK │ #11 condition 3.4 12 │ OK │ #12 condition 3.5 13 │ OK │ #13 condition 3.6 14 │ OK │ #14 condition 4.1 15 │ OK │ #15 condition 4.2 16 │ OK │ #16 condition 4.3 17 │ OK │ #17 condition 4.4 18 │ OK │ #18 condition 4.5 19 │ OK │ #0 ru condition 1.1 20 │ OK │ #1 ru condition 1.2 21 │ OK │ #2 ru condition 1.3 22 │ OK │ #3 ru condition 1.4 23 │ OK │ #4 ru condition 1.5 24 │ OK │ #5 ru condition 1.6 25 │ OK │ #6 ru condition 2.1 26 │ OK │ #7 ru condition 2.2 27 │ OK │ #8 ru condition 3.1 28 │ OK │ #9 ru condition 3.2 29 │ OK │ #10 ru condition 3.3 30 │ OK │ #11 ru condition 3.4 31 │ OK │ #12 ru condition 3.5 32 │ OK │ #13 ru condition 3.6 33 │ OK │ #14 ru condition 4.1 34 │ OK │ #15 ru condition 4.2 35 │ OK │ #16 ru condition 4.3 36 │ OK │ #17 ru condition 4.4 37 │ OK │ #18 ru condition 4.5 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_truncate_value ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ #0 condition 1.1 1 │ OK │ #1 condition 1.2 2 │ OK │ #2 condition 4.1 3 │ OK │ #3 condition 4.2 4 │ OK │ #4 condition 4.3 5 │ OK │ #5 condition 4.4 6 │ OK │ #6 condition 4.5 7 │ OK │ #0 ru condition 1.1 8 │ OK │ #1 ru condition 1.2 9 │ OK │ #2 ru condition 4.1 10 │ OK │ #3 ru condition 4.2 11 │ OK │ #4 ru condition 4.3 12 │ OK │ #5 ru condition 4.4 13 │ OK │ #6 ru condition 4.5 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_validate_interval ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ min 1 │ OK │ max 2 │ OK │ more than allowed 3 │ OK │ min seconds 4 │ OK │ max seconds 5 │ OK │ more than allowed seconds 6 │ OK │ min minutes 7 │ OK │ max minutes 8 │ OK │ more than allowed minutes 9 │ OK │ min hours 10 │ OK │ max hours 11 │ OK │ more than allowed hours 12 │ OK │ min/max days 13 │ OK │ more than allowed days 14 │ OK │ weeks not allowed 15 │ OK │ zero alone are not allowed 16 │ OK │ zero seconds alone are not allowed 17 │ OK │ simple interval with improper delimiter not allowed 18 │ OK │ invalid update interval 19 │ OK │ simple interval with only delimiter is not allowed 20 │ OK │ simple interval with double delimiter is not allowed 21 │ OK │ macro is allowed as simple interval 22 │ OK │ suffixes are not allowed with macro 23 │ OK │ macro with unexpected delimiter is not allowed 24 │ OK │ macro with unexpected delimiter is not allowed 25 │ OK │ macro as units is not allowed 26 │ OK │ only user macro is allowed 27 │ OK │ several macros not allowed 28 │ OK │ simple interval with only delimiter is not allowed 29 │ OK │ simple interval macro with double delimiter is not allowed 30 │ OK │ one flexible interval is allowed 31 │ OK │ more than one flexible intervals are allowed 32 │ OK │ invalid simple interval 33 │ OK │ invalid flexible interval 34 │ OK │ invalid flexible 35 │ OK │ flexible interval double semicolon 36 │ OK │ flexible interval double delimiter 37 │ OK │ flexible interval wrong delimiter 38 │ OK │ ends with unexpected semicolon 39 │ OK │ flexible update interval is missing 40 │ OK │ flexible period is missing 41 │ OK │ flexible period is missing but there is delimiter 42 │ OK │ macro in simple interval 43 │ OK │ macro in flexible interval 44 │ OK │ macro in flexible 45 │ OK │ macro flexible update interval only 46 │ OK │ macro flexible only 47 │ OK │ more than one flexible intervals are allowed 48 │ OK │ invalid simple interval even if all other is macro 49 │ OK │ invalid flexible interval even if other are macros 50 │ OK │ invalid flexible with all other macro 51 │ OK │ suffixes are not allowed in flexible update interval after macro 52 │ OK │ macro must be whole value in flexible, not just part 53 │ OK │ macro must be whole value in flexible, not just part in the end 54 │ OK │ invalid simple interval 55 │ OK │ invalid flexible interval 56 │ OK │ invalid flexible 57 │ OK │ flexible interval double delimiter 58 │ OK │ flexible interval wrong delimiter 59 │ OK │ flexible interval double semicolon 60 │ OK │ invalid in update interval 61 │ OK │ invalid in flexible update interval 62 │ OK │ invalid in flexible interval 63 │ OK │ context macro is correctly handled 64 │ OK │ context macro + real values 65 │ OK │ context macro + last macro is broken 66 │ OK │ context macro + invalid flexible 67 │ OK │ simple interval can be 0 in case flexible is non zero 68 │ OK │ simple interval can be 0 in case flexible intervals are non zero 69 │ OK │ flexible interval can be 0 in case simple interval is not 0 70 │ OK │ simple interval can be 0 in case flexible intervals are non zero 71 │ OK │ simple interval cannot be 0 in case flexible update interval is zero 72 │ OK │ simple interval cannot be 0 in case one of flexible intervals is zero 73 │ OK │ flexible interval can be 0 if simple interval is macro 74 │ OK │ simple interval can be 0 if flexible interval is macro 75 │ OK │ simple interval can be 0 if flexible update interval is non zero or macro 76 │ OK │ simple interval cannot be 0 if one of flexible intervals is macro while other is 0 77 │ OK │ within limits 78 │ OK │ simple interval is too high 79 │ OK │ flexible interval is too high 80 │ OK │ flexible interval overflow 81 │ OK │ simple interval too high but flexible is macro 82 │ OK │ flexible interval is too high but simple is macro 83 │ OK │ update interval + scheduling check 84 │ OK │ 0 update interval + scheduling check 85 │ OK │ scheduling check with slash 86 │ OK │ scheduling check with flexible check 87 │ OK │ update interval is invalid + scheduling check 88 │ OK │ invalid scheduling check 89 │ OK │ invalid scheduling check 90 │ OK │ scheduling double semicolon 91 │ OK │ scheduling ends with unexpected semicolon 92 │ OK │ update interval is missing 93 │ OK │ delimiter between scheduling macros 94 │ OK │ scheduling check as macro 95 │ OK │ scheduling check macro with macro update interval 96 │ OK │ simple update interval as macro 97 │ OK │ simple update interval as macro and one of scheduling 98 │ OK │ macro in update interval does not skip validation of scheduling 99 │ OK │ macro in one of scheduling does not skip validation of scheduling 100 │ OK │ macro in one of flexible does not skip validation of scheduling 101 │ OK │ macro in one of scheduling does not skip validation of flexible period 102 │ OK │ macro in one of scheduling does not skip validation of flexible interval 103 │ OK │ delimiter between scheduling macros must be present 104 │ OK │ delimiter between scheduling macros must be present 105 │ OK │ scheduling higher than upper limit 106 │ OK │ scheduling in limit 107 │ OK │ scheduling context macro 108 │ OK │ scheduling + flexible context macro 109 │ OK │ empty delay ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_variant_compare ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ none == none 1 │ OK │ none < value 2 │ OK │ value > none 3 │ OK │ string < string 4 │ OK │ string > string 5 │ OK │ string == string 6 │ OK │ string < floating 7 │ OK │ floating < string 8 │ OK │ string > floating 9 │ OK │ floating > string 10 │ OK │ string == floating 11 │ OK │ floating == string 12 │ OK │ floating < uint64 13 │ OK │ uint64 < floating 14 │ OK │ floating > uint64 15 │ OK │ uint64 > floating 16 │ OK │ floating == uint64 17 │ OK │ uint64 == floating 18 │ OK │ uint64 < uint64 19 │ OK │ uint64 > uint64 20 │ OK │ uint64 == uint64 21 │ OK │ floating == floating 22 │ OK │ floating == floating 23 │ OK │ floating > floating 24 │ OK │ floating < floating 25 │ OK │ binary == binary 26 │ OK │ binary == binary 27 │ OK │ binary > binary 28 │ OK │ binary > binary 29 │ OK │ binary < binary 30 │ OK │ binary > none 31 │ OK │ none < binary 32 │ OK │ binary > string 33 │ OK │ string < binary 34 │ OK │ binary > floating 35 │ OK │ floating < binary 36 │ OK │ binary > uint64 37 │ OK │ uint64 < binary 38 │ OK │ none < uint64 39 │ OK │ uint64 > none ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_token_find ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ successfully found low-level discovery function macros token 1 │ OK │ invalid low-level discovery function macros token 2 │ OK │ successfully found function macros token 3 │ OK │ invalid function macros token 4 │ OK │ successfully found user macros token 5 │ OK │ invalid user macros token 6 │ OK │ LLD macro with function 7 │ OK │ LLD macro with function, with text before 8 │ OK │ LLD macro with function, with text after 9 │ OK │ LLD macro with function with text around 10 │ OK │ Nested macro with spaces after after param 11 │ OK │ LLD macro with spaces after after param 12 │ OK │ LLD macro 13 │ OK │ LLD macro used as simple macro 14 │ OK │ Macro not started 15 │ OK │ Empty macro 16 │ OK │ Empty macro full 17 │ OK │ Invalid macro char 18 │ OK │ Invalid function delimiter 19 │ OK │ Ordinary LLD function macro 20 │ OK │ Ordinary LLD function macro 2 21 │ OK │ User macro with LLD function macro context 22 │ OK │ LLD function macro missing closing bracket 23 │ OK │ LLD function macro missing opening bracket 24 │ OK │ Success: {ABC.EFG} 25 │ OK │ Failure: {} 26 │ OK │ Failure: {abc} 27 │ OK │ Failure: {ABC } 28 │ OK │ Failure: {ABC.'xyz'} 29 │ OK │ Failure: {ABC."xyz} 30 │ OK │ Failure: {ABC.""} 31 │ OK │ Failure: {ABC."xyz" } 32 │ OK │ Failure: {ABC. "xyz"} 33 │ OK │ Failure: {ABC."xyz".EFG} 34 │ OK │ Failure: {ABC."x\yz"} 35 │ OK │ Failure: {ABC.x-z} 36 │ OK │ Failure: {ABC.} 37 │ OK │ Failure: {ABC..XYZ} 38 │ OK │ Success: {ABC.xyz} 39 │ OK │ Success: {ABC.DEF.xyz} 40 │ OK │ Success: {ABC."xyz"} 41 │ OK │ Success: {ABC."x-z"} 42 │ OK │ Success: {ABC."x\\/z"} 43 │ OK │ Success: {M123} 44 │ OK │ Success: {ABC."x\"\"z"} 45 │ OK │ Success: {{ABC.xyz}.regsub((.*),\1)} 46 │ OK │ Failure: {{#ABC.xyz}.regsub((.*),\1)} 47 │ OK │ Failure: {$ABC.xyz} 48 │ OK │ Failure: {.ABC} 49 │ OK │ Success: {M_1.M_2.M_3} 50 │ OK │ Success: {EVENT.TAGS.TAG123} 51 │ OK │ Success: {EVENT.TAGS.1TAG} 52 │ OK │ Success: {EVENT.TAGS."1TAG"} ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_user_macro_parse ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ space after single-character macro name 1 │ OK │ space before single-character macro name 2 │ OK │ macro without closing brace 3 │ OK │ macro without name 4 │ OK │ lower case single-character macro name 5 │ OK │ capitalized macro name" 6 │ OK │ no closing brace, empty context 7 │ OK │ no closing brace, one opening quote in context 8 │ OK │ one opening quote in context 9 │ OK │ one opening quote in before 1-digit context 10 │ OK │ quoted context with extra character after 11 │ OK │ one opening quote in before 1-digit context with space 12 │ OK │ valid single-character macro 13 │ OK │ valid multi-character macro 14 │ OK │ extra character after } 15 │ OK │ 1-digit context 16 │ OK │ multi-digit context 17 │ OK │ 1-digit context and space 18 │ OK │ space before 1-digit context 19 │ OK │ space before and after 1-digit context 20 │ OK │ quoted 1-digit context with 2 spaces before 21 │ OK │ quoted 1-digit context with 2 spaces before and after 22 │ OK │ two spaces before quoted context with escaped quotes 23 │ OK │ two spaces around quoted context with escaped quotes 24 │ OK │ quoted context with macro look-alike string, spaces around quotes 25 │ OK │ empty context 26 │ OK │ ignore regex prefix for nonregex match 27 │ OK │ unterminated regex prefix 28 │ OK │ empty regex match 29 │ OK │ simple regex match ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_tcp_check_allowed_peers ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ IPv4 match 1 │ OK │ Second IPv4 from list matches 2 │ OK │ Peer IP is different 3 │ OK │ Peer IP is different 4 │ OK │ IPv6 match 5 │ OK │ IPv6 from list matches 6 │ OK │ Peer IPv6 is different 7 │ OK │ Peer IPv6 is different at start 8 │ OK │ Peer IP is not in list 9 │ OK │ IPv6 compatible peer is connected 10 │ OK │ IPv6 compatible expanded peer is connected 11 │ OK │ IPv6 mapped peer is connected 12 │ OK │ IPv6 mapped peer expanded is connected 13 │ OK │ IPv6 compatible peer mismatch IP 14 │ OK │ IPv6 compatible expanded mismatch 15 │ OK │ IPv6 mapped peer mismatch IP 16 │ OK │ IPv6 mapped peer expanded mismatch IP 17 │ OK │ IPv6 peer partially compatible 18 │ OK │ IPv6 peer does not match IPv4 19 │ OK │ IPv6 compatible expanded peer is connected, not in list 20 │ OK │ IPv6 compatible expanded peer is connected mismatch 21 │ OK │ IPv6 mapped expanded is connected mismatch 22 │ OK │ IPv6 local ip mismatch IPv4 local IP 23 │ OK │ IPv4 local IP expected, but IPv6 local IP expanded connected 24 │ OK │ IPv4 compatible peer is connected 25 │ OK │ IPv4 compatible expanded peer is connected 26 │ OK │ IPv4 mapped peer is connected 27 │ OK │ IPv4 mapped peer expanded is connected 28 │ OK │ IPv4 compatible peer mismatch IP 29 │ OK │ IPv4 compatible expanded mismatch 30 │ OK │ IPv4 mapped peer mismatch IP 31 │ OK │ IPv4 mapped peer expanded mismatch IP 32 │ OK │ IPv4 peer partially compatible 33 │ OK │ IPv4 peer does not match IPv6 34 │ OK │ IPv4 compatible expanded peer is connected, not in list 35 │ OK │ IPv4 compatible expanded peer is connected mismatch 36 │ OK │ IPv4 mapped expanded is connected mismatch 37 │ OK │ IPv4 local IP mismatch IPv6 local IP 38 │ OK │ IPv6 local expanded IP expected, but IPv4 local IP connected 39 │ OK │ Compare only first 3 octets 40 │ OK │ Compare all 4 octets sanity check 41 │ OK │ IPv4 does not match address that is not compatible or mapped 42 │ OK │ IPv4 does not match address that is not compatible or mapped 2 43 │ OK │ IPv4 match address that is compatible or mapped 44 │ OK │ Compare only first 96 bits 45 │ OK │ Compare 128 bits 46 │ OK │ Compare only the first 3 octets where the first one does not match 47 │ OK │ Compare only the first 96 bits where the first one does not match 48 │ OK │ IPv4 in list 49 │ OK │ IPv6 in list 50 │ OK │ Any IPv4 51 │ OK │ Any IPv6 52 │ OK │ Any IPv6 allows also any IPv4 53 │ OK │ IPv4 first CIDR value is not saved on next value in list 54 │ OK │ Long list of allowed peers and no match 55 │ OK │ Long list of allowed peers and no match IPv6 56 │ OK │ Long list of allowed peers but there is match 57 │ OK │ Long list of allowed peers but there is match IPv6 58 │ OK │ IPv6 unspecified address in list, connection from IPv6 59 │ OK │ IPv6 unspecified address in list, connection from IPv4 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_tcp_check_allowed_peers_ipv4 ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ SKIPPED │ IPv4 match 1 │ SKIPPED │ Second IPv4 from list matches 2 │ SKIPPED │ Peer IP is different 3 │ SKIPPED │ Peer IP is different 4 │ SKIPPED │ Compare only first 3 octets 5 │ SKIPPED │ Compare all 4 octets sanity check 6 │ SKIPPED │ Compare only the first 3 octets where the first one does not match 7 │ SKIPPED │ IPv4 in list 8 │ SKIPPED │ Any IPv4 9 │ SKIPPED │ IPv4 first CIDR value is not saved on next value in list 10 │ SKIPPED │ Long list of allowed peers and no match 11 │ SKIPPED │ Long list of allowed peers but there is match ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_tcp_recv_ext ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Zero bytes received 1 │ OK │ Correct number of bytes received 2 │ OK │ Fragmented header 3 │ OK │ Fragmented incorrect header in part 1 4 │ OK │ Fragmented incorrect header in part 2 5 │ OK │ Header in separate fragment 6 │ OK │ Header in separate fragment incorrect 7 │ OK │ Whole header fragmented 8 │ OK │ Only header with 0 data 9 │ OK │ Header is too small 10 │ OK │ Version not received 11 │ OK │ Incorrect version 0 in header 12 │ OK │ Incorrect version in header only compression 13 │ OK │ Unsupported and supported versions in header 14 │ OK │ Received header signature without version 15 │ OK │ Hheader + version received 16 │ OK │ Header + version + data size received 17 │ OK │ Header and data length fragmented 18 │ OK │ Data length indicator exceed max size 19 │ OK │ Don't accept if bigger length is supplied in header than sent 20 │ OK │ Don't accept if smaller length supplied than sent 21 │ OK │ Data length is too small 22 │ OK │ Fragmented key 23 │ OK │ Fragmented key by bytes 24 │ OK │ Whole message streamed by 1 byte 25 │ OK │ Stat buffer almost filled 26 │ OK │ Stat buffer filled 27 │ OK │ Second receive is required but still stat buffer 28 │ OK │ Stat buffer is not enough for data, switching to dynamic 29 │ OK │ Second receive, dynamic and fragmented 30 │ OK │ Second receive, received more than expected 31 │ OK │ Lots of binary data ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_tcp_recv_raw_ext ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Zero bytes received 1 │ OK │ Correct number of bytes received 2 │ OK │ Correct number of bytes received fragmented 3 │ OK │ Stat buffer filled 4 │ OK │ Stat buffer filled and switched to dynamic fragmented 5 │ OK │ Correct number of bytes received binary stat buffer 6 │ OK │ Correct number of bytes received binary dynamic buffer 7 │ OK │ Lots of binary data ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_tcp_recv_ext_zlib ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Compressed data 1 │ OK │ Corrupted compressed data 2 │ OK │ Compressed data with uncompressed size greater than expected 3 │ OK │ Compressed data with uncompressed size less than expected 4 │ OK │ Compressed data with large length fields ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── parse_cfg_file ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ valid configuration file 1 │ OK │ recursive self inclusion 2 │ OK │ recursive inclusion loop 3 │ OK │ maximum allowed inclusion levels 4 │ OK │ too many inclusion levels ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── dc_check_maintenance_period ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Period before DST change to summer (0) 1 │ OK │ Period during DST change to summer (1) 2 │ OK │ Long period during DST change to summer (2) 3 │ OK │ Period finishes during DST change to summer (3) 4 │ OK │ Period finishes 1m after DST change to summer (4) 5 │ OK │ Period starts during DST change to summer (5) 6 │ OK │ Period cannot be applied during DST change to summer (6) 7 │ OK │ Daily period during DST change to summer (7) 8 │ OK │ Daily period finishes during DST change to summer (8) 9 │ OK │ Daily period starts during DST change to summer (9) 10 │ OK │ Monthly period during DST change to summer (10) 11 │ OK │ Monthly period finishes during DST change to summer (11) 12 │ OK │ Monthly period starts during DST change to summer (12) 13 │ OK │ Maintenance activity limited during DST change to summer (13) 14 │ OK │ Maintenance activity limited during DST change to summer (14) 15 │ OK │ Period before DST change to winter (15) 16 │ OK │ Period during DST change to winter (16) 17 │ OK │ Long period during DST change to winter (17) 18 │ OK │ Period finishes during DST change to winter (18) 19 │ OK │ Period finishes 1m after DST change to winter (19) 20 │ OK │ Period starts after DST change to winter (20) 21 │ OK │ Daily period during DST change to winter (21) 22 │ OK │ Daily period finishes during DST change to winter (22) 23 │ OK │ Daily period starts after DST change to winter (23) 24 │ OK │ Monthly period during DST change to winter (24) 25 │ OK │ Monthly period finishes during DST change to winter (25) 26 │ OK │ Monthly period starts after DST change to winter (26) 27 │ OK │ Maintenance activity limited during DST change to winter (27) 28 │ OK │ Maintenance activity limited during DST change to winter (28) 29 │ OK │ One time period during DST change to summer (29) 30 │ OK │ One time period finishes during DST change to summer (30) 31 │ OK │ One time period starts during DST change to summer (31) 32 │ OK │ One time period during DST change to winter (32) 33 │ OK │ One time period finishes during DST change to winter (33) 34 │ OK │ One time period starts after DST change to winter (34) 35 │ OK │ Long daily period during DST change to winter (35) 36 │ OK │ Long daily period during DST change to summer (36) 37 │ OK │ Long daily period during exotic DST change to summer (37) 38 │ OK │ Long daily period during exotic DST change to winter (38) 39 │ OK │ Long weekly period during exotic DST change to summer (39) 40 │ OK │ Long weekly period during exotic DST change to winter (40) 41 │ OK │ Short period during DST change to summer (41) 42 │ OK │ Short period during DST change to winter (42) 43 │ OK │ Maintenance activity limited out of DST (43) ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── dc_expand_user_macros_in_func_params ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Expand '{$A}' with {$A}=1 1 │ OK │ Expand '{$A}' with {$A}=(1) 2 │ OK │ Expand '' 3 │ OK │ Expand ' ' 4 │ OK │ Expand '{$A}' 5 │ OK │ Expand ',' 6 │ OK │ Expand '{$A}' with {$A}="1" 7 │ OK │ Expand '"{$A}"' with {$A}=1 8 │ OK │ Expand '1 ,2 ,3 ' 9 │ OK │ Expand '1 , ,3 ' 10 │ OK │ Expand ',2 ,3 ' 11 │ OK │ Expand '{$A} ,{$B} ,{$C} with {$A}=1, {$B}="2", {$C}=(3)' 12 │ OK │ Expand '{$A}{$B}{$C} with {$A}=1, {$B}="2", {$C}=(3)' 13 │ OK │ Expand '{$A}' with {$A}=1,2,3 14 │ OK │ Expand '{$A},{$B}' with {$A}='', {$B}='' ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── dc_maintenance_match_tags ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ No maintenance and event tags (1) 1 │ OK │ No maintenance and event tags (2) 2 │ OK │ Maintenance tags with no event tags (1) 3 │ OK │ Maintenance tags with matching event tags (1) 4 │ OK │ Maintenance tags with matching event tags (2) 5 │ OK │ Maintenance tags with matching event tags (3) 6 │ OK │ Maintenance tags with matching event tags (4) 7 │ OK │ Maintenance tags with matching event tags (5) 8 │ OK │ Maintenance tags with matching event tags (6) 9 │ OK │ Maintenance tags with matching event tags (7) 10 │ OK │ Maintenance tags with matching event tags (8) 11 │ OK │ Maintenance tags with matching event tags (9) 12 │ OK │ Maintenance tags with matching event tags (10) 13 │ OK │ Maintenance tags with matching event tags (11) 14 │ OK │ Maintenance tags with matching event tags (12) 15 │ OK │ Maintenance tags with matching event tags (13) 16 │ OK │ Maintenance tags with matching event tags (14) 17 │ OK │ Maintenance tags with matching event tags (15) 18 │ OK │ Maintenance tags with matching event tags (16) 19 │ OK │ Maintenance tags with matching event tags (17) 20 │ OK │ Maintenance tags with matching event tags (18) 21 │ OK │ Maintenance tags with not matching event tags (1) 22 │ OK │ Maintenance tags with not matching event tags (2) 23 │ OK │ Maintenance tags with not matching event tags (3) 24 │ OK │ Maintenance tags with not matching event tags (4) 25 │ OK │ Maintenance tags with not matching event tags (5) 26 │ OK │ Maintenance tags with not matching event tags (6) 27 │ OK │ Maintenance tags with not matching event tags (7) 28 │ OK │ Maintenance tags with matching event tags (8) ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_vc_add_values ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Add numeric (float) type values 1 │ OK │ Add character type values 2 │ OK │ Add log type values 3 │ OK │ Add numeric (unsigned) type values 4 │ OK │ Add text type values 5 │ OK │ Try to add value without having cached it first 6 │ OK │ Add value at the end of the cached data 7 │ OK │ Add value at the beginning of the cached data 8 │ OK │ Add value at the beginning of the cached data matching the seconds value of first item 9 │ OK │ Add value in the middle of cached data 10 │ OK │ Add value at the end of cached data matching timestamp of the latest value 11 │ OK │ Add value at the end of fully cached data 12 │ OK │ Add value at the beginning of the fully cached data 13 │ OK │ Add value at the end of the cached data in low memory mode 14 │ OK │ Try adding value without enough space in cache 15 │ OK │ Add value with different value type 16 │ OK │ Add values after time causing old data to be dropped 17 │ OK │ Add values after item was not accessed for a day ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_vc_get_value ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Get last value from second interval 1 │ OK │ Get middle value from second interval 2 │ OK │ Get first value from second interval ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_vc_get_values ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Get numeric (float) type values 1 │ OK │ Get character type values 2 │ OK │ Get log type values 3 │ OK │ Get numeric (unsigned) type values 4 │ OK │ Get text type values 5 │ OK │ Get values in interval before data values leaving unread values in the middle 6 │ OK │ Get interval of already already data values 7 │ OK │ Get interval of already cached values ending with the last data value 8 │ OK │ Get interval of values larger than database history and caching last values 9 │ OK │ Get interval of already cached data values larger than database history 10 │ OK │ Get one value in the middle of uncached data 11 │ OK │ Get one value in the middle of cached data 12 │ OK │ Get two values in the middle of cached data 13 │ OK │ Get 4 values when only 3 values exists in database history and are not cached 14 │ OK │ Get 4 values when only 3 values exists in database history and are cached 15 │ OK │ Get one value from empty history interval 16 │ OK │ Get 100 values from 1 second interval with 3 history values 17 │ OK │ Get 2 values from already cached 1 second interval with 3 history values 18 │ OK │ Get 3 values from already cached 1 second interval with 3 history values 19 │ OK │ Get 4 values from already data 1 second interval with 3 history values 20 │ OK │ Get 1 value from 1 second interval with 3 history values past cached data 21 │ OK │ Get 4 values from partially cached 2 second interval with 6 history values 22 │ OK │ Get all history values by count when they were already cached by time based request 23 │ OK │ Get all data values from interval when they were already cached by count 24 │ OK │ Get interval of values from empty history 25 │ OK │ Get number of values from empty history 26 │ OK │ Get number of values in from interval of history 27 │ OK │ Get interval of values when item value type has been changed 28 │ OK │ Get number of values when item value type has been changed 29 │ OK │ Get number of uncached item values when cache working in low memory mode 30 │ OK │ Get interval of uncached item values when cache working in low memory mode 31 │ OK │ Get number of uncached item values from interval when cache working in low memory mode 32 │ OK │ Get number of data item values when cache working in low memory mode 33 │ OK │ Get interval of data item values when cache working in low memory mode 34 │ OK │ Get number of data item values from interval when cache working in low memory mode 35 │ OK │ Get values with not enough space in cache 36 │ OK │ Get values with not enough space in cache and a day+ passed since last request 37 │ OK │ Active range tracking during day 38 │ OK │ Active range change in next few days 39 │ OK │ Switch back to normal mode after working a day in low memory mode 40 │ OK │ Get interval of values when using nanoseconds in end time 41 │ OK │ Get number of values when using nanoseconds in end time 42 │ OK │ Get number of values during interval when using nanoseconds in end time 43 │ OK │ Get number of values during interval when using nanoseconds in end time and not enough data 44 │ OK │ Get 1 value during interval when using nanoseconds in end time 45 │ OK │ Get 1 value during interval when using nanoseconds in end time (2) 46 │ OK │ Get 10 values during interval when using nanoseconds in end time 47 │ OK │ Get number of uncached item values from interval when cache working in low memory mode 48 │ OK │ Get 1 item value when cache working in low memory mode 49 │ OK │ Value target time is with future timestamp 50 │ OK │ Value target time is with future timestamp and there are more values with future timestamp 51 │ OK │ Value target time is with future timestamp but count also requires value from past 52 │ OK │ Value target time is with future timestamp but count also requires present value 53 │ OK │ Value target time is with future timestamp but count also requires present value and no past values 54 │ OK │ Value target time is with future timestamp 55 │ OK │ Value target time is with future timestamp and there are more values with future timestamp for seconds 56 │ OK │ Value target time is with future timestamp but seconds also requires value from past 57 │ OK │ Value target time is with future timestamp but seconds also requires present value 58 │ OK │ Value target time is with future timestamp but seconds also requires present value and no past values ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── dc_expand_user_macros_in_calcitem ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Expand 'last("hostA:key[{$A}]",{$A}) + last("hostB:key[{$A}]",{$A})' with hostA:{$A}=#1, hostB:{$A}=#2 1 │ OK │ Expand 'last("hostA:key[{$A}]",{$A}) + last("hostB:key[{$A}]",{$A})' with hostA:{$A}='', hostB:{$A}='' 2 │ OK │ Expand 'last(host:key)' 3 │ OK │ Expand 'last("key[{$A}]",{$A})' on hostA with hostA:{$A}='#1', hostB:{$A}='#2' 4 │ OK │ Expand 'last("key[{$A}]",{$A})' on hostB with hostA:{$A}='#1', hostB:{$A}='#2' 5 │ OK │ Expand '{$A}last(host:key){$B}' 6 │ OK │ Expand '{$A}last(host:key){$B}' 7 │ OK │ Expand '{$X}+last("hostB:key[{$X}]",{$X})+{$Y}+last("key[{$X}]",{$X})+{$Z}' 8 │ OK │ Expand '{$A}{$B}last("hostA:key[{$A}]",{$A}${B}){$A}{$B}' ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── dc_expand_user_macros_in_expression ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Expand '{1} < {$A}' with {$A}=1 1 │ OK │ Expand '{1} < "{$A}"' with {$A}=1 2 │ OK │ Expand '{1} < {$A}' 3 │ OK │ Expand '{1} < {$A}' with {$A}=x 4 │ OK │ Expand '{1} < {$A}' with {$A}="x" 5 │ OK │ Expand '{1} < "{$A}"' with {$A}="x" 6 │ OK │ Expand '{1} < "{$A}"' 7 │ OK │ Expand '{1} = "x" and {2} < {$A}' with {$A}="x" 8 │ OK │ Expand '{1} < "{$A}{$B}"' with {$A}=1,'{$B}'="x" 9 │ OK │ Expand '{1} < "{$A}{$B}"' with {$A}=1,'{$B}'=2 10 │ OK │ Expand '{1} < "{$A}{$B}"' with {$A}="x",'{$B}'="y" 11 │ OK │ Expand '{1} < {$A}{$B}' with {$A}="x",'{$B}'="y" 12 │ OK │ Expand '{1} < {$A}{$B}' with {$A}=1,'{$B}'=0 13 │ OK │ Expand '{1} < "\"{$A}\"{$B}\""' with {$A}=\",'{$B}'=\ 14 │ OK │ Expand '{1} < " \" {$A} \" {$B} \" " and {$A}<>"\"{$B}" and " {$A} " = " {$A} "' with {$A}=",'{$B}'=\\ 15 │ OK │ Expand '{1} < {$A}' with {$A}="" 16 │ OK │ Expand '{1} < "{$A}"' with {$A}="" 17 │ OK │ Expand '{1} = {$A:"x:\"1\""} or {2} = {$A:"y"}' with {$A:"x:\"1\""}=ax, {$A}=a 18 │ OK │ Expand '{1} < {$A:"x:\"1\""}' 19 │ OK │ Expand '{2000} < {$A}' with {$A}=2e+3 20 │ OK │ Expand '{1} < "\\\"a\"" and {1} = {$A}' with {$A}="b" ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── dc_item_poller_type_update ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Poller type update - direct 1 │ OK │ Poller type update - by proxy ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── is_item_processed_by_server ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ invalid item key type (1) 1 │ OK │ invalid item key type (2) 2 │ OK │ invalid item key type (3) 3 │ OK │ invalid item key type (4) 4 │ OK │ invalid item key type (5) 5 │ OK │ invalid item key type (6) 6 │ OK │ invalid item key type (7) 7 │ OK │ invalid item key type (8) 8 │ OK │ invalid item key type (9) 9 │ OK │ invalid item key type (10) 10 │ OK │ invalid item key type (11) 11 │ OK │ valid item key type (12) 12 │ OK │ invalid item key syntax (13) 13 │ OK │ invalid item key syntax (14) 14 │ OK │ invalid item key syntax (15) 15 │ OK │ valid item key syntax (16) 16 │ OK │ invalid item key syntax (17) 17 │ OK │ valid item key syntax (18) 18 │ OK │ invalid item key syntax (19) 19 │ OK │ valid item key syntax (20) 20 │ OK │ invalid item key syntax (21) 21 │ OK │ valid item key syntax (22) 22 │ OK │ valid item key syntax (23) 23 │ OK │ invalid item key syntax (24) 24 │ OK │ invalid item key syntax (25) 25 │ OK │ invalid item key type (26) 26 │ OK │ invalid item key type (27) 27 │ OK │ invalid item key type (27) 28 │ OK │ invalid item key type (29) 29 │ OK │ valid item key type (30) 30 │ OK │ valid item key type (31) 31 │ OK │ invalid item key type (32) 32 │ OK │ invalid item key type (33) 33 │ OK │ invalid item key type (34) 34 │ OK │ invalid item key type (35) 35 │ OK │ invalid item key type (36) 36 │ OK │ invalid item key type (37) 37 │ OK │ invalid item key type (38) 38 │ OK │ invalid item key type (39) 39 │ OK │ invalid item key type (40) 40 │ OK │ invalid item key type (41) 41 │ OK │ invalid item key type (42) 42 │ OK │ invalid item key type (43) 43 │ OK │ valid item key type (44) 44 │ OK │ valid item key type (45) 45 │ OK │ invalid item key type (46) 46 │ OK │ invalid item key type (47) 47 │ OK │ invalid item key type (48) 48 │ OK │ invalid item key type (49) 49 │ OK │ non-existing item type (50) 50 │ OK │ non-existing item type (51) 51 │ OK │ valid item key syntax (52) 52 │ OK │ valid item key syntax (53) ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── DBadd_condition_alloc ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ successfully parsed #1 1 │ OK │ successfully parsed #4 2 │ OK │ successfully parsed #10 3 │ OK │ successfully parsed #951 4 │ OK │ successfully parsed #1000 5 │ OK │ successfully parsed #2000 6 │ OK │ successfully parsed #902501 7 │ OK │ successfully parsed #4x2 8 │ OK │ successfully parsed #5x2 9 │ OK │ successfully parsed #5x4x1 10 │ OK │ successfully parsed #5x4x2 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── DBselect_uint64 ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ successfully selected #1 1 │ OK │ successfully selected #2 2 │ OK │ successfully selected #3 3 │ OK │ failed selected #1 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_history_get_values ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Test count based request spanning over month+ 1 │ OK │ Test count based request over short period 2 │ OK │ Test time based request 3 │ OK │ Test time and count based request with data less than requested number 4 │ OK │ Test time and count based request with data matching the requested number 5 │ OK │ Test time and count based request with data less by one than requested number 6 │ OK │ Test time and count based request with data less by one than requested number and different ns ordering 7 │ OK │ Test time and count based request with data less by 3 than requested number 8 │ OK │ Test count based request on empty data 9 │ OK │ Test time based request on empty data 10 │ OK │ Test time and count based request on empty data ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_json_decodevalue ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Decode fail '' 1 │ OK │ Decode fail 'a b' 2 │ OK │ Decode fail ' 1' 3 │ OK │ Decode fail '+1' 4 │ OK │ Decode fail '--1' 5 │ OK │ Decode fail '.5' 6 │ OK │ Decode fail '01' 7 │ OK │ Decode fail '"a\X"' 8 │ OK │ Decode fail '"a\' 9 │ OK │ Decode fail '"a' 10 │ OK │ Decode fail '"' 11 │ OK │ Decode fail '[1, 2]' 12 │ OK │ Decode fail '{"a":1}' 13 │ OK │ Decode fail 'NULL' 14 │ OK │ Decode fail 'TRUE' 15 │ OK │ Decode fail 'FALSE' 16 │ OK │ Decode fail '"longer value"' with small output buffer 17 │ OK │ Decode fail '12345678901234567890' with small output buffer 18 │ OK │ Decode fail 'true' with small output buffer 19 │ OK │ Decode fail 'false' with small output buffer 20 │ OK │ Decode fail 'null' with small output buffer 21 │ OK │ Decode fail '"text"' with 0 output buffer 22 │ OK │ Decode fail 'true' with 0 output buffer 23 │ OK │ Decode fail 'false' with 0 output buffer 24 │ OK │ Decode fail 'null' with 0 output buffer 25 │ OK │ Decode fail '12345' with 0 output buffer 26 │ OK │ Decode success '1' 27 │ OK │ Decode success '1.5' 28 │ OK │ Decode success '-1' 29 │ OK │ Decode success '0' 30 │ OK │ Decode success '1e5' 31 │ OK │ Decode success '1e-2' 32 │ OK │ Decode success '-0.5E10' 33 │ OK │ Decode success '-0.5E+10' 34 │ OK │ Decode success '1e03' 35 │ OK │ Decode success 'true' 36 │ OK │ Decode fail 'true' with output buffer 1 byte less than needed 37 │ OK │ Decode success 'false' 38 │ OK │ Decode fail 'false' with output buffer 1 byte less than needed 39 │ OK │ Decode success 'null' 40 │ OK │ Decode success '"a"' 41 │ OK │ Decode success '"\\/"' 42 │ OK │ Decode success '"value \"1\""' 43 │ OK │ Decode success '"value \"1\""'with output buffer having the required size 44 │ OK │ Decode fail '"value \"1\""' with output buffer 1 byte less than needed 45 │ OK │ Decode success '"\u0420\u0435\u0433\u0438\u043e\u043d"' ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_json_decodevalue_dyn ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Decode fail '' 1 │ OK │ Decode fail 'a b' 2 │ OK │ Decode fail ' 1' 3 │ OK │ Decode fail '+1' 4 │ OK │ Decode fail '--1' 5 │ OK │ Decode fail '.5' 6 │ OK │ Decode fail '01' 7 │ OK │ Decode fail '"a\X"' 8 │ OK │ Decode fail '"a\' 9 │ OK │ Decode fail '"a' 10 │ OK │ Decode fail '"' 11 │ OK │ Decode fail '[1, 2]' 12 │ OK │ Decode fail '{"a":1}' 13 │ OK │ Decode fail 'NULL' 14 │ OK │ Decode fail 'TRUE' 15 │ OK │ Decode fail 'FALSE' 16 │ OK │ Decode success '"longer value"' with small output buffer 17 │ OK │ Decode success '12345678901234567890' with small output buffer 18 │ OK │ Decode fail 'true' with small output buffer 19 │ OK │ Decode fail 'false' with small output buffer 20 │ OK │ Decode fail 'null' with small output buffer 21 │ OK │ Decode fail '"text"' with 0 output buffer 22 │ OK │ Decode fail 'true' with 0 output buffer 23 │ OK │ Decode fail 'false' with 0 output buffer 24 │ OK │ Decode fail 'null' with 0 output buffer 25 │ OK │ Decode fail '12345' with 0 output buffer 26 │ OK │ Decode success '1' 27 │ OK │ Decode success '1.5' 28 │ OK │ Decode success '-1' 29 │ OK │ Decode success '0' 30 │ OK │ Decode success '1e5' 31 │ OK │ Decode success '1e-2' 32 │ OK │ Decode success '-0.5E10' 33 │ OK │ Decode success '-0.5E+10' 34 │ OK │ Decode success '1e03' 35 │ OK │ Decode success 'true' 36 │ OK │ Decode fail 'true' with output buffer 1 byte less than needed 37 │ OK │ Decode success 'false' 38 │ OK │ Decode fail 'false' with output buffer 1 byte less than needed 39 │ OK │ Decode success 'null' 40 │ OK │ Decode success '"a"' 41 │ OK │ Decode success '"\\/"' 42 │ OK │ Decode success '"value \"1\""' 43 │ OK │ Decode success '"value \"1\""'with output buffer having the required size 44 │ OK │ Decode fail '"value \"1\""' with output buffer 1 byte less than needed 45 │ OK │ Decode success '"\u0420\u0435\u0433\u0438\u043e\u043d"' ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_json_open_path ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Invalid path $.a[] in {"a":{"b": [{"x":10}, 2, 3] }} 1 │ OK │ Invalid path $a in {"a":1} 2 │ OK │ Invalid path "" in {"a":1} 3 │ OK │ Invalid location $.x.b in {"a":{"b": [{"x":10}, 2, 3] }} 4 │ OK │ Invalid location $[3] in [1, 2, 3] 5 │ OK │ Valid location $[0] in [1, 2, 3] 6 │ OK │ Valid location $[1] in [1, 2, 3] 7 │ OK │ Valid location $[2] in [1, 2, 3] 8 │ OK │ Valid location $[1][0] in [1,["a","b","c"],3] 9 │ OK │ Valid location $.x[1][2] in {"x":[1, ["a", "b", "c"], 3]} 10 │ OK │ Valid location $.a in {"a":{"b": [{"x":10}, 2, 3] }} 11 │ OK │ Valid location $.a in {"a" : {"b": [{"x":10}, 2, 3] }} 12 │ OK │ Valid location $.a.b in {"a":{"b": [{"x":10}, 2, 3] }} 13 │ OK │ Valid location $.a.b[0] in {"a":{"b": [{"x":10}, 2, 3] }} 14 │ OK │ Valid location $.a.b[1] in {"a":{"b": [{"x":10}, 2, 3] }} 15 │ OK │ Valid location $.a.b[2] in {"a":{"b": [{"x":10}, 2, 3] }} 16 │ OK │ ZBX-13782, empty string 17 │ OK │ ZBX-13782, 1 non-escaped ASCII character 18 │ OK │ ZBX-13782, 2 non-escaped ASCII characters 19 │ OK │ ZBX-13782, 3 non-escaped ASCII characters 20 │ OK │ ZBX-13782, many non-escaped ASCII characters 21 │ OK │ ZBX-13782, escaped quotation mark 22 │ OK │ ZBX-13782, escaped reverse solidus 23 │ OK │ ZBX-13782, escaped solidus 24 │ OK │ ZBX-13782, escaped backspace 25 │ OK │ ZBX-13782, escaped form feed 26 │ OK │ ZBX-13782, escaped line feed 27 │ OK │ ZBX-13782, escaped carriage return 28 │ OK │ ZBX-13782, escaped tab 29 │ OK │ ZBX-13782, escaped character in the beginning of string 30 │ OK │ ZBX-13782, escaped character in the middle of string 31 │ OK │ ZBX-13782, escaped character in the end of string 32 │ OK │ ZBX-13782, several escaped character in string 33 │ OK │ ZBX-13782, escaped Unicode character \u0000 34 │ OK │ ZBX-13782, A as escaped Unicode character 35 │ OK │ ZBX-13782, escaped Unicode character \u00e4 which translates into 2 byte UTF-8 36 │ OK │ ZBX-13782, escaped Unicode character \u00D1 which translates into 2 byte UTF-8 37 │ OK │ ZBX-13782, escaped Unicode character \u042F which translates into 2 byte UTF-8 38 │ OK │ ZBX-13782, escaped Unicode character \u0800 which translates into 3 byte UTF-8 39 │ OK │ ZBX-13782, escaped Unicode character \u10c0 which translates into 3 byte UTF-8 40 │ OK │ ZBX-13782, escaped Unicode character \u10c0 which translates into 3 byte UTF-8 41 │ OK │ ZBX-13782, escaped Unicode character \u20E0 which translates into 3 byte UTF-8 42 │ OK │ ZBX-13782, string with escaped Unicode character \u20E0 which translates into 3 byte UTF-8 43 │ OK │ ZBX-13782, escaped Unicode character \uFFFD (replacement character) 44 │ OK │ ZBX-13782, escaped Unicode character Curling Stone U+1F94C 45 │ OK │ ZBX-13782, several escaped Unicode characters Zanabazar Square Letter Za U+11A28 46 │ OK │ ZBX-13782, several escaped Unicode characters Linear B Syllable B008 A U+10000 47 │ OK │ Invalid path $.*.b in {"a":{"b": [{"x":10}, 2, 3] }} 48 │ OK │ Invalid path $.a.b[?(@.x == "10")] in {"a":{"b": [{"x":10}, 2, 3] }} 49 │ OK │ Invalid path $["a", "x"].b in {"a":{"b": [{"x":10}, 2, 3] }} 50 │ OK │ Invalid path $.a.b[1,2] in {"a":{"b": [{"x":10}, 2, 3] }} 51 │ OK │ Invalid path $.a.b.length() in {"a":{"b": [{"x":10}, 2, 3] }} 52 │ OK │ Invalid path $..b in {"a":{"b": [{"x":10}, 2, 3] }} ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_jsonpath_compile ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Compile fail "" 1 │ OK │ Compile fail $ 2 │ OK │ Compile fail "$." 3 │ OK │ Compile fail "$['a'" 4 │ OK │ Compile fail "$[a']" 5 │ OK │ Compile fail "$['']" 6 │ OK │ Compile fail "$.a[]" 7 │ OK │ Compile fail "$.a[1" 8 │ OK │ Compile fail "$['a'][]" 9 │ OK │ Compile fail "$['a'][1" 10 │ OK │ Compile fail "$.a." 11 │ OK │ Compile success "$.a" 12 │ OK │ Compile success "$['a']" 13 │ OK │ Compile success "$[ 'a' ]" 14 │ OK │ Compile success '$["a"]' 15 │ OK │ Compile success "$.a.b" 16 │ OK │ Compile success "$['a'].b" 17 │ OK │ Compile success "$['a']['b']" 18 │ OK │ Compile success $.a['b'] 19 │ OK │ Compile success $.a[0] 20 │ OK │ Compile success $[-1] 21 │ OK │ Compile success $.a[0].b[1] 22 │ OK │ Compile success $.a[1000] 23 │ OK │ Compile success $.a[ 1 ] 24 │ OK │ Compile success $['a'][2] 25 │ OK │ Compile success $['a'][2]['b'][3] 26 │ OK │ Compile success $[1][2] 27 │ OK │ Compile success $.['a'].['b'] 28 │ OK │ Compile fail $...a 29 │ OK │ Compile fail $.**.a 30 │ OK │ Compile fail $[,1] 31 │ OK │ Compile fail $[1,] 32 │ OK │ Compile fail $[1,,2] 33 │ OK │ Compile fail $[1,*,2] 34 │ OK │ Compile fail $[--1] 35 │ OK │ Compile fail $[a] 36 │ OK │ Compile fail $[$a$] 37 │ OK │ Compile fail $[,'a'] 38 │ OK │ Compile fail $['a',] 39 │ OK │ Compile fail $['a',,'b'] 40 │ OK │ Compile fail $['a',*,'b'] 41 │ OK │ Compile fail $[--'a'] 42 │ OK │ Compile fail $[1,'a'] 43 │ OK │ Compile fail $['a\a'] 44 │ OK │ Compile fail $['a\'] 45 │ OK │ Compile fail $['a\"'] 46 │ OK │ Compile fail $['a\] 47 │ OK │ Compile fail $['a\ 48 │ OK │ Compile fail $["a\'"] 49 │ OK │ Compile success $[ 1 ] 50 │ OK │ Compile success $[1,2] 51 │ OK │ Compile success $[ 1 , 2 ] 52 │ OK │ Compile success $[ -1 ] 53 │ OK │ Compile success $[ -1, 2, 3 ] 54 │ OK │ Compile success $[ ' a ' ] 55 │ OK │ Compile success $[ ' a ', "b" ] 56 │ OK │ Compile success $['a \'b\' \\/'] 57 │ OK │ Compile success $["a \"b\""] 58 │ OK │ Compile success $.*.a 59 │ OK │ Compile success $.* 60 │ OK │ Compile success $[*] 61 │ OK │ Compile success $..a.b..c 62 │ OK │ Compile fail $[1:2:3] 63 │ OK │ Compile success $[:] 64 │ OK │ Compile success $[1:] 65 │ OK │ Compile success $[:1] 66 │ OK │ Compile success $[1:2] 67 │ OK │ Compile success $[-1:-1] 68 │ OK │ Compile success $[ 1 : 2 ] 69 │ OK │ Compile success $[ : 1 ] 70 │ OK │ Compile success $[ 1 : ] 71 │ OK │ Compile fail $.min( 72 │ OK │ Compile fail $.min(1) 73 │ OK │ Compile fail $.div() 74 │ OK │ Compile fail $.avg().data 75 │ OK │ Compile fail $.len() 76 │ OK │ Compile success $.min() 77 │ OK │ Compile success $.max() 78 │ OK │ Compile success $.avg() 79 │ OK │ Compile success $.length() 80 │ OK │ Compile success $.first().max() 81 │ OK │ Compile fail $[?] 82 │ OK │ Compile fail $[?(] 83 │ OK │ Compile fail $[?()] 84 │ OK │ Compile fail $[?(+)] 85 │ OK │ Compile fail $[?(==)] 86 │ OK │ Compile fail $[?(()] 87 │ OK │ Compile fail $[?(+1)] 88 │ OK │ Compile fail $[?(!)] 89 │ OK │ Compile fail $[?(a)] 90 │ OK │ Compile fail $[?(())] 91 │ OK │ Compile fail $[?(1++1)] 92 │ OK │ Compile fail $[?(1 - - 1)] 93 │ OK │ Compile fail $[?(1 + + 1)] 94 │ OK │ Compile fail $[?((1+1)+)] 95 │ OK │ Compile fail $[?((1 + 1) + ())] 96 │ OK │ Compile fail $[?(a + 1)] 97 │ OK │ Compile fail $[?(1 + 'a)] 98 │ OK │ Compile fail $[?($..b + 1)] 99 │ OK │ Compile fail $[?($['a])] 100 │ OK │ Compile fail $[?($[1,2])] 101 │ OK │ Compile fail $[?($.a.)] 102 │ OK │ Compile success $[?(1)] 103 │ OK │ Compile success $[?(-1)] 104 │ OK │ Compile success $[?($.a)] 105 │ OK │ Compile success $[?(@.b)] 106 │ OK │ Compile success $[?(!1)] 107 │ OK │ Compile success $[?(1 + 2)] 108 │ OK │ Compile success $[?(1 + 2 * 3)] 109 │ OK │ Compile success $[?(1 - 2 / 3)] 110 │ OK │ Compile success $[?((1 + 2) * 3)] 111 │ OK │ Compile success $[?($.a + 2 == 3)] 112 │ OK │ Compile success $[?((1 + 2) * (3 - 4))] 113 │ OK │ Compile success $[?(1 == 2 || !3*5)] 114 │ OK │ Compile success $[?(1 == 2 || !(3*5))] 115 │ OK │ Compile success $[?(1 == 2 * @.a)] 116 │ OK │ Compile success $[?((1)+(2))] 117 │ OK │ Compile success $[?(1 + 2 - 3 + 4)] 118 │ OK │ Compile success $[?(1 == 2 == 3)] 119 │ OK │ Compile fail $[?(1 == 2 == 3] 120 │ OK │ Compile success $..[?(@.id)] 121 │ OK │ Compile success $['cn=snmp,cn=monitor']['connections'] 122 │ OK │ Compile success $.sum() 123 │ OK │ Compile success $.*~ 124 │ OK │ Compile success $.*~.first() ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_jsonpath_query ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Query $[0] from ["a", "b"] 1 │ OK │ Query $[4] from ["a", "b"] 2 │ OK │ Query $[1] from ["a", "b"] 3 │ OK │ Query $[2] from ["a", "b"] 4 │ OK │ Query $[2].* from ["a", "b"] 5 │ OK │ Query $.filters.price 6 │ OK │ Query $.filters.category 7 │ OK │ Query $.filters.id 8 │ OK │ Query $.books[1].title 9 │ OK │ Query $['closed message'] 10 │ OK │ Query $.books[-1].author 11 │ OK │ Query $.filters 12 │ OK │ Query $.books.length() 13 │ OK │ Query $.tags[:] 14 │ OK │ Query $.tags[2:] 15 │ OK │ Query $.tags[:2] 16 │ OK │ Query $.tags[1:4] 17 │ OK │ Query $.tags[-2:] 18 │ OK │ Query $.tags[:-3] 19 │ OK │ Query $.tags[:-3].length() 20 │ OK │ Query $.books[0, 2].title 21 │ OK │ Query $.books[1]['author', "title"] 22 │ OK │ Query $..id 23 │ OK │ Query $.services..price 24 │ OK │ Query $.books[?(@.id == 1 + 1)].title 25 │ OK │ Query $.books[?(@.id == 4 / 2)].title 26 │ OK │ Query $.books[?(@.id == 7 - 5)].title 27 │ OK │ Query $.books[?(@.id == 0.4 * 5)].title 28 │ OK │ Query $.books[?(@.id == 4 - 0.4 * 5)].title 29 │ OK │ Query $.books[?(@.id == -0.4 * 5 + 4)].title 30 │ OK │ Query $.books[?(@.id == 0.4 * (-5) + 4)].title 31 │ OK │ Query $.books[?(@.id == 2 || @.id == 4)].title 32 │ OK │ Query $.books[?(@.id == 2 && 2 * ((1 + 3) / 2 + 3) == 10)].title 33 │ OK │ Query $.books[?(@.id == 2 == 1)].title 34 │ OK │ Query $.books[?(!(@.id == 2))].title 35 │ OK │ Query $.books[?(@.id != 2)].title 36 │ OK │ Query $.books[?(@.title =~ " of ")].title 37 │ OK │ Query $.books[?(@.price > 12.99)].title 38 │ OK │ Query $.books[?(@.price >= 12.99)].title 39 │ OK │ Query $.books[?(@.price < 12.99)].title 40 │ OK │ Query $.books[?(@.price <= 12.99)].title 41 │ OK │ Query $.books[?(@.author > "Herman Melville")].title 42 │ OK │ Query $.books[?(@.author >= "Herman Melville")].title 43 │ OK │ Query $.books[?(@.author < "Herman Melville")].title 44 │ OK │ Query $.books[?(@.author <= "Herman Melville")].title 45 │ OK │ Query $.books[?(@.price > $.filters.price)].title 46 │ OK │ Query $.books[?(@.category == $.filters.category)].title 47 │ OK │ Query $.books[?(@.category != $.filters.category)].title 48 │ OK │ Query $..[?(@.id)] 49 │ OK │ Query $.services..[?(@.price > 50)].description 50 │ OK │ Query $..id.length() 51 │ OK │ Query $.books[?(@.price >= 12.99)].length() 52 │ OK │ Query $.books[?(@.id == 2)].title.first() 53 │ OK │ Query $..tags.first().length() 54 │ OK │ Query $.bad.path.first().length() 55 │ OK │ Query $.[?(@.ElementName == "test")].values.first().length() 56 │ OK │ Query $.length() from ["a", "b"] 57 │ OK │ Query $.first() from ["a", "b"] 58 │ OK │ Query $.first().first() from [["a", "b"]] 59 │ OK │ Query $.first().first().first() from [[["a", "b"]]] 60 │ OK │ Query $.books[*].price.min() 61 │ OK │ Query $..price.max() 62 │ OK │ Query $.books[?(@.category == "fiction")].price.avg() 63 │ OK │ Query $.books[?(@.category == $.filters.xyz)].title 64 │ OK │ Query $.filters['no filters'] 65 │ OK │ Query $.services[?(@.active=="true")].servicegroup 66 │ OK │ Query $.services[?(@.active=="false")].servicegroup 67 │ OK │ Query $.books[?(@.title =~ "[a-z")].title 68 │ OK │ $..books[?(!@.isbn)] 69 │ OK │ $..books[?(@.isbn)] 70 │ OK │ Query $.books[*].price.sum() 71 │ OK │ Query $[?(@.a)].id from [{"a":{"b":"c"}, "id":1}, {"x":{"y":"z"}, "id":2}] 72 │ OK │ Query $[?(!@.a)].id from [{"a":{"b":"c"}, "id":1}, {"x":{"y":"z"}, "id":2}] 73 │ OK │ Query $[?(@.a)].id from [{"a":["b","c"], "id":1}, {"x":["y","z"], "id":2}] 74 │ OK │ Query $[?(!@.a)].id from [{"a":["b","c"], "id":1}, {"x":["y","z"], "id":2}] 75 │ OK │ Query $.*~ 76 │ OK │ Query $.*~.first() 77 │ OK │ Query $.services[?(@.servicegroup=="1002")]~ 78 │ OK │ Query $.books[?(@.category=="fiction")]~ ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── prometheus_filter_init ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ cpu{type="intel"} == 1 1 │ OK │ {__name__="cpu", type="intel"} 2 │ OK │ {__name__="cpu", type="intel", cores=~"4"} 3 │ OK │ cpu == 1 4 │ OK │ cpu{description="CPU \"Intel\""} 5 │ OK │ cpu{__name__="cpu"} 6 │ OK │ {__name__="cpu", __name__="cpu"} 7 │ OK │ cpu = 1 8 │ OK │ cpu =~ 1 9 │ OK │ cpu{type=="intel"} == 1 10 │ OK │ Empty 11 │ OK │ sensor == Nan 12 │ OK │ sensor == +Nan 13 │ OK │ sensor == +Inf 14 │ OK │ sensor == -.1 15 │ OK │ sensor == -.1e2 16 │ OK │ sensor == +1. 17 │ OK │ sensor == +1.e2 18 │ OK │ sensor == +1.0000 19 │ OK │ sensor == +1.0000e-2 20 │ OK │ sensor == . 21 │ OK │ sensor == 1e 22 │ OK │ sensor == 1e1 1 23 │ OK │ {type="intel"cores="4"} 24 │ OK │ {} 25 │ OK │ {vendor="intel", cores="4"} 26 │ OK │ cpu 27 │ OK │ {vendor="intel", cores="4",} 28 │ OK │ {vendor="intel" , } 29 │ OK │ {vendor="intel",,} 30 │ OK │ {vendor="intel \x"} 31 │ OK │ cpu{__="intel"} 32 │ OK │ sensor == NAN 33 │ OK │ sensor == nan 34 │ OK │ sensor == NaN 35 │ OK │ sensor == nAn 36 │ OK │ sensor == +INF 37 │ OK │ sensor == -inf 38 │ OK │ sensor == InF 39 │ OK │ sensor == iNf ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── prometheus_parse_row ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ cpu{type="intel"} 1 (1) 1 │ OK │ cpu{type="intel"} 1 12344 (2) 2 │ OK │ cpu{type="intel"} 1 (3) 3 │ OK │ cpu {type="intel"} 1 4 │ OK │ cpu 1 1 5 │ OK │ cpu { type = "intel" , model = "i9" , } 1 6 │ OK │ 1cpu 1 7 │ OK │ cpu! 1 8 │ OK │ cpu none 9 │ OK │ {vendor="intel"} 10 │ OK │ cpu{vendor=="intel"} 11 │ OK │ cpu{,vendor=="intel"} 12 │ OK │ cpu{ven:dor=="intel"} 13 │ OK │ cpu{vendor=="in"tel"} 14 │ OK │ cpu{vendor=="intel\n"} 15 │ OK │ cpu{type="intel"} 1x 16 │ OK │ cpu:0{vendor="intel"} 1 17 │ OK │ cpu{vendor="in\"t\"el"} 1 18 │ OK │ cpu{vendor="intel\\"} 1 19 │ OK │ cpu{vendor="intel\n"} 1 20 │ OK │ cpu$ 1 21 │ OK │ cpu{vendor="intel"}1 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_prometheus_to_json ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Simple metric using params: wmi_os_physical_memory_free_bytes 1 │ OK │ Get metric using params: cpu_usage_system{cpu="cpu-total"} 2 │ OK │ Get metric using params: wmi_logical_disk_free_bytes{volume="{#VOLUME}"} 3 │ OK │ Get metric value using params: cpu_usage_system{cpu="cpu-total",host=~".*"} 4 │ OK │ Get metric value using params: cpu_usage_system{cpu="cpu-total",host=~".*"} 5 │ OK │ Get metric value using params: cpu_usage_system{cpu="cpu-total"} 6 │ OK │ Get metric value using params: cpu_usage_system{cpu=~"cpu-tot.+"} 7 │ OK │ Get metric value using params: {__name__=~"cpu_usage_syst.+",cpu=~"cpu-tot.+"} 8 │ OK │ Get metric value using params: cpu_usage_system{cpu=~".*"} 9 │ OK │ Get metric value using params: cpu_usage_system{cpu=~"cpu-tot.+"} 10 │ OK │ Get metric for http_requests_total{code="400"} 3 1395066363000 11 │ OK │ Escaping in label values 12 │ OK │ Minimalistic line 13 │ OK │ A weird metric from before the epoch 14 │ OK │ A histogram, which has a pretty complex representation in the text format 15 │ OK │ A summary, which has a complex representation #1 16 │ OK │ A summary, which has a complex representation #2 17 │ OK │ Empty metric 18 │ OK │ Empty params 19 │ OK │ Empty metric and empty params 20 │ OK │ Only spaces in metric 21 │ OK │ Only spaces in params 22 │ OK │ Only spaces in params (multiline metric) 23 │ OK │ Only spaces in metric and in params 24 │ OK │ Empty multiline metric 25 │ OK │ Metric without value 26 │ OK │ Metric with missing label value: wmi_os_timezone{timezone=} 1 27 │ OK │ Metric with missing label value: wmi_os_timezone{timezone} 1 28 │ OK │ Incorrect metric data 29 │ OK │ Incorrect metric data (a space within) 30 │ OK │ Metric name with invalid characters included 31 │ OK │ Incorrect metric data with valid HELP/TYPE 32 │ OK │ Metric with a hash symbol only 33 │ OK │ Metric with an empty space only 34 │ OK │ Metric with UTF-8 3 byte character only 35 │ OK │ Metric with UTF-8 3 byte character in label value 36 │ OK │ Metric with missing "{" 37 │ OK │ Metric with missing "}" 38 │ OK │ Metric with missing " 39 │ OK │ Metric with missing "," 40 │ OK │ Metric with missing "," but empty params 41 │ OK │ Double equal sign (==) instead of single equal sign (=) in label value assignment #1 42 │ OK │ Double equal sign (==) instead of single equal sign (=) in label value assignment #2 43 │ OK │ Double equal sign (==) instead of single equal sign (=) in label value assignment #3 44 │ OK │ Label value and params holds new line character 45 │ OK │ Metric name and params holds new line character 46 │ OK │ Double equal sign (==) instead of single equal sign (=) for label value in params 47 │ OK │ Single equal sign (=) instead of double equal sign (==) for metric value in params 48 │ OK │ More than one metric (2) corresponds to the given params 49 │ OK │ Metric with "Nan" value 50 │ OK │ Metric with "+Inf" value 51 │ OK │ Metric with "-Inf" value 52 │ OK │ Metric with "NAN" value 53 │ OK │ Metric with timestamp 54 │ OK │ Metric with additional value after timestamp 55 │ OK │ Metric with negative timestamp 56 │ OK │ Metric with negative value 57 │ OK │ Multilne metric with negative value 58 │ OK │ The __name__ identifier is specified as last in params #1 59 │ OK │ The __name__ identifier is specified as last in params #2 60 │ OK │ Params set to cpu_usage_system{__name__=~"cpu_usage_syst.+",cpu=~"cpu-tot.+"} 61 │ OK │ Params set to cpu_usage_system{__name__=~"cpu_age_syst.+",cpu=~"cpu-tot.+"} 62 │ OK │ Metric with multiple HELP lines 63 │ OK │ Metric with multiple TYPE:untyped lines 64 │ OK │ Metric with wrong TYPE 65 │ OK │ Metric with only one argument for TYPE 66 │ OK │ Metric with no arguments for TYPE 67 │ OK │ Metric with multiple spaces before value 68 │ OK │ Metric with no description after HELP 69 │ OK │ Metric with invalid characters in label name 70 │ OK │ Metric name consists of all valid characters 71 │ OK │ Label name consists of all valid characters 72 │ OK │ Params with regular expression but without prefix "~" 73 │ OK │ Wrong regular expression in params 74 │ OK │ Incorrect identifier __cpu__ set in params #1 75 │ OK │ Incorrect identifier __cpu__ set in params #2 76 │ OK │ Incorrect float in metric value 77 │ OK │ Params set to "{}" 78 │ OK │ Params set to "a{}" 79 │ OK │ Metric data contains "{}" only 80 │ OK │ Negative value in params for metric value 81 │ OK │ Get metric value using regular expression for date (mm/dd/yyyy) #1 82 │ OK │ Get metric value using regular expression for date (mm/dd/yyyy) #2 83 │ OK │ Get metric value using regular expression for date (mm/dd/yyyy) #3 84 │ OK │ Missing "==" in params 85 │ OK │ Get metric value using regular expression for email address 86 │ OK │ Label value and params hold "{" 87 │ OK │ Label value and params hold "{}" 88 │ OK │ Label value and params hold "}" 89 │ OK │ Label value and params hold "," 90 │ OK │ Metric with five values 91 │ OK │ Different metrics under one header #1 92 │ OK │ Different metrics under one header #2 93 │ OK │ Different metrics under one header #3 94 │ OK │ Metrics of different type #1 95 │ OK │ Metrics of different type #2 96 │ OK │ Metrics of different type #3 97 │ OK │ Get metric value using params: cpu_usage_system 98 │ OK │ Different metrics #1 99 │ OK │ Different metrics #2 100 │ OK │ Invalid HELP hint 101 │ OK │ Test HELP hint unescaping 102 │ OK │ Test HELP hint trailing whitespace removal 103 │ OK │ Test HELP hint unescaping ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_prometheus_pattern ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Get metric value using params: "wmi_os_physical_memory_free_bytes" 1 │ OK │ Get metric value using params: "cpu_usage_system{cpu="cpu-total"}" 2 │ OK │ Get metric value using params: "wmi_logical_disk_free_bytes{volume="{#VOLUME}"}" 3 │ OK │ Get label value (volume) using params: "wmi_logical_disk_free_bytes{volume="{#VOLUME}"}" 4 │ OK │ Get metric value using params: "cpu_usage_system{cpu="cpu-total",host=~".*"}" 5 │ OK │ Get metric value using params: "cpu_usage_system{cpu="cpu-total",host=~".*"}" 6 │ OK │ Get metric value using params: "cpu_usage_system{cpu="cpu-total"}" 7 │ OK │ Get metric value using params: "cpu_usage_system{cpu=~"cpu-tot.+"}" 8 │ OK │ Get metric value using params: "{__name__=~"cpu_usage_syst.+",cpu=~"cpu-tot.+"}" 9 │ OK │ Get metric value using params: "cpu_usage_system{cpu=~".*"}" 10 │ OK │ Get metric value using params: "cpu_usage_system{cpu=~"cpu-tot.+"}" 11 │ OK │ Get label value (state) using params: "wmi_service_state{name="dhcp"} == 1" 12 │ OK │ Get label value (timezone) using params: "wmi_os_timezone{timezone=~".*"} == 1" 13 │ OK │ Multiple spaces in metric before the value 14 │ OK │ Escaping in label values 15 │ OK │ Minimalistic line 16 │ OK │ A weird metric from before the epoch 17 │ OK │ A histogram, which has a pretty complex representation in the text format 18 │ OK │ A summary, which has a complex representation 19 │ OK │ Invalid metric (expected "fail"): empty metric 20 │ OK │ Empty params 21 │ OK │ Empty params but value_type is set 22 │ OK │ Empty params but value_type is set (multiline metric) 23 │ OK │ Invalid metric (expected "fail"): empty metric and empty params 24 │ OK │ Invalid metric (expected "fail"): metric consists of spaces only #1 25 │ OK │ Params hold multiple spaces only 26 │ OK │ Params hold multiple spaces only (multiline metric) 27 │ OK │ Invalid metric (expected "fail"): metric consists of spaces only #2 28 │ OK │ Empty multiline metric 29 │ OK │ Empty value_type 30 │ OK │ Invalid metric (expected "fail"): metric without value 31 │ OK │ Invalid metric (expected "fail"): label value is missing but equal sign remains "wmi_os_timezone{timezone=} 1" 32 │ OK │ Invalid metric (expected "fail"): label value is missing "wmi_os_timezone{timezone} 1" 33 │ OK │ Invalid metric (expected "fail"): label value is missing and value_type is set to that label "wmi_os_timezone{timezone} 1" 34 │ OK │ Invalid metric (expected "fail"): label value is missing, value_type is set to that label; params: "wmi_os_timezone{timezone=~".*"} == 1" 35 │ OK │ Invalid metric (expected "fail"): wrong metric data 36 │ OK │ Invalid metric (expected "fail"): wrong metric data (a space within) 37 │ OK │ Invalid metric (expected "fail"): metric name with unsupported characters included 38 │ OK │ Invalid metric (expected "fail"): wrong metric data with valid HELP/TYPE 39 │ OK │ Invalid metric (expected "fail"): metric consists of hash symbol only 40 │ OK │ Invalid metric (expected "fail"): metric consists of empty space only 41 │ OK │ Invalid metric (expected "fail"): metric consists of 3 byte UTF-8 character only 42 │ OK │ Metric with 3 byte UTF-8 byte character included in label value 43 │ OK │ Invalid metric (expected "fail"): metric with missing "{" 44 │ OK │ Invalid metric (expected "fail"): metric with missing "}" 45 │ OK │ Invalid metric (expected "fail"): metric with missing " 46 │ OK │ Invalid metric (expected "fail"): metric with missing "," 47 │ OK │ Invalid metric (expected "fail"): metric with missing "," and params set to empty 48 │ OK │ Invalid metric (expected "fail"): double equal sign (==) instead of single equal sign (=) in label value assignment (multiline metric) 49 │ OK │ Invalid metric (expected "fail"): double equal sign (==) instead of single equal sign (=) in label value assignment (desired metric) 50 │ OK │ Invalid metric (expected "fail"): double equal sign (==) instead of single equal sign (=) in label value assignment 51 │ OK │ Label value and params holds new line character 52 │ OK │ Invalid metric (expected "fail"): metric name holds new line character 53 │ OK │ Invalid params (expected "fail"): params hold new line character 54 │ OK │ Invalid metric (expected "fail"): metric name and params hold new line character 55 │ OK │ Invalid params (expected "fail"): double equal sign (==) instead of single equal sign (=) in label value assignment 56 │ OK │ Invalid params (expected "fail"): single equal sign (=) instead of double equal sign (==) in metric value assignment #1 57 │ OK │ Invalid params (expected "fail"): single equal sign (=) instead of double equal sign (==) in metric value assignment #2 58 │ OK │ More than one metric (2) corresponds to the given params 59 │ OK │ All metrics (8) correspond to the given params 60 │ OK │ All metrics (16) correspond to the given params 61 │ OK │ Multiple metrics (16 of 18) correspond to the given params 62 │ OK │ Metric with "Nan" value 63 │ OK │ Metric with "+Inf" value 64 │ OK │ Metric with "-Inf" value 65 │ OK │ Invalid metric (expected "fail"): metric with "NAN" value 66 │ OK │ Metric with timestamp 67 │ OK │ Invalid metric (expected "succeed"): additional value after timestamp 68 │ OK │ Metric with negative timestamp 69 │ OK │ Metric with negative value 70 │ OK │ Multilne metric with negative value (multiline metric) 71 │ OK │ The __name__ identifier is specified as last in params #1 72 │ OK │ The __name__ identifier is specified as last in params #2 73 │ OK │ Label name set in value_type is not present in the metrics 74 │ OK │ Get metric value using params: "cpu_usage_system{__name__=~"cpu_usage_syst.+",cpu=~"cpu-tot.+"}" 75 │ OK │ Get metric value using params: "cpu_usage_system{__name__=~"cpu_age_syst.+",cpu=~"cpu-tot.+"}" 76 │ OK │ Random characters in value_type 77 │ OK │ Invalid metric (expected "succeed"): multiple HELP lines 78 │ OK │ Invalid metric (expected "succeed"): multiple TYPE:untyped lines 79 │ OK │ Invalid metric (expected "succeed"): unsupported TYPE 80 │ OK │ Invalid metric (expected "succeed"): only one argument for TYPE 81 │ OK │ Invalid metric (expected "succeed"): empty TYPE 82 │ OK │ Multiple spaces before metric value 83 │ OK │ Invalid metric (expected "succeed"): empty HELP 84 │ OK │ Invalid metric (expected "fail"): unsupported characters in label name 85 │ OK │ Get metric value using params: "wmi_os_timezone" 86 │ OK │ Metric name consists of all supported characters 87 │ OK │ Label name consists of all supported characters 88 │ OK │ Invalid params (expected "fail"): regular expression but without prefix "~" 89 │ OK │ Invalid params (expected "fail"): wrong regular expression 90 │ OK │ Invalid params (expected "fail"): unsupported identifier __cpu__ #1 91 │ OK │ Invalid params (expected "fail"): unsupported identifier __cpu__ #2 92 │ OK │ Invalid metric (expected "fail"): incorrect float 93 │ OK │ Invalid params (expected "fail"): "{}" 94 │ OK │ Invalid params (expected "fail"): "a{}" 95 │ OK │ Invalid metric (expected "fail"): "{}" 96 │ OK │ Get metric value using params: "wmi_os_timezone{timezone="MSK"} == -1" 97 │ OK │ Get label value using regular expression for date #1 98 │ OK │ Get label value using regular expression for date #2 99 │ OK │ Get label value using regular expression for date #3 100 │ OK │ Get label value using regular expression for date #4 101 │ OK │ Get label value using regular expression for date #5 102 │ OK │ Invalid params (expected "fail"): double equal sign (==) is missing 103 │ OK │ Get label value using regular expression for email address #1 104 │ OK │ Get label value using regular expression for email address #2 105 │ OK │ Get label value using regular expression for email address #3 106 │ OK │ Get metric value using regular expression for email address 107 │ OK │ Label value holds "{" 108 │ OK │ Label value holds "{}" 109 │ OK │ Label value holds "}" 110 │ OK │ Label value holds "," 111 │ OK │ Get label value (cpu) using params: "cpu_usage_system{cpu="cpu{total"} == 1.1940298507220641" 112 │ OK │ Get label value (cpu) using params: "cpu_usage_system{cpu="cpu}total"} == 1.1940298507220641" 113 │ OK │ Metric with five values 114 │ OK │ Different metrics under one HELP/TYPE header #1 115 │ OK │ Different metrics under one HELP/TYPE header #2 116 │ OK │ Metrics of different type #1 117 │ OK │ Metrics of different type #2 118 │ OK │ Metrics of different type #3 119 │ OK │ Get metric value using params: "cpu_usage_system { cpu = "cpu-total" , host = "host1",perf="100" }" 120 │ OK │ Invalid params (expected "fail"): no spaces around double equal sign (==) 121 │ OK │ Get metric value using params: "http_requests_total{code="400"} == 3" 122 │ OK │ Invalid metric (expected "fail"): metric with string value 123 │ OK │ Invalid params (expected "fail"): metric with string value 124 │ OK │ Invalid params (expected "fail"): __name__ identifier is specified twice 125 │ OK │ Get metric value using params: "{cpu=~".*",cpu=~"cpu-tot.+",perf="100"}" 126 │ OK │ Get metric value using params: "{cpu=~"z.+",cpu=~"cpu-tot.+",perf="100"}" 127 │ OK │ Get metric value using params: "{cpu=~"z.+",cpu=~"y.+",perf="100"}" 128 │ OK │ Apply INF metric filter on multiple inf values 129 │ OK │ Apply INF metric filter on multiple inf values (2) 130 │ OK │ Apply INF metric filter on multiple nan values 131 │ OK │ Apply INF metric filter on matching inf value 132 │ OK │ Apply INF metric filter on matching inf value (2) 133 │ OK │ Apply INF metric filter on matching inf value (3) 134 │ OK │ Apply INF metric filter on matching inf value (4) 135 │ OK │ Apply INF metric filter on matching nan value 136 │ OK │ Apply 1 metric filter on 1.0 value 137 │ OK │ Apply 10 metric filter on 1e1 value 138 │ OK │ Apply 125 metric filter on 1.25e2 value 139 │ OK │ Apply 00.0100 metric filter on 1e-2 value 140 │ OK │ Apply 125 metric filter on multiple matching values 141 │ OK │ Apply 1 metric filter on +1 value 142 │ OK │ Apply +1 metric filter on +1 value 143 │ OK │ Apply +1 metric filter on 1 value 144 │ OK │ Apply +1 metric filter on -1 value 145 │ OK │ Apply -1 metric filter on +1 value 146 │ OK │ Apply -1 metric filter on +1 value ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── wildcard_match ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ String match 1 │ OK │ Match all 2 │ OK │ Empty 3 │ OK │ Wildcard lo*ip*m 4 │ OK │ Wildcard a*bc 5 │ OK │ Wildcard a*bc*d 6 │ OK │ Wildcard abc* 7 │ OK │ Wildcard *abc 8 │ OK │ Wildcard *abc* 9 │ OK │ Wildcard a***c 10 │ OK │ Wildcard ***c*e 11 │ OK │ Wildcard a*c*** ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── evaluate_function ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Evaluate last() <- 0.1, 0.2 1 │ OK │ Evaluate last(#2) <- 0.1, 0.2 2 │ OK │ Evaluate last() <- 'xyz' 3 │ OK │ Evaluate last() <- '😓...' 4 │ OK │ Evaluate last() <- '123' 5 │ OK │ Evaluate last() <- ' a b ' 6 │ OK │ Evaluate last() <- '\"c:\\\"' 7 │ OK │ Evaluate abschange() <- 0.1, 0.2 8 │ OK │ Evaluate abschange() <- 10, 7 9 │ OK │ Evaluate abschange() <- 'a', 'b' 10 │ OK │ Evaluate abschange() <- 'x', 'x' 11 │ OK │ Evaluate abschange() <- @log 'a', 'b' 12 │ OK │ Evaluate abschange() <- @log 'x', 'x' 13 │ OK │ Evaluate avg(#2) 14 │ OK │ Evaluate avg(3m) 15 │ OK │ Evaluate avg(#2,1m) 16 │ OK │ Evaluate band(#1,1) 17 │ OK │ Evaluate band(#2,1) 18 │ OK │ Evaluate band(2m,2,1m) 19 │ OK │ Evaluate change() <- 0.1, 0.2 20 │ OK │ Evaluate change() <- 10, 7 21 │ OK │ Evaluate change() <- 'a', 'b' 22 │ OK │ Evaluate change() <- 'x', 'x' 23 │ OK │ Evaluate change() <- @log 'a', 'b' 24 │ OK │ Evaluate change() <- @log 'x', 'x' 25 │ OK │ Evaluate count(#3,4,ge) 26 │ OK │ Evaluate count(#3,o,like) 27 │ OK │ Evaluate count(#3,o$,regexp) 28 │ OK │ Evaluate count(#3,o,iregexp) 29 │ OK │ Evaluate count(#3,1/3,band) 30 │ OK │ Evaluate count(#3,2/3,band) 31 │ OK │ Evaluate date() 32 │ OK │ Evaluate dayofmonth() 33 │ OK │ Evaluate dayofweek() 34 │ OK │ Evaluate time() 35 │ OK │ Evaluate delta(#4) 36 │ OK │ Evaluate delta(4m,1m) 37 │ OK │ Evaluate diff() <- 0.1, 0.2 38 │ OK │ Evaluate diff() <- 0.123, 0.123 39 │ OK │ Evaluate diff() <- 10, 7 40 │ OK │ Evaluate diff() <- 1234567890, 1234567890 41 │ OK │ Evaluate diff() <- 'a', 'b' 42 │ OK │ Evaluate diff() <- 'x', 'x' 43 │ OK │ Evaluate diff() <- @log 'a', 'b' 44 │ OK │ Evaluate diff() <- @log 'x', 'x' 45 │ OK │ Evaluate forecast(#5,,1h) 46 │ OK │ Evaluate forecast(#5,1h,1h) 47 │ OK │ Evaluate fuzzytime(1) < @uint64 48 │ OK │ Evaluate fuzzytime(1) < @float 49 │ OK │ Evaluate iregexp(^o,#5) 50 │ OK │ Evaluate regexp(^o,#5) 51 │ OK │ Evaluate str(o,#5) 52 │ FAILURE │ Evaluate logeventid(^12) STDOUT: [==========] Running 1 test(s). [ RUN ] zbx_mock_test_entry [ FAILED ] zbx_mock_test_entry [==========] 1 test(s) run. STDERR: [ ERROR ] --- function result: Expected value "1.000000" while got "0.000000" [ LINE ] --- evaluate_function.c:113: error: Failure! [ PASSED ] 0 test(s). [ FAILED ] 1 test(s), listed below: [ FAILED ] zbx_mock_test_entry 1 FAILED TEST(S) 53 │ OK │ Evaluate logeventid(^34) 54 │ OK │ Evaluate logseverity() 55 │ OK │ Evaluate logsource('(Application|System)') <- Application 56 │ OK │ Evaluate logsource("(Application|System)") <- Security 57 │ OK │ Evaluate max(5m) 58 │ OK │ Evaluate max(5m,2m) 59 │ OK │ Evaluate min(4m) 60 │ OK │ Evaluate min(4m,2m) 61 │ OK │ Evaluate nodata(1m) 62 │ OK │ Evaluate nodata(5m) 63 │ OK │ Evaluate now() 64 │ OK │ Evaluate percentile(5m,,100) 65 │ OK │ Evaluate percentile(5m,,50) 66 │ OK │ Evaluate prev() <- 0.1, 0.2 67 │ OK │ Evaluate strlen() 68 │ OK │ Evaluate strlen(1m) 69 │ OK │ Evaluate strlen(,2m) 70 │ OK │ Evaluate strlen() <- 😓 71 │ OK │ Evaluate strlen() <- @log 72 │ OK │ Evaluate sum(#4) 73 │ OK │ Evaluate sum(4m,1m) 74 │ OK │ Evaluate time() 75 │ OK │ Evaluate timeleft(5m,,65) ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── get_trigger_expression_constant ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ extract token 0 1 │ OK │ extract token 1 2 │ OK │ extract token 2 3 │ OK │ extract token 3 4 │ OK │ extract token 1, int in the middle 5 │ OK │ extract token 2, int in the middle 6 │ OK │ extract token 3, int in the middle 7 │ OK │ extract token 1, str in the middle 8 │ OK │ extract token 2, str in the middle 9 │ OK │ extract token 3, str in the middle 10 │ OK │ escape function 11 │ OK │ macro 12 │ OK │ escaping 1 13 │ OK │ escaping 2 14 │ OK │ escaping 3 15 │ OK │ user macro 16 │ OK │ negative constant 17 │ OK │ user macro with context 18 │ OK │ broken user macro with context 19 │ OK │ fraction 20 │ OK │ negative fraction 21 │ OK │ invalid number .5.5.5 22 │ OK │ constant after macro 23 │ OK │ constant 1e5 24 │ OK │ constant 1e-5 25 │ OK │ constant 1e-5.0 26 │ OK │ string constant -10e-10 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── substitute_lld_macros ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Expand '{1} < {#A}' with {#A}=1 1 │ OK │ Expand '{1} < "{#A}"' with {#A}=1 2 │ OK │ Expand '{1} < {#A}' 3 │ OK │ Expand '{1} < {#A}' with {#A}=x 4 │ OK │ Expand '{1} < {#A}' with {#A}="x" 5 │ OK │ Expand '{1} < "{#A}"' with {#A}="x" 6 │ OK │ Expand '{1} < "{#A}"' 7 │ OK │ Expand '{1} = "x" and {2} < {#A}' with {#A}="x" 8 │ OK │ Expand '{1} < "{#A}{#B}"' with {#A}=1,'{#B}'="x" 9 │ OK │ Expand '{1} < "{#A}{#B}"' with {#A}=1,'{#B}'=2 10 │ OK │ Expand '{1} < "{#A}{#B}"' with {#A}="x",'{#B}'="y" 11 │ OK │ Expand '{1} < {#A}{#B}' with {#A}="x",'{#B}'="y" 12 │ OK │ Expand '{1} < {#A}{#B}' with {#A}=1,'{#B}'=0 13 │ OK │ Expand '{1} < "\"{#A}\"{#B}\""' with {#A}=\",'{#B}'=\ 14 │ OK │ Expand '{1} < " \" {#A} \" {#B} \" " and {#A}<>"\"{#B}" and " {#A} " = " {#A} "' with {#A}=",'{#B}'=\\ 15 │ OK │ Expand '{1} < {#A}' with {#A}="" 16 │ OK │ Expand '{1} < "{#A}"' with {#A}="" 17 │ OK │ Expand '{2000} < {#A}' with {#A}=2e+3 18 │ OK │ Expand '{1} < "\\\"a\"" and {1} = {#A}' with {#A}="b" 19 │ OK │ Expand '{2} <> {$M:"context:\"\\/\""} and {1} < {#A}' with {#A}=x ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── check_key_access_rules ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ No rules (all allowed) 1 │ OK │ No allowed keys 2 │ OK │ No arguments 3 │ OK │ Empty parameter list 4 │ OK │ Any arguments 5 │ OK │ Any arguments double asterisk 6 │ OK │ Specific first parameter 7 │ OK │ First argument pattern 8 │ OK │ Any second parameter value 9 │ OK │ First argument pattern and any following arguments 10 │ OK │ Any first parameter value 11 │ OK │ Empty second parameter value 12 │ OK │ Any second parameter value 13 │ OK │ Specific parameters 14 │ OK │ Quoted parameters 15 │ OK │ Key pattern without arguments 16 │ OK │ Key pattern with any arguments 17 │ OK │ Whitelist 18 │ OK │ Blacklist 19 │ OK │ Combined wildcard in key 20 │ OK │ Duplicate rules 21 │ OK │ No rules after AllowKey=* 22 │ OK │ No rules after DenyKey=* 23 │ OK │ Incomplete whitelist (no deny all at the end) 24 │ OK │ No trailing AllowKey rules 25 │ OK │ Empty parameters match ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── parse_item_key ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ valid key with no parameters 1 │ OK │ valid key with empty brackets 2 │ OK │ valid key with quoted empty string in brackets 3 │ OK │ valid key with space in brackets 4 │ OK │ valid key with leading space before quoted empty string in brackets 5 │ OK │ valid key with leading and trailing spaces around quoted empty string in brackets 6 │ OK │ valid key with 'a' in brackets 7 │ OK │ valid key with leading space before 'a' in brackets 8 │ OK │ valid key with leading and trailing spaces around 'a' in brackets 9 │ OK │ valid key with quoted 'a' in brackets 10 │ OK │ valid key with quoted 'a' followed by comma in brackets 11 │ OK │ valid key with unquoted 'a' followed by comma in brackets 12 │ OK │ valid key with multiple unquoted parameters in brackets 13 │ OK │ valid key with multiple quoted parameters in brackets 14 │ OK │ valid key with first unquoted parameter and second array parameter containing two unquoted parameters 15 │ OK │ valid key with first unquoted parameter and second array parameter containing unquoted and empty parameter 16 │ OK │ valid key with two unquoted parameters where second parameter contains opening square bracket 17 │ OK │ valid key with multiple quoted parameters and array 18 │ OK │ valid key with multiple quoted parameters and multiple arrays 19 │ OK │ valid key, single parameter with unquoted string containing double quote characters 20 │ OK │ valid key, multiple different type parameters where one is unquoted string containing double quote characters 21 │ OK │ valid key with many quoted/unquoted parameters with/without trailing/leading spaces also featuring escaping 22 │ OK │ valid key with quoted and unquoted arrays 23 │ OK │ invalid key, unmatched opening bracket (1) 24 │ OK │ invalid key, unmatched opening bracket (2) 25 │ OK │ invalid key, unmatched opening bracket (3) 26 │ OK │ invalid key, invalid character for unquoted parameter, multiple parameter key 27 │ OK │ invalid key, unmatched closing bracket, parameter followed by trailing space 28 │ OK │ invalid key, unmatched closing bracket, parameter followed by leading space 29 │ OK │ invalid key, part of parameters list not enclosed in brackets 30 │ OK │ invalid key, braces are not allowed in key 31 │ OK │ invalid key, comma is not allowed in key or parameters should be enclosed in brackets 32 │ OK │ invalid key, multiple square bracket pairs are not allowed 33 │ OK │ invalid key, multiple square bracket pairs containing parameters are not allowed 34 │ OK │ invalid key, multi-level arrays are not allowed 35 │ OK │ invalid key, multi-level arrays are not allowed, array consists of multiple different type parameters 36 │ OK │ invalid key, multi-level arrays are not allowed, array consists of single parameter which is another array 37 │ OK │ invalid key, character ] is not allowed in unquoted parameter string 38 │ OK │ invalid key, character [ is allowed in unquoted parameter string but character ] is not 39 │ OK │ invalid key, character ] is not allowed in unquoted parameter string, key with multiple different type parameters 40 │ OK │ invalid key, quoted parameter cannot contain unquoted part 41 │ OK │ invalid key, second parameter of the array cannot contain unquoted part 42 │ OK │ invalid key, array type parameter cannot contain quoted parameter with unquoted part 43 │ OK │ invalid key, array type parameter cannot contain quoted part ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── process ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ successfully called SYSTEM_LOCALTIME function 1 │ OK │ successfully called WEB_PAGE_GET function 2 │ OK │ successfully called WEB_PAGE_PERF function 3 │ OK │ successfully called WEB_PAGE_REGEXP function 4 │ OK │ successfully called VFS_FILE_SIZE function 5 │ OK │ successfully called VFS_FILE_TIME function 6 │ OK │ successfully called VFS_FILE_EXISTS function 7 │ OK │ successfully called VFS_FILE_CONTENTS function 8 │ OK │ successfully called VFS_FILE_REGMATCH function 9 │ OK │ successfully called VFS_FILE_MD5SUM function 10 │ OK │ successfully called VFS_FILE_CKSUM function 11 │ OK │ successfully called VFS_DIR_SIZE function 12 │ OK │ successfully called NET_DNS function 13 │ OK │ successfully called NET_DNS_RECORD function 14 │ OK │ successfully called NET_TCP_PORT function 15 │ OK │ successfully called SYSTEM_USERS_NUM function ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── item_preproc_csv_to_json ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ missing second parameter 1 │ OK │ missing third parameter 2 │ OK │ invalid first parameter 3 │ OK │ invalid second parameter 4 │ OK │ empty input (1) 5 │ OK │ empty input (2) 6 │ OK │ single char (1) 7 │ OK │ single char (2) 8 │ OK │ single UTF8 4-bytes character (1) 9 │ OK │ single UTF8 4-bytes character (2) 10 │ OK │ empty line (1) 11 │ OK │ empty line (2) 12 │ OK │ multiple empty lines (1) 13 │ OK │ multiple empty lines (2) 14 │ OK │ single column (1) 15 │ OK │ single column (2) 16 │ OK │ single line (1) 17 │ OK │ single line (2) 18 │ OK │ no trailing line break (1) 19 │ OK │ no trailing line break (2) 20 │ OK │ no trailing line break (3) 21 │ OK │ empty fields (1) 22 │ OK │ empty fields (2) 23 │ OK │ empty fields (3) 24 │ OK │ delimiter in quoted field 25 │ OK │ quotation character in unquoted field 26 │ OK │ quotation character in unquoted field (2) 27 │ OK │ escaped quotation character 28 │ OK │ delimiter set in sep line 29 │ OK │ cr/nl line breaks 30 │ OK │ various length rows 31 │ OK │ equal delimiter and quotation characters 32 │ OK │ UTF8 2-byte delimiter 33 │ OK │ UTF8 3-byte delimiter set in sep line 34 │ OK │ UTF8 4-byte delimiter 35 │ OK │ UTF8 2-byte quotation character 36 │ OK │ UTF8 3-byte quotation character 37 │ OK │ UTF8 multi-byte delimiter and quotation characters 38 │ OK │ delimiter set to space 39 │ OK │ quotation character set to space 40 │ OK │ sep line only (1) 41 │ OK │ sep line only (2) 42 │ OK │ sep line only (3) 43 │ OK │ sep line only (4) 44 │ OK │ unsupported sep line (1) 45 │ OK │ unsupported sep line (2) 46 │ OK │ duplicated column names (1) 47 │ OK │ duplicated column names (2) 48 │ OK │ more fields in data row than in header 49 │ OK │ unclosed quoted field 50 │ OK │ unclosed quoted field (UTF8-2) 51 │ OK │ unclosed quoted field (UTF8-3) 52 │ OK │ unclosed quoted field (UTF8-4) 53 │ OK │ escaped quotation character in unclosed quoted field (UTF8-3) 54 │ OK │ missing delimiter or line break after quoted field 55 │ OK │ unsupported line break 56 │ OK │ CSV sample input (1) 57 │ OK │ CSV sample input (2) ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── item_preproc_xpath ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ empty input parameters 1 │ OK │ single start tag 2 │ OK │ single end tag 3 │ OK │ wrong operation format 4 │ OK │ wrong operation expression 5 │ OK │ wrong operation format 2 6 │ OK │ empty output 7 │ OK │ successful expression 8 │ OK │ return end tag 9 │ OK │ return text 10 │ OK │ return string 11 │ OK │ return attribute 12 │ OK │ return pattern ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_item_preproc ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ string(10) * 10 1 │ OK │ string(10x) * 10 2 │ OK │ string(10) * abc 3 │ OK │ string(1.5) * 3 4 │ OK │ uint64(1.5) * 3 5 │ OK │ uint64(3) * 1.5 6 │ OK │ float(1.5) * 3 7 │ OK │ float(3) * 1.5 8 │ OK │ rtrim(01abc01, 01) 9 │ OK │ rtrim(01abc01, abc) 10 │ OK │ ltrim(01abc01, 01) 11 │ OK │ ltrim(01abc01, abc) 12 │ OK │ trim(01abc01, 01) 13 │ OK │ trim(01abc01, abc) 14 │ OK │ trim(\\s, abc) 15 │ OK │ regsub("test 123 number", "([0-9]+", 1) 16 │ OK │ regsub("test 123 number", "([0-9]+)", \1) 17 │ OK │ regsub("test 123 number", "([0-9]+)", x\1y) 18 │ OK │ regsub("test 123 number", "([0-9]+)", ) 19 │ OK │ regsub("test abc number", "([0-9]+)", \1) 20 │ OK │ regsub("", "([0-9]+)", \1) 21 │ OK │ regsub("", "^$", ok) 22 │ OK │ bool2dec() 23 │ OK │ bool2dec(abc) 24 │ OK │ bool2dec(1) 25 │ OK │ bool2dec(0) 26 │ OK │ bool2dec(true) 27 │ OK │ bool2dec(t) 28 │ OK │ bool2dec(yes) 29 │ OK │ bool2dec(y) 30 │ OK │ bool2dec(ok) 31 │ OK │ bool2dec(on) 32 │ OK │ bool2dec(false) 33 │ OK │ bool2dec(f) 34 │ OK │ bool2dec(no) 35 │ OK │ bool2dec(n) 36 │ OK │ bool2dec(err) 37 │ OK │ bool2dec(off) 38 │ OK │ oct2dec(0) 39 │ OK │ oct2dec(7) 40 │ OK │ oct2dec(10) 41 │ OK │ oct2dec(8) 42 │ OK │ hex2dec(F) 43 │ OK │ hex2dec(a) 44 │ OK │ hex2dec(10) 45 │ OK │ hex2dec(g) 46 │ OK │ hex2dec(ff ff) 47 │ OK │ deltavalue(5, 10) 48 │ OK │ deltavalue(-4.5, 5.5) 49 │ OK │ deltavalue(10, 10) 50 │ OK │ deltavalue(10, 9) 51 │ OK │ deltavalue(0, 1.5) 52 │ OK │ deltaspeed(2, 1, 10s) 53 │ OK │ deltaspeed(1, 2, -10s) 54 │ OK │ deltaspeed(1, 2, 10s) 55 │ OK │ deltaspeed(2, 3, 10s) 56 │ OK │ deltaspeed(2, 3, 1s) 57 │ OK │ xpath1 58 │ OK │ xpath2 59 │ OK │ xpath3 60 │ OK │ xpath4 61 │ OK │ xpath5 62 │ OK │ xpath6 63 │ OK │ xpath7 64 │ OK │ xpath8 65 │ OK │ xpath9 66 │ OK │ xpath10 67 │ OK │ xpath11 68 │ OK │ xpath12 69 │ OK │ jsonpath1 70 │ OK │ jsonpath2 71 │ OK │ jsonpath3 72 │ OK │ jsonpath4 73 │ OK │ jsonpath5 74 │ OK │ jsonpath6 75 │ OK │ jsonpath7 76 │ OK │ jsonpath8 77 │ OK │ jsonpath9 78 │ OK │ jsonpath10 79 │ OK │ jsonpath11 80 │ OK │ jsonpath12 81 │ OK │ validate_range(1, 5, 10) 82 │ OK │ validate_range(5, 5, 10) 83 │ OK │ validate_range(10, 5, 10) 84 │ OK │ validate_range(10.1, 5, 10) 85 │ OK │ validate_regex(abc 123 xyz, ([0-9+)) 86 │ OK │ validate_regex(abc opq xyz, ([0-9]+)) 87 │ OK │ validate_regex(abc 123 xyz, ([0-9]+)) 88 │ OK │ validate_regex(abc 123 xyz, ([0-9+)) 89 │ OK │ validate_regex(abc opq xyz, ([0-9]+)) 90 │ OK │ validate_regex(abc 123 xyz, ([0-9]+)) 91 │ OK │ string(10) * 10 (discard) 92 │ OK │ string(10) * 10 (set value) 93 │ OK │ string(10) * 10 (set error) 94 │ OK │ jsonerror(x, $.error) 95 │ OK │ jsonerror({"error":"error message"}, $error) 96 │ OK │ jsonerror({"data":"123"}, $.error) 97 │ OK │ jsonerror({"error":"error message"}, $.error) 98 │ OK │ xmlerror(x, //error) 99 │ OK │ xmlerror(custom error, "//text(") 100 │ OK │ xmlerror(custom error, "//error/text()") 101 │ OK │ xmlerror(1, "//error/text()") 102 │ OK │ regexerror("error:123, "error:([0-9+)") 103 │ OK │ regexerror("error:123, "error:([0-9]+)") 104 │ OK │ regexerror("value:123, "error:([0-9]+)") 105 │ OK │ throttle(1, 123) 106 │ OK │ throttle(, 123) 107 │ OK │ throttle(123, 123) 108 │ OK │ throttle_timed(, abc) 109 │ OK │ throttle_timed(xyz, abc) 110 │ OK │ throttle_timed(abc, abc, 30s) 111 │ OK │ throttle_timed(abc, abc, 1m) 112 │ OK │ float(1.5e0) * 1 113 │ OK │ float(1) * 1.5e0 114 │ OK │ float(1.5e0) * 1.5e0 115 │ OK │ float(1.5e1) * 1 116 │ OK │ float(1) * 1.5e1 117 │ OK │ float(1.5e1) * 1.5e1 118 │ OK │ float(1.5e10) * 1 119 │ OK │ float(1) * 1.5e10 120 │ OK │ float(1.5e10) * 1.5e10 121 │ OK │ prometheus_getmetric1 122 │ OK │ prometheus_getmetric2 123 │ OK │ prometheus_getmetric3 124 │ OK │ prometheus_getmetric4 125 │ OK │ prometheus_getmetric5 126 │ OK │ prometheus_getmetric6 127 │ OK │ prometheus_getmetric7 128 │ OK │ prometheus_getmetric8 129 │ OK │ prometheus_getmetric9 130 │ OK │ prometheus_getmetric10 131 │ OK │ prometheus_getmetric11 132 │ OK │ prometheus_getmetric12 133 │ OK │ prometheus_getmetric13 134 │ OK │ prometheus_to_json1 135 │ OK │ prometheus_to_json2 136 │ OK │ prometheus_to_json3 137 │ OK │ prometheus_to_json4 138 │ OK │ prometheus_to_json5 139 │ OK │ csv_to_json1 140 │ OK │ csv_to_json2 141 │ OK │ csv_to_json3 142 │ OK │ csv_to_json4 143 │ OK │ replace a to b 144 │ OK │ replace a to bbb 145 │ OK │ replace a to a 146 │ OK │ replace a to nothing 147 │ OK │ replace a to nothing in between 148 │ OK │ replace non printable characters 149 │ OK │ replace non printable characters mixed 150 │ OK │ replace non printable characters 2 151 │ OK │ replace non printable characters in both search and replace 152 │ OK │ replace \ 153 │ OK │ replace 2 characters "\t" to OK 154 │ OK │ Missing second parameter 155 │ OK │ Missing first parameter 156 │ OK │ Single slash in search 157 │ OK │ Single slash in replace 158 │ OK │ No match ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── zbx_trapper_preproc_test_run ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Empty request 1 │ OK │ Missing sessionid field 2 │ OK │ Missing data field 3 │ OK │ Missing data.steps field 4 │ OK │ Missing data.value_type field 5 │ OK │ Missing data.value field 6 │ OK │ Missing data.steps[0].error_handler_params field 7 │ OK │ Missing data.steps[0].params field 8 │ OK │ Missing data.steps[0].error_handler field 9 │ OK │ Missing data.steps[0].type field 10 │ OK │ Missing data.history.timestamp field 11 │ OK │ Missing data.history.value field 12 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to data: 4$ 13 │ OK │ Apply mult(2) + trim($) + regsub("data: *(.*)", \1) to data: 4$ 14 │ OK │ Apply trim($) + mult(2) + regsub("data: *(.*)", \1) to data: 4$ 15 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to data: x$ 16 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to 4$ with discard on fail 17 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to 4$ with set value to 5 on fail 18 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to 4$ with set error to Validation error on fail 19 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) to data: x$ for uint value 20 │ OK │ Apply regsub("data: *(.*)", \1) to data: x for uint value testing single step 21 │ OK │ Apply delta() to 100, 700 22 │ OK │ Apply delta_per_second() to 100, 700 23 │ OK │ Apply mult(2) + trim($) + regsub("data: *(.*)", \1) to history data: 4$ 24 │ OK │ Apply trim($) + mult(2) + regsub("data: *(.*)", \1) to history data: 4$ 25 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to history data: x$ 26 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to history 4$ with discard on fail 27 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to history 4$ with set value to 5 on fail 28 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) + mult(2) to history 4$ with set error to Validation error on fail 29 │ OK │ Apply trim($) + regsub("data: *(.*)", \1) to history data: x$ for uint value 30 │ OK │ Apply regsub("data: *(.*)", \1) to history data: x for uint value testing single step 31 │ OK │ Apply regsub("data: *(.*)", \1) + delta() to data: 9, data:10 32 │ OK │ Apply regsub("data: *(.*)", \1) + delta() to data: 9, data:10 ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── SYSTEM_LOCALTIME ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ timestamp check without params 1 │ OK │ timestamp check with empty params 2 │ OK │ timestamp check with UTC type param 3 │ OK │ localtime check 4 │ OK │ input parameter count check 5 │ OK │ input parameter value check ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── VFS_FILE_EXISTS ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ file exists 1 │ OK │ file exists, include all 2 │ OK │ file exists, exclude sockets 3 │ OK │ file does not exist 4 │ OK │ file exist but is excluded 5 │ OK │ empty file name 6 │ OK │ too many parameters 7 │ OK │ invalid "include types" parameter 8 │ OK │ invalid "exclude types" parameter 9 │ OK │ invalid both "include types" and "exclude types" parameters ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── WEB_PAGE_GET ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ Regular 127.0.0.1 1 │ OK │ Regular 127.0.0.1, 2 │ OK │ Regular 127.0.0.1, ,80 3 │ OK │ Regular 127.0.0.1, /,80 4 │ OK │ Regular 127.0.0.1, zabbix,80 5 │ OK │ Regular 127.0.0.1,zabbix 6 │ OK │ Regular 127.0.0.1,/zabbix 7 │ OK │ Regular 127.0.0.1,zabbix,80 8 │ OK │ Injection 127.0\r\n.0.1 9 │ OK │ Injection \r\n127.0\r\n.0.1 10 │ OK │ Injection 127.0.0.1,zabbi\r\n\r\n\r\nx 11 │ OK │ Injection 127.0.0.1,\r\n\r\n/zabbi\r\n\r\n\r\nx,80 12 │ OK │ HTTPS URL [https://www.example.com:443/some_path] 13 │ OK │ HTTPS URL [https://www.example.com:443/some_path]; legacy 14 │ OK │ HTTPS URL, "path" parameter is set [https://www.example.com:443/some_path,some_path] 15 │ OK │ HTTPS URL, "port" parameter is set [https://www.example.com/some_path,,80] 16 │ OK │ Domain name [www.example.com] 17 │ OK │ Domain name, "path" and "port" parameters are set [www.example.com,/some_path,80] 18 │ OK │ Domain name, "path" parameter is set [www.example.com,some_path] 19 │ OK │ URL with userinfo [user@example.com] 20 │ OK │ URL with userinfo [user@example.com]; legacy 21 │ OK │ HTTPS URL with userinfo [https://user@example.com] 22 │ OK │ HTTPS URL with userinfo [https://user@example.com]; legacy 23 │ OK │ Invalid URL [http:/www.example.com] 24 │ OK │ Invalid URL [http:/www.example.com]; legacy 25 │ OK │ HTTP URL ["http://[ff00::ff00:ff00:ff00:ff00]:80/trunk"] 26 │ OK │ HTTP URL ["http://[::1]:80/trunk"] 27 │ OK │ FTP URL [ftp://www.example.com:443/some_path] 28 │ OK │ Domain name, "port" parameter is set [www.example.com,,443] 29 │ OK │ HTTPS URL [https://www.example.com:80] 30 │ OK │ HTTPS URL [https://www.example.com:80]; legacy 31 │ OK │ HTTP URL [http://www.example.com] 32 │ OK │ IPv4 host [127.0.0.1] 33 │ OK │ URL [127.0.0.1:80/] 34 │ OK │ IPv6 host [ff00::ff00:ff00:ff00:ff00] 35 │ OK │ IPv6 host [::1] 36 │ OK │ Invalid IPv6 host [::1:80] 37 │ OK │ URL ["[::1]:80"] 38 │ OK │ URL [127.0.0.1:80] 39 │ OK │ HTTPS URL [https://user:pass@www.example.com:443/some_path] 40 │ OK │ HTTPS URL [https://user:pass@www.example.com:443/some_path]; legacy 41 │ OK │ Hostname [localhost] 42 │ OK │ HTTPS URL [ hTtPS://www.example.com] 43 │ OK │ HTTPS URL [ hTtPS://www.example.com]; legacy 44 │ OK │ Domain name [пример.рус] 45 │ OK │ Domain name, "path" parameter is set [пример.рус,#opp] 46 │ OK │ HTTP URL [http://пример.рус] 47 │ OK │ HTTP URL [http://пример.рус:80/#opp] 48 │ OK │ HTTP URL [http://пример.рус:80#opp] 49 │ OK │ Invalid HTTP URL [http://www.example.com:/some_path] 50 │ OK │ Invalid HTTP URL [http://www.example.com:/some_path]; legacy 51 │ OK │ Invalid HTTP URL [http://www.example.com:999999/some_path] 52 │ OK │ Invalid HTTP URL [http://www.example.com:999999/some_path]; legacy 53 │ OK │ Invalid HTTP URL [http://www.example.com:abc/some_path] 54 │ OK │ Invalid HTTP URL [http://www.example.com:abc/some_path]; legacy 55 │ OK │ Domain name, "port" parameter is set [www.example.com,,999999] 56 │ OK │ Domain name, "port" parameter is set [www.example.com,,abc] 57 │ OK │ HTTPS URL [https://www.example.com] 58 │ OK │ HTTPS URL [https://www.example.com]; legacy 59 │ OK │ Invalid URL [www.example.com:/some_path] 60 │ OK │ Invalid URL [www.example.com:/some_path]; legacy 61 │ OK │ HTTP URL [http://www.example.com:80/some_path] 62 │ OK │ HTTP URL [ hTtP://www.example.com] 63 │ OK │ Invalid HTTP URL ["http://::1]:80/trunk"] 64 │ OK │ Invalid HTTP URL ["http://::1]:80/trunk"]; legacy 65 │ OK │ URL [www.example.com#some_fragment] 66 │ OK │ URL [www.example.com/some_path#some_fragment] 67 │ OK │ URL [www.example.com/#] 68 │ OK │ URL [www.example.com#] 69 │ OK │ URL [www.example.com/doodle:443#some_:443fragment:443] 70 │ OK │ URL [http://пример.рус/files/docs/] 71 │ OK │ Domain, "path" parameter is set [пример.рус,/files/docs/] 72 │ OK │ Invalid HTTP URL [http://#fragment] 73 │ OK │ Invalid HTTP URL [http://#fragment]; legacy 74 │ OK │ URL ["[::1]/server-status"] 75 │ OK │ URL [scheme:path:without:authority] 76 │ OK │ URL [www.example.com:80#fragmentftp://www.example.com/] 77 │ OK │ URL [www.example.com#ftp://www.example.com/] 78 │ OK │ URL [www.example.com:80?fragmentftp://www.example.com/] 79 │ OK │ URL [www.example.com?ftp://www.example.com/] 80 │ OK │ HTTP URL [ http://localhost?a=b] 81 │ OK │ Hostname, "path" parameter is set [ localhost,?a=b] 82 │ OK │ Invalid URL [@user:pass/index.html] 83 │ OK │ Invalid URL [@user:pass/index.html]; legacy 84 │ OK │ Invalid HTTP URL [http://user:pass@] 85 │ OK │ Invalid HTTP URL [http://user:pass@]; legacy 86 │ OK │ Invalid HTTP URL [http://user:pass@/index.html] 87 │ OK │ Invalid HTTP URL [http://user:pass@/index.html]; legacy 88 │ OK │ Invalid URL [www.example.com://] 89 │ OK │ Invalid URL [://www.example.com] 90 │ OK │ Invalid URL [www.example.com:] 91 │ OK │ Invalid URL [www.example.com:]; legacy 92 │ OK │ HTTP URL [http://www.example.com?] 93 │ OK │ URL [www.example.com/user@info] 94 │ OK │ URL [www.example.com?user@info] 95 │ OK │ Invalid URL [://] 96 │ OK │ Invalid HTTP URL [http://] 97 │ OK │ Invalid HTTP URL [http://]; legacy 98 │ OK │ Invalid URL HTTP [http:// ] 99 │ OK │ Hostname [http] 100 │ OK │ Invalid URL ["[]"] 101 │ OK │ Invalid URL ["[]"]; legacy 102 │ OK │ Invalid URL ["["] 103 │ OK │ Invalid URL ["["]; legacy 104 │ OK │ Invalid URL ["]"] 105 │ OK │ Invalid URL [/] 106 │ OK │ Invalid URL [/]; legacy 107 │ OK │ Invalid URL [:] 108 │ OK │ Invalid URL [:]; legacy 109 │ OK │ Invalid URL [@] 110 │ OK │ Invalid URL [@]; legacy 111 │ OK │ Invalid URL [#] 112 │ OK │ Invalid URL [#]; legacy 113 │ OK │ Invalid URL [?] 114 │ OK │ Invalid URL [?]; legacy 115 │ OK │ Hostname [a] 116 │ OK │ Invalid URL [:80] 117 │ OK │ Invalid URL [:80]; legacy 118 │ OK │ Invalid URL [:80/?x=1] 119 │ OK │ Invalid URL [:80/?x=1]; legacy ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── KERNEL_MAXFILES ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ successfully read 1 │ OK │ unsuccessfully read ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── KERNEL_MAXPROC ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ successfully read 1 │ OK │ unsuccessfully read ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── NET_IF_DISCOVERY ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ parse file /proc/net/dev 1 │ OK │ ignore invalid entries in /proc/net/dev 2 │ OK │ invalid /proc/net/dev content 3 │ OK │ missing /proc/net/dev file ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── NET_IF_IN ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ #1.1 successfully read 'bytes' 1 │ OK │ #1.2 successfully read 'packets' 2 │ OK │ #1.3 successfully read 'errors' 3 │ OK │ #1.4 successfully read 'dropped' 4 │ OK │ #1.5 successfully read 'overruns' 5 │ OK │ #1.6 successfully read 'frame' 6 │ OK │ #1.7 successfully read 'compressed' 7 │ OK │ #1.8 successfully read 'multicast' 8 │ OK │ #2.1 unsuccessfully read 'Too many parameters.' 9 │ OK │ #2.2 unsuccessfully read 'Cannot find information' 10 │ OK │ #2.3 unsuccessfully read 'Invalid second parameter.' ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── NET_IF_OUT ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ #1.1 successfully read 'bytes' 1 │ OK │ #1.2 successfully read 'packets' 2 │ OK │ #1.3 successfully read 'errors' 3 │ OK │ #1.4 successfully read 'dropped' 4 │ OK │ #1.5 successfully read 'overruns' 5 │ OK │ #1.6 successfully read 'colls' 6 │ OK │ #1.7 successfully read 'carrier' 7 │ OK │ #1.8 successfully read 'compressed' 8 │ OK │ #2.1 unsuccessfully read 'Too many parameters.' 9 │ OK │ #2.2 unsuccessfully read 'Cannot find information' 10 │ OK │ #2.3 unsuccessfully read 'Invalid second parameter.' ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── NET_IF_TOTAL ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ #1.1 successfully read 'bytes' 1 │ OK │ #1.2 successfully read 'packets' 2 │ OK │ #1.3 successfully read 'errors' 3 │ OK │ #1.4 successfully read 'dropped' 4 │ OK │ #1.5 successfully read 'overruns' 5 │ OK │ #1.6 successfully read 'compressed' 6 │ OK │ #2.1 unsuccessfully read 'Too many parameters.' 7 │ OK │ #2.2 unsuccessfully read 'Cannot find information' 8 │ OK │ #2.3 unsuccessfully read 'Invalid second parameter.' ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── SYSTEM_BOOTTIME ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ no /proc/stat file 1 │ OK │ /proc/stat file without btime 2 │ OK │ /proc/stat file with invalid format of btime 3 │ OK │ valid /proc/stat file ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── SYSTEM_CPU_INTR ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ system cpu interruptions correct read 1 │ OK │ system cpu interruptions correct read of max value 2 │ OK │ system cpu interruptions missing ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── SYSTEM_CPU_SWITCHES ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ missing /proc/stat file 1 │ OK │ empty /proc/stat file 2 │ OK │ ctxt-line not found in /proc/stat file 3 │ OK │ valid /proc/stat file ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── SYSTEM_HW_CHASSIS ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ #1.1 successfully read 'vendor' 1 │ OK │ #1.2 successfully read 'vendor' 2 │ OK │ #1.3 successfully read 'vendor' 3 │ OK │ #1.4 successfully read 'vendor' 4 │ OK │ #1.5 successfully read 'vendor' 5 │ OK │ #1.6 successfully read 'vendor' 6 │ OK │ #2.1 successfully read 'model' 7 │ OK │ #3.1 successfully read 'serial' 8 │ OK │ #4.1 successfully read 'full' 9 │ OK │ #2.1 unsuccessfully read 'type' 10 │ OK │ #2.2 unsuccessfully read 11 │ OK │ #3 File length bigger than actual fragment length 12 │ OK │ #4 File length smaller than actual fragment length 13 │ OK │ #5 File length 0 while actual frament length is bigger 14 │ OK │ #6 Fragment is 0 length while file length is bigger ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── VFS_FS_DISCOVERY ─────┬─────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0 │ OK │ parse file /proc/mounts 1 │ OK │ ignore invalid entries in /proc/mounts 2 │ OK │ invalid /proc/mounts content 3 │ OK │ missing /proc/mounts file ─────┴─────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ──────────────────────────────────────┬───────────┬─────────┬────────┬──────────┬─────── Test suite │ Succeeded │ Skipped │ Errors │ Failures │ Time ──────────────────────────────────────┼───────────┼─────────┼────────┼──────────┼─────── evaluate │ 316 │ 0 │ 0 │ 0 │ 2.16 evaluate_unknown │ 8 │ 0 │ 0 │ 0 │ 0.05 queue │ 13 │ 0 │ 0 │ 0 │ 0.10 calculate_item_nextcheck │ 23 │ 0 │ 0 │ 0 │ 0.17 calculate_item_nextcheck_unreachable │ 9 │ 0 │ 0 │ 0 │ 0.06 convert_to_utf8 │ 13 │ 0 │ 0 │ 0 │ 0.08 is_double │ 114 │ 0 │ 0 │ 0 │ 0.74 is_double_suffix │ 85 │ 0 │ 0 │ 0 │ 0.57 parse_key │ 43 │ 0 │ 0 │ 0 │ 0.29 replace_key_params_dyn │ 43 │ 0 │ 0 │ 0 │ 0.52 zbx_dyn_escape_string │ 2 │ 0 │ 0 │ 0 │ 0.01 zbx_function_find │ 61 │ 0 │ 0 │ 0 │ 0.37 zbx_function_get_param_dyn │ 22 │ 0 │ 0 │ 0 │ 0.15 zbx_interval_preproc │ 28 │ 0 │ 0 │ 0 │ 0.20 zbx_str_extract │ 11 │ 0 │ 0 │ 0 │ 0.07 zbx_trim_float │ 49 │ 0 │ 0 │ 0 │ 0.33 zbx_trim_integer │ 49 │ 0 │ 0 │ 0 │ 0.30 zbx_truncate_itemkey │ 38 │ 0 │ 0 │ 0 │ 0.23 zbx_truncate_value │ 14 │ 0 │ 0 │ 0 │ 0.09 zbx_validate_interval │ 110 │ 0 │ 0 │ 0 │ 0.70 zbx_variant_compare │ 40 │ 0 │ 0 │ 0 │ 0.29 zbx_token_find │ 53 │ 0 │ 0 │ 0 │ 0.38 zbx_user_macro_parse │ 30 │ 0 │ 0 │ 0 │ 0.20 zbx_tcp_check_allowed_peers │ 60 │ 0 │ 0 │ 0 │ 0.41 zbx_tcp_check_allowed_peers_ipv4 │ 0 │ 12 │ 0 │ 0 │ 0.00 zbx_tcp_recv_ext │ 32 │ 0 │ 0 │ 0 │ 0.24 zbx_tcp_recv_raw_ext │ 8 │ 0 │ 0 │ 0 │ 0.06 zbx_tcp_recv_ext_zlib │ 5 │ 0 │ 0 │ 0 │ 0.04 parse_cfg_file │ 5 │ 0 │ 0 │ 0 │ 0.04 dc_check_maintenance_period │ 44 │ 0 │ 0 │ 0 │ 0.64 dc_expand_user_macros_in_func_params │ 15 │ 0 │ 0 │ 0 │ 0.24 dc_maintenance_match_tags │ 29 │ 0 │ 0 │ 0 │ 0.44 zbx_vc_add_values │ 18 │ 0 │ 0 │ 0 │ 0.13 zbx_vc_get_value │ 3 │ 0 │ 0 │ 0 │ 0.02 zbx_vc_get_values │ 59 │ 0 │ 0 │ 0 │ 0.41 dc_expand_user_macros_in_calcitem │ 9 │ 0 │ 0 │ 0 │ 0.13 dc_expand_user_macros_in_expression │ 21 │ 0 │ 0 │ 0 │ 0.31 dc_item_poller_type_update │ 2 │ 0 │ 0 │ 0 │ 0.05 is_item_processed_by_server │ 53 │ 0 │ 0 │ 0 │ 0.79 DBadd_condition_alloc │ 11 │ 0 │ 0 │ 0 │ 0.29 DBselect_uint64 │ 4 │ 0 │ 0 │ 0 │ 0.05 zbx_history_get_values │ 11 │ 0 │ 0 │ 0 │ 0.15 zbx_json_decodevalue │ 46 │ 0 │ 0 │ 0 │ 0.34 zbx_json_decodevalue_dyn │ 46 │ 0 │ 0 │ 0 │ 0.35 zbx_json_open_path │ 53 │ 0 │ 0 │ 0 │ 0.37 zbx_jsonpath_compile │ 125 │ 0 │ 0 │ 0 │ 0.87 zbx_jsonpath_query │ 79 │ 0 │ 0 │ 0 │ 0.52 prometheus_filter_init │ 40 │ 0 │ 0 │ 0 │ 0.24 prometheus_parse_row │ 22 │ 0 │ 0 │ 0 │ 0.14 zbx_prometheus_to_json │ 104 │ 0 │ 0 │ 0 │ 0.69 zbx_prometheus_pattern │ 147 │ 0 │ 0 │ 0 │ 1.02 wildcard_match │ 12 │ 0 │ 0 │ 0 │ 0.08 evaluate_function │ 75 │ 0 │ 0 │ 1 │ 1.18 get_trigger_expression_constant │ 27 │ 0 │ 0 │ 0 │ 0.43 substitute_lld_macros │ 20 │ 0 │ 0 │ 0 │ 0.31 check_key_access_rules │ 26 │ 0 │ 0 │ 0 │ 0.33 parse_item_key │ 44 │ 0 │ 0 │ 0 │ 0.64 process │ 16 │ 0 │ 0 │ 0 │ 0.22 item_preproc_csv_to_json │ 58 │ 0 │ 0 │ 0 │ 0.89 item_preproc_xpath │ 13 │ 0 │ 0 │ 0 │ 0.20 zbx_item_preproc │ 159 │ 0 │ 0 │ 0 │ 2.54 zbx_trapper_preproc_test_run │ 33 │ 0 │ 0 │ 0 │ 0.46 SYSTEM_LOCALTIME │ 6 │ 0 │ 0 │ 0 │ 0.08 VFS_FILE_EXISTS │ 10 │ 0 │ 0 │ 0 │ 0.13 WEB_PAGE_GET │ 120 │ 0 │ 0 │ 0 │ 1.54 KERNEL_MAXFILES │ 2 │ 0 │ 0 │ 0 │ 0.03 KERNEL_MAXPROC │ 2 │ 0 │ 0 │ 0 │ 0.02 NET_IF_DISCOVERY │ 4 │ 0 │ 0 │ 0 │ 0.06 NET_IF_IN │ 11 │ 0 │ 0 │ 0 │ 0.13 NET_IF_OUT │ 11 │ 0 │ 0 │ 0 │ 0.16 NET_IF_TOTAL │ 9 │ 0 │ 0 │ 0 │ 0.12 SYSTEM_BOOTTIME │ 4 │ 0 │ 0 │ 0 │ 0.06 SYSTEM_CPU_INTR │ 3 │ 0 │ 0 │ 0 │ 0.04 SYSTEM_CPU_SWITCHES │ 4 │ 0 │ 0 │ 0 │ 0.05 SYSTEM_HW_CHASSIS │ 15 │ 0 │ 0 │ 0 │ 0.18 VFS_FS_DISCOVERY │ 4 │ 0 │ 0 │ 0 │ 0.06 ──────────────────────────────────────┼───────────┼─────────┼────────┼──────────┼─────── Test suite │ Succeeded │ Skipped │ Errors │ Failures │ Time ──────────────────────────────────────┼───────────┼─────────┼────────┼──────────┼─────── Total: │ 2913 │ 12 │ 0 │ 1 │ 26.97 ──────────────────────────────────────┴───────────┴─────────┴────────┴──────────┴───────