Seppo.Social -> Seppo.mro.name
[Seppo.git] / test / t_job.ml
blobd6a3e6236301c19919c7d2b151c438e4d1da37ec
2 open Seppo_lib
4 type t_f = Csexp.t -> (unit, string) result Lwt.t option
6 let test_do_wait () =
7 let now = Ptime.epoch
8 and jitter = 0.0 in
9 Job.do_wait ~now ~jitter 1
10 |> Job.rfc3339
11 |> Assrt.equals_string __LOC__ "1970-01-01T000100Z";
12 Job.do_wait ~now ~jitter 10
13 |> Job.rfc3339
14 |> Assrt.equals_string __LOC__ "1970-01-01T170300Z";
15 Job.do_wait ~now ~jitter 13 (* maximum wait interval *)
16 |> Job.rfc3339
17 |> Assrt.equals_string __LOC__ "1970-01-06T163100Z";
18 Job.do_wait ~now ~jitter 14 (* maximum wait all interval summed up *)
19 |> Job.rfc3339
20 |> Assrt.equals_string __LOC__ "1970-01-12T090300Z"
22 let test_compute_fn () =
23 let now = Ptime.epoch
24 and jitter = 0. in
25 let now = Job.do_wait ~now ~jitter 10 |> Job.rfc3339
26 and nonce = "foo bar baz" |> Bytes.of_string |> Job.compute_nonce in
27 Job.compute_fn now 10 nonce
28 |> Assrt.equals_string __LOC__ "1970-01-01T170300Z.10.776976811.s"
30 let test_job () =
31 Logr.debug (fun m -> m "%s" "job_test.job");
32 let run_job_yes : t_f = function
33 | Csexp.Atom s ->
34 Logr.debug (fun m -> m "%s run_job_yes: %s" "job_test.job" s);
35 Some (Lwt.return (Ok ()))
36 | _ -> None in
37 let run_job_no _ =
38 Logr.debug (fun m -> m "%s run_job_no" "job_test.job");
39 None in
40 (* call functions from fkts with argument v until first return Some _ *)
41 let run_until_some (fkts : t_f list) (v : Csexp.t) =
42 fkts |> List.fold_left
43 (fun r fkt ->
44 match r with
45 | Some _ as r -> r (* we have a result, don't call more workers *)
46 | None -> fkt v
48 None
50 match "fil" ,
51 (Csexp.Atom "xyz")
52 |> run_until_some [run_job_no; run_job_no; run_job_yes; run_job_yes; run_job_no]
53 with
54 | _,None -> Lwt.return ()
55 | fn,Some x ->
56 let%lwt x = x in
57 (match x with
58 | Ok () ->
59 fn |> Assrt.equals_string __LOC__ "fil" |> Lwt.return
60 | Error x ->
61 x |> Assrt.equals_string __LOC__ "" |> Lwt.return
64 let test_jitter () =
65 let now = Ptime.epoch in
66 let jitter = 0.0 in
67 Job.do_wait ~now ~jitter 3 |> Job.rfc3339
68 |> Assrt.equals_string __LOC__ "1970-01-01T000700Z";
69 Job.do_wait ~now ~jitter 13 |> Job.rfc3339
70 |> Assrt.equals_string __LOC__ "1970-01-06T163100Z";
71 let jitter = -0.05 in
72 Job.do_wait ~now ~jitter 3 |> Job.rfc3339
73 |> Assrt.equals_string __LOC__ "1970-01-01T000639Z";
74 Job.do_wait ~now ~jitter 13 |> Job.rfc3339
75 |> Assrt.equals_string __LOC__ "1970-01-06T094127Z";
78 let () =
79 test_do_wait ();
80 test_compute_fn ();
81 test_jitter ();
82 Lwt_main.run (test_job ())