generator: Allow individual tests to depend on daemon features.
authorRichard Jones <rjones@redhat.com>
Thu, 3 Jun 2010 13:31:58 +0000 (14:31 +0100)
committerRichard Jones <rjones@redhat.com>
Mon, 12 Jul 2010 07:32:34 +0000 (08:32 +0100)
Using IfAvailable "featurename" we allow individual tests to
only run if the feature is available in the daemon.

This will allow us to extend testing to a lot more optional
features such as NTFS.
(cherry picked from commit f9d08600c52dc0730e7dad8d9259b59e32aeece2)

src/generator.ml

index 3c4c8b1..f32e064 100755 (executable)
@@ -307,6 +307,9 @@ and test_prereq =
     (* As for 'If' but the test runs _unless_ the code returns true. *)
   | Unless of string
 
+    (* Run the test only if 'string' is available in the daemon. *)
+  | IfAvailable of string
+
 (* Some initial scenarios for testing. *)
 and test_init =
     (* Do nothing, block devices could contain random stuff including
@@ -6483,7 +6486,7 @@ is_available (const char *group)
     fun (_, _, _, _, tests, _, _) ->
       let tests = filter_map (
         function
-        | (_, (Always|If _|Unless _), test) -> Some test
+        | (_, (Always|If _|Unless _|IfAvailable _), test) -> Some test
         | (_, Disabled, _) -> None
       ) tests in
       let seq = List.concat (List.map seq_of_test tests) in
@@ -6689,7 +6692,7 @@ static int %s_skip (void)
 " test_name name (String.uppercase test_name) (String.uppercase name);
 
   (match prereq with
-   | Disabled | Always -> ()
+   | Disabled | Always | IfAvailable _ -> ()
    | If code | Unless code ->
        pr "static int %s_prereq (void)\n" test_name;
        pr "{\n";
@@ -6738,6 +6741,13 @@ static int %s (void)
        pr "  }\n";
        pr "\n";
        generate_one_test_body name i test_name init test;
+   | IfAvailable group ->
+       pr "  if (!is_available (\"%s\")) {\n" group;
+       pr "    printf (\"        %%s skipped (reason: %%s not available)\\n\", \"%s\", \"%s\");\n" test_name group;
+       pr "    return 0;\n";
+       pr "  }\n";
+       pr "\n";
+       generate_one_test_body name i test_name init test;
    | Always ->
        generate_one_test_body name i test_name init test
   );