okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

Aly Raffaufrefactor(runtime): decouple core storage from work9dd3a56

main
1.4 KiB43 linesraw
1//// Concurrent revision updates must have exactly one winner.
2//// Two writes at one revision force the race that E2E cannot reliably order.
3//// Empty workspace scopes are rejected by HTTP admission before reaching SQL.
4
5import albedo/daemon/store
6import albedo/harness/extensions/work/ledger as work
7import gleam/erlang/process
8import gleam/option.{None}
9
10pub fn only_one_concurrent_edit_wins_test() -> Nil {
11  let assert Ok(store) = store.start(":memory:", "")
12  let assert Ok(_) = work.initialise(store)
13  let assert Ok(item) = work.create(store, "/cwd", "original", "", None)
14  let reply = process.new_subject()
15  let _ =
16    process.spawn_unlinked(fn() {
17      process.send(
18        reply,
19        work.update(store, "/cwd", work.Item(..item, title: "human")),
20      )
21    })
22  let _ =
23    process.spawn_unlinked(fn() {
24      process.send(
25        reply,
26        work.update(store, "/cwd", work.Item(..item, title: "agent")),
27      )
28    })
29  let assert Ok(a) = process.receive(reply, 5000)
30  let assert Ok(b) = process.receive(reply, 5000)
31  case a, b {
32    Ok(_), Error(work.Conflict) | Error(work.Conflict), Ok(_) -> Nil
33    _, _ -> panic as "exactly one edit must win"
34  }
35  store.close(store)
36}
37
38pub fn empty_workspace_is_not_a_ledger_scope_test() -> Nil {
39  let assert Ok(store) = store.start(":memory:", "")
40  let assert Ok(_) = work.initialise(store)
41  let assert Error(work.Invalid(_)) = work.list(store, "", 0, 10)
42  store.close(store)
43}