Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ocaml/quicktest/quicktest.ml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ let () =
let suite =
[
("Quicktest_example", Quicktest_example.tests ())
; ("Quicktest_message", Quicktest_message.tests ())
; ("xenstore", Quicktest_xenstore.tests ())
; ("cbt", Quicktest_cbt.tests ())
; ("event", Quicktest_event.tests ())
Expand Down
73 changes: 73 additions & 0 deletions ocaml/quicktest/quicktest_message.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
module Message = Client.Client.Message

let rpc = Quicktest_args.rpc

module Testable = struct
let ref () =
let fmt = Fmt.of_to_string Ref.string_of in
Alcotest.testable fmt ( = )
end

let get_all_records_where_test rpc session_id () =
let with_api fn = fn ~rpc ~session_id in
let create_message = with_api Message.create in

let vm = List.hd (with_api Client.Client.VM.get_all) in
let vm_uuid = with_api Client.Client.VM.get_uuid ~self:vm in

let host = List.hd (with_api Client.Client.Host.get_all) in
let host_uuid = with_api Client.Client.Host.get_uuid ~self:host in

(* Create several different messages *)
let messages =
[
create_message ~name:"VM_EXPLODED" ~priority:100L ~cls:`VM
~obj_uuid:vm_uuid ~body:"body"
; create_message ~name:"HOST_EXPLODED" ~priority:100L ~cls:`Host
~obj_uuid:host_uuid ~body:"body"
; create_message ~name:"VM_DROWNED" ~priority:50L ~cls:`VM ~obj_uuid:vm_uuid
~body:"body"
]
in

let get_messages_where = with_api Message.get_all_records_where in

let queries =
[
(* query | is message expected in the list [bool ; bool ; bool] *)
({| field "name" = "VM_EXPLODED" |}, [true; false; false])
; ({| field "priority" = "100" |}, [true; true; false])
; ({| field "cls" = "VM" |}, [true; false; true])
; ({| field "cls" = "VM" and field "priority" = "50"|}, [false; false; true])
; ({| field "cls" = "VDI"|}, [false; false; false])
; ({| field "class" = "VM"|}, [false; false; false])
; ( {| field "cls" = "VM" or field "name" = "HOST_EXPLODED"|}
, [true; true; true]
)
]
in
let lists =
List.map
(fun (expr, expected) -> (expr, get_messages_where ~expr, expected))
queries
in

(* Check that filtering returns correct messages *)
let message_test msg list expected =
let list = List.map fst list in
List.iter2
(fun msg_ref expected ->
Alcotest.check' Alcotest.bool ~msg ~expected
~actual:(List.mem msg_ref list)
)
messages expected
in
List.iter (fun (msg, list, expected) -> message_test msg list expected) lists

let tests () =
let open Qt_filter in
[
[("Message.get_all_records_where test", `Quick, get_all_records_where_test)]
|> conn
]
|> List.concat
2 changes: 1 addition & 1 deletion quality-gate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
set -e

list-hd () {
N=277
N=279
LIST_HD=$(git grep -r --count 'List.hd' -- **/*.ml | cut -d ':' -f 2 | paste -sd+ - | bc)
if [ "$LIST_HD" -eq "$N" ]; then
echo "OK counted $LIST_HD List.hd usages"
Expand Down
Loading