oficina / docs Public

Clone
git clone https://amadan.net/oficina/docs

Plain git — no account needed to clone.

Download

Download this file

1package teamstate
2
3import (
4 "bytes"
5 "context"
6 "encoding/base64"
7 "path/filepath"
8 "strings"
9 "testing"
10
11 "amadan.net/oficina/home/roster"
12 "amadan.net/rastrillo/rastrillo/db"
13 "amadan.net/rastrillo/rastrillo/migrate"
14)
15
16func fixture(t *testing.T) *db.DB {
17 t.Helper()
18 d, e := db.Open(filepath.Join(t.TempDir(), "team.db"), nil)
19 if e != nil {
20 t.Fatal(e)
21 }
22 t.Cleanup(func() { d.Close() })
23 return d
24}
25func TestMarkerActivationAndImmutability(t *testing.T) {
26 d := fixture(t)
27 ctx := context.Background()
28 if _, yes, e := Required(ctx, d.Writer()); e != nil || yes {
29 t.Fatal("fresh DB requires team")
30 }
31 if _, e := migrate.Apply(ctx, d, Schema); e != nil {
32 t.Fatal(e)
33 }
34 if _, yes, e := Required(ctx, d.Writer()); e != nil || yes {
35 t.Fatal("schema alone activated mode")
36 }
37 b := base64.RawURLEncoding.EncodeToString(bytes.Repeat([]byte{1}, 32))
38 if e := Activate(ctx, d.Writer(), b); e != nil {
39 t.Fatal(e)
40 }
41 if got, yes, e := Required(ctx, d.Writer()); e != nil || !yes || got != b {
42 t.Fatal("marker missing")
43 }
44 if e := Activate(ctx, d.Writer(), b); e != nil {
45 t.Fatal("idempotent activation", e)
46 }
47 other := base64.RawURLEncoding.EncodeToString(bytes.Repeat([]byte{2}, 32))
48 if Activate(ctx, d.Writer(), other) != ErrRefused {
49 t.Fatal("binding changed")
50 }
51 for _, q := range []string{"DELETE FROM docs_team_required", "UPDATE docs_team_required SET bindings=bindings"} {
52 if _, e := d.Writer().Exec(q); e == nil {
53 t.Fatal("marker mutable")
54 }
55 }
56}
57func TestMalformedMarkerAndEvidenceFailure(t *testing.T) {
58 d := fixture(t)
59 ctx := context.Background()
60 if _, e := migrate.Apply(ctx, d, Schema); e != nil {
61 t.Fatal(e)
62 }
63 if _, e := d.Writer().Exec("INSERT INTO docs_team_required VALUES(1,?)", strings.Repeat("?", 43)); e != nil {
64 t.Fatal(e)
65 }
66 if _, _, e := Required(ctx, d.Writer()); e != ErrRefused {
67 t.Fatal("malformed marker accepted")
68 }
69 evidence := Evidence{DB: d.Writer()}
70 if _, e := evidence.Load(ctx); e != roster.ErrNoEvidence {
71 t.Fatal(e)
72 }
73 first := []byte("opaque sealed test envelope")
74 if e := evidence.Save(ctx, first); e != nil {
75 t.Fatal(e)
76 }
77 cancelled, cancel := context.WithCancel(ctx)
78 cancel()
79 if evidence.Save(cancelled, []byte("replacement")) == nil {
80 t.Fatal("cancelled replacement succeeded")
81 }
82 if evidence.Save(ctx, make([]byte, roster.EvidenceLimit+129)) != ErrRefused {
83 t.Fatal("oversize accepted")
84 }
85 got, e := evidence.Load(ctx)
86 if e != nil || !bytes.Equal(got, first) {
87 t.Fatal("failed write replaced evidence")
88 }
89}
90