@@ -16,22 +16,29 @@ open Stdext
1616open OUnit
1717open Test_highlevel
1818
19+ let firmware_type_printer v =
20+ v |> Rpcmarshal. marshal Xenops_types.Vm. typ_of_firmware_type
21+ |> Jsonrpc. to_string
22+
23+ let uefi = Xenops_types.Vm. Uefi Xenops_types.Nvram_uefi_variables. default_t
24+
1925module SanityCheck = Generic. Make (struct
2026 module Io = struct
21- type input_t = ((string * string ) list * bool * int64 * int64 * [ `hvm | `pv | `pv_in_pvh ])
27+ type input_t = ((string * string ) list * Xenops_types.Vm .firmware_type option * bool * int64 * int64 * [ `hvm | `pv | `pv_in_pvh ])
2228 type output_t = (exn , (string * string ) list ) Either .t
2329
24- let string_of_input_t (platformdata , filter , vcpu_max , vcpu_startup , domain_type ) =
25- Printf. sprintf " (platformdata = %s, filter_out_unknowns = %b, vcpu_max = %Ld,
30+ let string_of_input_t (platformdata , firmware , filter , vcpu_max , vcpu_startup , domain_type ) =
31+ Printf. sprintf " (platformdata = %s, firmware = %s, filter_out_unknowns = %b, vcpu_max = %Ld,
2632 vcpu_at_startup = %Ld, domain_type = %s)"
2733 (platformdata |> Test_printers. (assoc_list string string ))
34+ (firmware |> Test_printers. option firmware_type_printer)
2835 (filter) (vcpu_max) (vcpu_startup) (Record_util. domain_type_to_string domain_type)
2936
3037 let string_of_output_t = Test_printers. (either exn (assoc_list string string ))
3138 end
3239
33- let transform (platformdata , filter_out_unknowns , vcpu_max , vcpu_at_startup , domain_type ) =
34- try Either. Right (Vm_platform. sanity_check ~platformdata ~vcpu_max
40+ let transform (platformdata , firmware , filter_out_unknowns , vcpu_max , vcpu_at_startup , domain_type ) =
41+ try Either. Right (Vm_platform. sanity_check ~platformdata ?firmware ~vcpu_max
3542 ~vcpu_at_startup ~domain_type ~filter_out_unknowns )
3643 with e -> Either. Left e
3744
@@ -40,33 +47,38 @@ module SanityCheck = Generic.Make(struct
4047 " usb" , " true" ;
4148 " usb_tablet" , " true" ;
4249 ] in
50+ let make_firmware_ok dm firmware =
51+ (([" device-model" , dm], firmware, false , 0L , 0L , `hvm ),
52+ Either. Right (usb_defaults @ [" device-model" , dm]))
53+ in
54+ let open Xenops_interface.Vm in
4355 [
4456 (* Check that we can filter out unknown platform flags. *)
4557 (([
4658 " nonsense" , " abc" ;
4759 " pae" , " true" ;
4860 " whatever" , " def" ;
4961 " viridian" , " true" ;
50- ], true , 0L , 0L , `pv ),
62+ ], None , true , 0L , 0L , `pv ),
5163 Either. Right (usb_defaults @
5264 [
5365 " pae" , " true" ;
5466 " viridian" , " true" ;
5567 ]));
5668 (* Check that usb and usb_tablet are turned on by default. *)
57- (([] , false , 0L , 0L , `pv ),
69+ (([] , None , false , 0L , 0L , `pv ),
5870 Either. Right (usb_defaults));
5971 (* Check that an invalid tsc_mode gets filtered out. *)
60- (([" tsc_mode" , " 17" ;], false , 0L , 0L , `pv ),
72+ (([" tsc_mode" , " 17" ;], None , false , 0L , 0L , `pv ),
6173 Either. right (usb_defaults));
6274 (* Check that an invalid parallel port gets filtered out. *)
63- (([" parallel" , " /dev/random" ], false , 0L , 0L , `pv ),
75+ (([" parallel" , " /dev/random" ], None , false , 0L , 0L , `pv ),
6476 Either. Right (usb_defaults));
6577 (* Check that we can't set usb_tablet to true if usb is false. *)
6678 (([
6779 " usb" , " false" ;
6880 " usb_tablet" , " true" ;
69- ], false , 0L , 0L , `pv ),
81+ ], None , false , 0L , 0L , `pv ),
7082 Either. Right ([
7183 " usb" , " false" ;
7284 " usb_tablet" , " false" ;
@@ -75,13 +87,13 @@ module SanityCheck = Generic.Make(struct
7587 (([
7688 " usb" , " false" ;
7789 " usb_tablet" , " false" ;
78- ], false , 0L , 0L , `pv ),
90+ ], None , false , 0L , 0L , `pv ),
7991 Either. Right ([
8092 " usb" , " false" ;
8193 " usb_tablet" , " false" ;
8294 ]));
8395 (* Check that we can disable the parallel port. *)
84- (([" parallel" , " none" ], false , 0L , 0L , `pv ),
96+ (([" parallel" , " none" ], None , false , 0L , 0L , `pv ),
8597 Either. Right (usb_defaults @
8698 [" parallel" , " none" ]));
8799 (* Check that a set of valid fields is unchanged (apart from
@@ -94,7 +106,7 @@ module SanityCheck = Generic.Make(struct
94106 " tsc_mode" , " 2" ;
95107 " viridian" , " true" ;
96108 " usb" , " true" ;
97- ], false , 0L , 0L , `pv ),
109+ ], None , false , 0L , 0L , `pv ),
98110 Either. Right ([
99111 " usb" , " true" ;
100112 " usb_tablet" , " false" ;
@@ -109,7 +121,7 @@ module SanityCheck = Generic.Make(struct
109121 " pae" , " true" ;
110122 " parallel" , " /dev/parport0" ;
111123 " tsc_mode" , " blah" ;
112- ], false , 0L , 0L , `pv ),
124+ ], None , false , 0L , 0L , `pv ),
113125 Either. Right (usb_defaults @
114126 [
115127 " pae" , " true" ;
@@ -118,33 +130,48 @@ module SanityCheck = Generic.Make(struct
118130 (* Check VCPUs configuration - hvm success scenario*)
119131 (([
120132 " cores-per-socket" , " 3" ;
121- ], false , 6L , 6L , `hvm ),
133+ ], None , false , 6L , 6L , `hvm ),
122134 Either. Right (usb_defaults @
123135 [
124136 " cores-per-socket" , " 3" ;
125137 ]));
126138 (* Check VCPUs configuration - pvm success scenario*)
127139 (([
128140 " cores-per-socket" , " 3" ;
129- ], false , 0L , 0L , `pv ),
141+ ], None , false , 0L , 0L , `pv ),
130142 Either. Right (usb_defaults @
131143 [
132144 " cores-per-socket" , " 3" ;
133145 ]));
134146 (* Check VCPUs configuration - hvm failure scenario*)
135147 (([
136148 " cores-per-socket" , " 4" ;
137- ], false , 6L , 6L , `hvm ),
149+ ], None , false , 6L , 6L , `hvm ),
138150 Either. Left (Api_errors. Server_error (Api_errors. invalid_value,
139151 [" platform:cores-per-socket" ;
140152 " VCPUs_max must be a multiple of this field" ])));
141153 (* Check VCPUs configuration - hvm failure scenario*)
142154 (([
143155 " cores-per-socket" , " abc" ;
144- ], false , 6L , 5L , `hvm ),
156+ ], None , false , 6L , 5L , `hvm ),
145157 Either. Left (Api_errors. Server_error (Api_errors. invalid_value,
146158 [" platform:cores-per-socket" ;
147159 " value = abc is not a valid int" ])));
160+
161+ (* Check BIOS configuration - qemu trad *)
162+ make_firmware_ok " qemu-trad" (Some Bios );
163+ make_firmware_ok " qemu-upstream" (Some Bios );
164+ make_firmware_ok " qemu-upstream-compat" (Some Bios );
165+
166+ (* Check UEFI configuration - qemu upstream *)
167+ make_firmware_ok " qemu-upstream" (Some uefi);
168+ make_firmware_ok " qemu-upstream-compat" (Some uefi);
169+
170+ (* Check UEFI configuration - qemu-trad incompatibility *)
171+ (([ " device-model" , " qemu-trad" ], Some uefi, false , 0L , 0L , `hvm ),
172+ Either. Left (Api_errors. Server_error (Api_errors. invalid_value,
173+ [" platform:device-model" ;
174+ " UEFI boot is not supported with qemu-trad" ])));
148175 ]
149176 end )
150177
0 commit comments