- Timestamp:
- Aug 17, 2009, 9:52:16 PM (15 years ago)
- Branches:
- master, release-1.10, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
- Children:
- e30ed92
- Parents:
- a2b3289
- git-author:
- Nelson Elhage <nelhage@mit.edu> (08/17/09 21:51:29)
- git-committer:
- Nelson Elhage <nelhage@mit.edu> (08/17/09 21:52:16)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
filter.c
ra2b3289 r8bce750 263 263 if (f->name) owl_free(f->name); 264 264 } 265 266 /**************************************************************************/267 /************************* REGRESSION TESTS *******************************/268 /**************************************************************************/269 270 #ifdef OWL_INCLUDE_REG_TESTS271 272 int owl_filter_test_string(const char * filt, const owl_message *m, int shouldmatch) /* noproto */ {273 owl_filter f;274 int ok;275 int failed = 0;276 if(owl_filter_init_fromstring(&f, "test-filter", filt)) {277 printf("not ok can't parse %s\n", filt);278 failed = 1;279 goto out;280 }281 ok = owl_filter_message_match(&f, m);282 if((shouldmatch && !ok) || (!shouldmatch && ok)) {283 printf("not ok match %s (got %d, expected %d)\n", filt, ok, shouldmatch);284 failed = 1;285 }286 out:287 owl_filter_free(&f);288 if(!failed) {289 printf("ok %s %s\n", shouldmatch ? "matches" : "doesn't match", filt);290 }291 return failed;292 }293 294 295 #include "test.h"296 297 298 int owl_filter_regtest(void) {299 int numfailed=0;300 owl_message m;301 owl_filter f1, f2, f3, f4, f5;302 303 owl_list_create(&(g.filterlist));304 owl_message_init(&m);305 owl_message_set_type_zephyr(&m);306 owl_message_set_direction_in(&m);307 owl_message_set_class(&m, "owl");308 owl_message_set_instance(&m, "tester");309 owl_message_set_sender(&m, "owl-user");310 owl_message_set_recipient(&m, "joe");311 owl_message_set_attribute(&m, "foo", "bar");312 313 #define TEST_FILTER(f, e) do { \314 numtests++; \315 numfailed += owl_filter_test_string(f, &m, e); \316 } while(0)317 318 TEST_FILTER("true", 1);319 TEST_FILTER("false", 0);320 TEST_FILTER("( true )", 1);321 TEST_FILTER("not false", 1);322 TEST_FILTER("( true ) or ( false )", 1);323 TEST_FILTER("true and false", 0);324 TEST_FILTER("( true or true ) or ( ( false ) )", 1);325 326 TEST_FILTER("class owl", 1);327 TEST_FILTER("class ^owl$", 1);328 TEST_FILTER("instance test", 1);329 TEST_FILTER("instance ^test$", 0);330 TEST_FILTER("instance ^tester$", 1);331 332 TEST_FILTER("foo bar", 1);333 TEST_FILTER("class owl and instance tester", 1);334 TEST_FILTER("type ^zephyr$ and direction ^in$ and ( class ^owl$ or instance ^owl$ )", 1);335 336 /* Order of operations and precedence */337 TEST_FILTER("not true or false", 0);338 TEST_FILTER("true or true and false", 0);339 TEST_FILTER("true and true and false or true", 1);340 TEST_FILTER("false and false or true", 1);341 TEST_FILTER("true and false or false", 0);342 343 owl_filter_init_fromstring(&f1, "f1", "class owl");344 owl_global_add_filter(&g, &f1);345 TEST_FILTER("filter f1", 1);346 347 /* Test recursion prevention */348 FAIL_UNLESS("self reference", owl_filter_init_fromstring(&f2, "test", "filter test"));349 350 /* mutual recursion */351 owl_filter_init_fromstring(&f3, "f3", "filter f4");352 owl_global_add_filter(&g, &f3);353 FAIL_UNLESS("mutual recursion", owl_filter_init_fromstring(&f4, "f4", "filter f3"));354 355 /* support referencing a filter several times */356 FAIL_UNLESS("DAG", !owl_filter_init_fromstring(&f5, "dag", "filter f1 or filter f1"));357 358 return 0;359 }360 361 362 #endif /* OWL_INCLUDE_REG_TESTS */
Note: See TracChangeset
for help on using the changeset viewer.