carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1//go:build linux
2
3package hostexec
4
5import (
6 "errors"
7 "os"
8 "path/filepath"
9 "testing"
10)
11
12func TestPlan9CheckLocalNeverCreatesMissingLocks(t *testing.T) {
13 for _, holdLifetime := range []bool{false, true} {
14 cfg, _, clock, _, _ := fixture(t)
15 cfg.Binding.ControllerID = "controller"
16 if holdLifetime {
17 unlock, err := tryAcquire(cfg.LockDir, cfg.Binding.Host)
18 if err != nil {
19 t.Fatal(err)
20 }
21 defer unlock()
22 }
23 before, err := os.ReadDir(cfg.LockDir)
24 if err != nil {
25 t.Fatal(err)
26 }
27 if err = CheckLocal(cfg.Guard.DataDir, cfg.Binding, clock, cfg.LockDir); err == nil {
28 t.Fatal("missing locks granted authority")
29 }
30 after, err := os.ReadDir(cfg.LockDir)
31 if err != nil {
32 t.Fatal(err)
33 }
34 if len(after) != len(before) {
35 t.Fatalf("probe created lock files: before=%v after=%v", before, after)
36 }
37 }
38}
39func TestPlan9CheckLocalDoesNotRepairLockModes(t *testing.T) {
40 cfg, _, clock, _, _ := fixture(t)
41 cfg.Binding.ControllerID = "controller"
42 path := filepath.Join(cfg.LockDir, cfg.Binding.Host+".lock")
43 if err := os.WriteFile(path, nil, 0600); err != nil {
44 t.Fatal(err)
45 }
46 if err := CheckLocal(cfg.Guard.DataDir, cfg.Binding, clock, cfg.LockDir); !errors.Is(err, ErrLost) {
47 t.Fatal(err)
48 }
49 info, err := os.Stat(path)
50 if err != nil {
51 t.Fatal(err)
52 }
53 if info.Mode().Perm() != 0600 {
54 t.Fatalf("reader changed lock mode to %o", info.Mode().Perm())
55 }
56}
57
58func TestPlan9CheckLocalExistingLiveControllerRemainsAdmitted(t *testing.T) {
59 cfg, _, clock, _, _ := fixture(t)
60 controller, err := Open(t.Context(), cfg)
61 if err != nil {
62 t.Fatal(err)
63 }
64 t.Cleanup(func() { closeController(t, controller) })
65 state := ready(t, controller)
66 if err = cfg.Guard.WithLocal(t.Context(), state.Host, func() error { return CheckLocal(cfg.Guard.DataDir, state.Binding, clock, cfg.LockDir) }); err != nil {
67 t.Fatal(err)
68 }
69}
70