carlos / platform Public

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

Plain git — no account needed to clone.

Download

Download this file

1package hostbox
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7)
8
9func TestPlan14GenerationLaunchInventory(t *testing.T) {
10 for _, attack := range []string{"none", "unknown-field", "wrong-key", "oversize", "replaced-path", "missing-table"} {
11 t.Run(attack, func(t *testing.T) {
12 j, r := roleLaunchFixture(t)
13 if err := j.IntendUnit(t.Context(), r); err != nil {
14 t.Fatal(err)
15 }
16 switch attack {
17 case "unknown-field":
18 _, err := j.db.Exec("UPDATE launches SET body=json_set(body,'$.unknown',true)")
19 if err != nil {
20 t.Fatal(err)
21 }
22 case "wrong-key":
23 _, err := j.db.Exec("UPDATE launches SET identity='other'")
24 if err != nil {
25 t.Fatal(err)
26 }
27 case "oversize":
28 _, err := j.db.Exec("UPDATE launches SET body=zeroblob(1048577)")
29 if err != nil {
30 t.Fatal(err)
31 }
32 case "replaced-path":
33 if err := os.Rename(j.path, j.path+".old"); err != nil {
34 t.Fatal(err)
35 }
36 if err := os.WriteFile(j.path, []byte("replacement"), 0600); err != nil {
37 t.Fatal(err)
38 }
39 case "missing-table":
40 _, err := j.db.Exec("DROP TABLE launches")
41 if err != nil {
42 t.Fatal(err)
43 }
44 }
45 got, err := j.GenerationLaunches(t.Context())
46 if attack == "none" {
47 if err != nil || len(got) != 1 || len(got[0].Reservations) != 1 {
48 t.Fatalf("inventory: %+v %v", got, err)
49 }
50 } else if err == nil {
51 t.Fatal("incomplete inventory accepted")
52 }
53 })
54 }
55}
56
57func TestPlan14GenerationReaderDoesNotInitialize(t *testing.T) {
58 path := filepath.Join(t.TempDir(), "empty.db")
59 if err := os.WriteFile(path, nil, 0600); err != nil {
60 t.Fatal(err)
61 }
62 j, err := OpenGenerationLaunchReader(path)
63 if err != nil {
64 return
65 }
66 defer j.Close()
67 if _, err := j.GenerationLaunches(t.Context()); err == nil {
68 t.Fatal("missing schema was initialized as complete")
69 }
70 if info, err := os.Stat(path); err != nil || info.Size() != 0 {
71 t.Fatalf("reader changed empty database: %v %v", info, err)
72 }
73}
74