[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-API] [PATCH] quicktest fixes



# HG changeset patch
# User David Scott <dave.scott@xxxxxxxxxxxxx>
# Date 1265393525 0
# Node ID 6df3691a937f356c8d104eab4a08349da689b10f
# Parent  25ccf85b0d062d9f0c9edf5274b0c7e3b6f7ab02
CA-37090: fix a bug in the 'lifecycle' quicktest test and make it (and the very 
slow stop_using_these_vdis test) not run by default. This makes quicktest take 
6 minutes rather than 16 minutes.

Signed-off-by: David Scott <dave.scott@xxxxxxxxxxxxx>

diff -r 25ccf85b0d06 -r 6df3691a937f ocaml/xapi/quicktest.ml
--- a/ocaml/xapi/quicktest.ml   Thu Feb 04 18:42:33 2010 +0000
+++ b/ocaml/xapi/quicktest.ml   Fri Feb 05 18:12:05 2010 +0000
@@ -372,7 +372,10 @@
   | _ -> ()
 
 (* CP-831 *)
-let test_vhd_locking_hook test session_id vm =
+let test_vhd_locking_hook session_id vm =
+  let test = make_test "test vhd locking hook" 2 in
+  start test;
+  Client.VM.start !rpc session_id vm false false;
   (* Add a new VDI whose VBD is unplugged (so 2 plugged, 1 unplugged *)
   let vbds = Client.VM.get_VBDs !rpc session_id vm in
   let vdis = List.map (fun vbd -> Client.VBD.get_VDI !rpc session_id vbd) vbds 
in
@@ -412,7 +415,8 @@
     debug test (Printf.sprintf "lvhd-script-hook tool %.2f seconds; output 
was: %s" (Unix.gettimeofday () -. start') result);
   done;
   Thread.join t;
-  debug test (Printf.sprintf "Meanwhile background thread executed %d 
conflicting operations" !total_bg_ops)
+  debug test (Printf.sprintf "Meanwhile background thread executed %d 
conflicting operations" !total_bg_ops);
+  success test
 
 let powercycle_test session_id vm = 
   let test = make_test "Powercycling VM" 1 in
@@ -435,7 +439,6 @@
        *)
        debug test "Starting VM";
        Client.VM.start !rpc session_id vm false false;
-       test_vhd_locking_hook test session_id vm;
        delay ();
        debug test "Rebooting VM";
        Client.VM.clean_reboot !rpc session_id vm;
@@ -599,32 +602,39 @@
 let make_vif ~session_id ~vM ~network ~device = 
   Client.VIF.create ~rpc:!rpc ~session_id ~vM ~network ~mTU:1400L ~mAC:"" 
~device ~other_config:["promiscuous", "on"] ~qos_algorithm_type:"" 
~qos_algorithm_params:[] 
 
-let vm_powercycle_test s = 
+let with_debian s f = 
   try
     let (_: API.ref_VM) = find_template s debian_etch in
-    let test = make_test "Setting up VM for powercycle test" 0 in
+    let test = make_test "Setting up debian VM" 0 in
     start test;
     let debian = install_debian test s in
-    (* Try to add some VIFs *)
-    let (guest_installer_network: API.ref_network) = 
find_guest_installer_network s in
-    debug test (Printf.sprintf "Adding VIF to guest installer network (%s)" 
(Client.Network.get_uuid !rpc s guest_installer_network));
-    let (_: API.ref_VIF) = make_vif ~session_id:s ~vM:debian 
~network:guest_installer_network ~device:"0" in
-    begin match Client.PIF.get_all !rpc s with
-    | pif :: _ ->
-       let net = Client.PIF.get_network !rpc s pif in
-       debug test (Printf.sprintf "Adding VIF to physical network (%s)" 
(Client.Network.get_uuid !rpc s net));
-       let (_: API.ref_VIF) = make_vif ~session_id:s ~vM:debian ~network:net 
~device:"1" in
-       ()
-    | _ -> ()
-    end;
-    vbd_pause_unpause_test s debian;
-    powercycle_test s debian;
-       Quicktest_lifecycle.test s debian;
-    vm_uninstall test s debian;  
-    success test
+       f s debian;
+       vm_uninstall test s debian;
+       success test
   with Unable_to_find_suitable_debian_template ->
     (* SKIP *)
     ()
+
+let vm_powercycle_test s debian = 
+  let test = make_test "VM powercycle test" 1 in
+  start test;
+  (* Try to add some VIFs *)
+  let (guest_installer_network: API.ref_network) = 
find_guest_installer_network s in
+  debug test (Printf.sprintf "Adding VIF to guest installer network (%s)" 
(Client.Network.get_uuid !rpc s guest_installer_network));
+  let (_: API.ref_VIF) = make_vif ~session_id:s ~vM:debian 
~network:guest_installer_network ~device:"0" in
+  begin match Client.PIF.get_all !rpc s with
+  | pif :: _ ->
+               let net = Client.PIF.get_network !rpc s pif in
+               debug test (Printf.sprintf "Adding VIF to physical network 
(%s)" (Client.Network.get_uuid !rpc s net));
+               let (_: API.ref_VIF) = make_vif ~session_id:s ~vM:debian 
~network:net ~device:"1" in
+               ()
+  | _ -> ()
+  end;
+  vbd_pause_unpause_test s debian;
+  powercycle_test s debian;
+  success test
+
+
 
 let squeeze_test () = 
   let test = make_test "Memory squeezer tests" 0 in
@@ -635,11 +645,13 @@
   else failed test "one or more scenarios failed"
 
 let _ =
+  let all_tests = [ "storage"; "vm-placement"; "vm-memory-constraints"; 
"encodings"; "http"; "event"; "vdi"; "async"; "import"; "powercycle"; 
"squeezing"; "lifecycle"; "vhd" ] in
+  let default_tests = List.filter (fun x -> not(List.mem x [ "lifecycle"; 
"vhd" ])) all_tests in
 
-  let possible_tests = [ "storage"; "vm-placement"; "vm-memory-constraints"; 
"encodings"; "http"; "event"; "vdi"; "async"; "import"; "powercycle"; 
"squeezing" ] in
-  let only_this_test = ref "" in (* default is run everything *)
+  let tests_to_run = ref default_tests in (* default is everything *)
   Arg.parse 
-    [ "-single", Arg.Set_string only_this_test, Printf.sprintf "Only run one 
test (possibilities are %s)" (String.concat ", " possible_tests) ;
+    [ "-single", Arg.String (fun x -> tests_to_run := [ x ]), Printf.sprintf 
"Only run one test (possibilities are %s)" (String.concat ", " all_tests) ;
+         "-all", Arg.Unit (fun () -> tests_to_run := all_tests), 
Printf.sprintf "Run all tests (%s)" (String.concat ", " all_tests);
       "-nocolour", Arg.Clear Quicktest_common.use_colour, "Don't use colour in 
the output" ]
     (fun x -> match !host, !username, !password with
      | "", _, _ -> host := x; rpc := rpc_remote; using_unix_domain_socket := 
false;
@@ -651,8 +663,8 @@
   if !username = "" then username := "root";
   
   let maybe_run_test name f = 
-    assert (List.mem name possible_tests);
-    if !only_this_test = "" || !only_this_test = name then f () in
+    assert (List.mem name all_tests);
+       if List.mem name !tests_to_run then f () in
 
   Stunnel.init_stunnel_path ();
   let s = init_session !username !password in
@@ -669,7 +681,10 @@
          maybe_run_test "vdi" (fun () -> vdi_test s);
          maybe_run_test "async" (fun () -> async_test s);
          maybe_run_test "import" (fun () -> import_export_test s);
-         maybe_run_test "powercycle" (fun () -> vm_powercycle_test s);
+         maybe_run_test "vhd" (fun () -> with_debian s test_vhd_locking_hook);
+         maybe_run_test "powercycle" (fun () -> with_debian s 
vm_powercycle_test);
+         maybe_run_test "lifecycle" (fun () -> with_debian s 
Quicktest_lifecycle.test);
+
        with
        | Api_errors.Server_error (a,b) ->
            output_string stderr (Printf.sprintf "%s: %s" a (String.concat "," 
b));
diff -r 25ccf85b0d06 -r 6df3691a937f ocaml/xapi/quicktest_common.ml
--- a/ocaml/xapi/quicktest_common.ml    Thu Feb 04 18:42:33 2010 +0000
+++ b/ocaml/xapi/quicktest_common.ml    Fri Feb 05 18:12:05 2010 +0000
@@ -93,6 +93,8 @@
 let make_test name indent = { name = name; indent = indent; status = Pending }
 
 let rec failed (test: test_description) msg = 
+  if not (Hashtbl.mem all_tests test.name)
+  then failwith (Printf.sprintf "Test not started: %s" test.name);
   if Hashtbl.mem all_tests test.name then Hashtbl.remove all_tests test.name;
   test.status <- Failed;
   debug test msg;
@@ -119,6 +121,9 @@
   flush stdout
 
 let success (test: test_description) = 
+  if not (Hashtbl.mem all_tests test.name)
+  then failwith (Printf.sprintf "Test not started: %s" test.name);
+
   if Hashtbl.mem all_tests test.name then Hashtbl.remove all_tests test.name;
   if test.status = Pending then begin
     incr total_passed;
diff -r 25ccf85b0d06 -r 6df3691a937f ocaml/xapi/quicktest_lifecycle.ml
--- a/ocaml/xapi/quicktest_lifecycle.ml Thu Feb 04 18:42:33 2010 +0000
+++ b/ocaml/xapi/quicktest_lifecycle.ml Fri Feb 05 18:12:05 2010 +0000
@@ -150,7 +150,12 @@
                                           | Internal_halt -> Xc.Halt
                                           | Internal_crash -> Xc.Crash
                                           | Internal_suspend -> Xc.Suspend in
-                                        Xc.with_intf (fun xc -> 
Xc.domain_shutdown xc (Int64.to_int domid) reason)
+                                        begin 
+                                          try
+                                                Xc.with_intf (fun xc -> 
Xc.domain_shutdown xc (Int64.to_int domid) reason)
+                                          with e ->
+                                                  debug t (Printf.sprintf 
"Ignoring exception: %s" (Printexc.to_string e))
+                                        end
                           | { api = Some x; parallel_op = Some y } ->
                                         let reason = match y with
                                           | Internal_reboot -> "reboot"
3 files changed, 54 insertions(+), 29 deletions(-)
ocaml/xapi/quicktest.ml           |   71 ++++++++++++++++++++++---------------
ocaml/xapi/quicktest_common.ml    |    5 ++
ocaml/xapi/quicktest_lifecycle.ml |    7 +++


Attachment: xen-api.hg.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.