/ test / lightspeed / ops_supervision_test.gleam
ops_supervision_test.gleam
 1  import gleeunit/should
 2  import lightspeed/ops/supervision
 3  
 4  pub fn default_plan_contains_required_children_test() {
 5    let plan = supervision.default_plan("lightspeed")
 6  
 7    plan
 8    |> supervision.validate
 9    |> should.equal(Ok(Nil))
10  
11    plan
12    |> supervision.child_ids
13    |> should.equal([
14      "session_registry",
15      "session_supervisor",
16      "transport_endpoint",
17      "metrics_reporter",
18    ])
19  }
20  
21  pub fn duplicate_child_ids_are_rejected_test() {
22    let plan =
23      supervision.Plan(
24        name: "lightspeed_supervisor",
25        strategy: supervision.OneForOne,
26        children: [
27          supervision.ChildSpec(
28            id: "session_registry",
29            module_name: "m1",
30            restart: supervision.Permanent,
31            shutdown_ms: 5000,
32          ),
33          supervision.ChildSpec(
34            id: "session_registry",
35            module_name: "m2",
36            restart: supervision.Permanent,
37            shutdown_ms: 5000,
38          ),
39        ],
40      )
41  
42    plan
43    |> supervision.validate
44    |> should.equal(Error(supervision.DuplicateChildId("session_registry")))
45  }
46  
47  pub fn missing_required_child_is_rejected_test() {
48    let plan =
49      supervision.Plan(
50        name: "lightspeed_supervisor",
51        strategy: supervision.OneForOne,
52        children: [
53          supervision.ChildSpec(
54            id: "session_registry",
55            module_name: "m1",
56            restart: supervision.Permanent,
57            shutdown_ms: 5000,
58          ),
59        ],
60      )
61  
62    plan
63    |> supervision.validate
64    |> should.equal(Error(supervision.MissingRequiredChild("session_supervisor")))
65  }