tests: Break monolithic classifier test into subtests.
authorBen Pfaff <blp@nicira.com>
Wed, 26 May 2010 19:48:32 +0000 (12:48 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 26 May 2010 22:23:58 +0000 (15:23 -0700)
This makes it easier to see which tests are taking up a lot of time, and
to see which ones actually fail if any of them do.

tests/automake.mk
tests/classifier.at [new file with mode: 0644]
tests/library.at
tests/test-classifier.c
tests/testsuite.at

index ebf2a018c438f8791471d5725e7cfa157035e8b0..51205d9b86a07b9933262e2a468055a91afeabc3 100644 (file)
@@ -8,6 +8,7 @@ TESTSUITE_AT = \
        tests/testsuite.at \
        tests/ovsdb-macros.at \
        tests/library.at \
+       tests/classifier.at \
        tests/check-structs.at \
        tests/daemon.at \
        tests/vconn.at \
diff --git a/tests/classifier.at b/tests/classifier.at
new file mode 100644 (file)
index 0000000..f9e6953
--- /dev/null
@@ -0,0 +1,16 @@
+AT_BANNER([flow classifier unit tests])
+m4_foreach(
+  [testname],
+  [[empty],
+   [destroy-null],
+   [single-rule],
+   [rule-replacement],
+   [two-rules-in-one-bucket],
+   [two-rules-in-one-table],
+   [two-rules-in-different-tables],
+   [many-rules-in-one-bucket],
+   [many-rules-in-one-table],
+   [many-rules-in-different-tables]],
+  [AT_SETUP([flow classifier - m4_bpatsubst(testname, [-], [ ])])
+   AT_CHECK([test-classifier testname], [0], [], [])
+   AT_CLEANUP])])
index 0e408f04f64b06ec9c7e364659786096ccfba748..f9f97f14d24d57f12b7d90bcdddc825e1ab0f404 100644 (file)
@@ -10,11 +10,6 @@ AT_SETUP([test TCP/IP checksumming])
 AT_CHECK([test-csum], [0], [ignore])
 AT_CLEANUP
 
-AT_SETUP([test flow classifier])
-AT_KEYWORDS([slow])
-AT_CHECK([test-classifier], [0], [ignore])
-AT_CLEANUP
-
 AT_SETUP([test hash functions])
 AT_CHECK([test-hash], [0], [ignore])
 AT_CLEANUP
index c831559ba674b3cae08845b079c787609d34b472..a63b7cab3a94662a033aba9dbd85faed5327e5a9 100644 (file)
  */
 
 #include <config.h>
-#include <limits.h>
 #include "classifier.h"
 #include <errno.h>
 #include <limits.h>
+#include "command-line.h"
 #include "flow.h"
-#include <limits.h>
 #include "packets.h"
 
 #undef NDEBUG
@@ -487,7 +486,7 @@ shuffle(unsigned int *p, size_t n)
 \f
 /* Tests an empty classifier. */
 static void
-test_empty(void)
+test_empty(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     struct classifier cls;
     struct tcls tcls;
@@ -503,14 +502,14 @@ test_empty(void)
 
 /* Destroys a null classifier. */
 static void
-test_destroy_null(void)
+test_destroy_null(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     classifier_destroy(NULL);
 }
 
 /* Tests classification with one rule at a time. */
 static void
-test_single_rule(void)
+test_single_rule(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     unsigned int wc_fields;     /* Hilarious. */
 
@@ -548,7 +547,7 @@ test_single_rule(void)
 
 /* Tests replacing one rule by another. */
 static void
-test_rule_replacement(void)
+test_rule_replacement(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     unsigned int wc_fields;
 
@@ -599,7 +598,7 @@ random_wcf_in_table(int table, int seed)
 /* Tests classification with two rules at a time that fall into the same
  * bucket. */
 static void
-test_two_rules_in_one_bucket(void)
+test_two_rules_in_one_bucket(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     int table, rel_pri, wcf_pat, value_pat;
 
@@ -688,7 +687,7 @@ test_two_rules_in_one_bucket(void)
 /* Tests classification with two rules at a time that fall into the same
  * table but different buckets. */
 static void
-test_two_rules_in_one_table(void)
+test_two_rules_in_one_table(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     int table, rel_pri, wcf_pat;
 
@@ -764,7 +763,8 @@ test_two_rules_in_one_table(void)
 /* Tests classification with two rules at a time that fall into different
  * tables. */
 static void
-test_two_rules_in_different_tables(void)
+test_two_rules_in_different_tables(int argc OVS_UNUSED,
+                                   char *argv[] OVS_UNUSED)
 {
     int table1, table2, rel_pri, wcf_pat;
 
@@ -833,7 +833,7 @@ test_two_rules_in_different_tables(void)
 /* Tests classification with many rules at a time that fall into the same
  * bucket but have unique priorities (and various wildcards). */
 static void
-test_many_rules_in_one_bucket(void)
+test_many_rules_in_one_bucket(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     enum { MAX_RULES = 50 };
     int iteration, table;
@@ -877,7 +877,7 @@ test_many_rules_in_one_bucket(void)
 /* Tests classification with many rules at a time that fall into the same
  * table but random buckets. */
 static void
-test_many_rules_in_one_table(void)
+test_many_rules_in_one_table(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     enum { MAX_RULES = 50 };
     int iteration, table;
@@ -920,7 +920,8 @@ test_many_rules_in_one_table(void)
 /* Tests classification with many rules at a time that fall into random buckets
  * in random tables. */
 static void
-test_many_rules_in_different_tables(void)
+test_many_rules_in_different_tables(int argc OVS_UNUSED,
+                                    char *argv[] OVS_UNUSED)
 {
     enum { MAX_RULES = 50 };
     int iteration;
@@ -965,36 +966,32 @@ test_many_rules_in_different_tables(void)
             compare_classifiers(&cls, &tcls);
             free(rule);
         }
-        putchar('.');
-        fflush(stdout);
 
         destroy_classifier(&cls);
         tcls_destroy(&tcls);
     }
 }
 \f
-static void
-run_test(void (*function)(void))
-{
-    function();
-    putchar('.');
-    fflush(stdout);
-}
+static const struct command commands[] = {
+    {"empty", 0, 0, test_empty},
+    {"destroy-null", 0, 0, test_destroy_null},
+    {"single-rule", 0, 0, test_single_rule},
+    {"rule-replacement", 0, 0, test_rule_replacement},
+    {"two-rules-in-one-bucket", 0, 0, test_two_rules_in_one_bucket},
+    {"two-rules-in-one-table", 0, 0, test_two_rules_in_one_table},
+    {"two-rules-in-different-tables", 0, 0,
+     test_two_rules_in_different_tables},
+    {"many-rules-in-one-bucket", 0, 0, test_many_rules_in_one_bucket},
+    {"many-rules-in-one-table", 0, 0, test_many_rules_in_one_table},
+    {"many-rules-in-different-tables", 0, 0,
+     test_many_rules_in_different_tables},
+    {NULL, 0, 0, NULL},
+};
 
 int
-main(void)
+main(int argc, char *argv[])
 {
     init_values();
-    run_test(test_empty);
-    run_test(test_destroy_null);
-    run_test(test_single_rule);
-    run_test(test_rule_replacement);
-    run_test(test_two_rules_in_one_bucket);
-    run_test(test_two_rules_in_one_table);
-    run_test(test_two_rules_in_different_tables);
-    run_test(test_many_rules_in_one_bucket);
-    run_test(test_many_rules_in_one_table);
-    run_test(test_many_rules_in_different_tables);
-    putchar('\n');
+    run_command(argc - 1, argv + 1, commands);
     return 0;
 }
index f4e80cafe20fffe8ee34462213442d25f49bf6a2..5699e3c9731ac277eba537429a2449784890538a 100644 (file)
@@ -38,6 +38,7 @@ m4_define([OVS_WAIT_WHILE], [OVS_WAIT([if $1; then :; else exit 0; fi], [$2])])
 m4_include([tests/ovsdb-macros.at])
 
 m4_include([tests/library.at])
+m4_include([tests/classifier.at])
 m4_include([tests/check-structs.at])
 m4_include([tests/daemon.at])
 m4_include([tests/vconn.at])