carlos / platform Public

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

Plain git — no account needed to clone.

Download

Download this file

1package release
2
3import (
4 "context"
5 "crypto/ed25519"
6 "testing"
7 "time"
8)
9
10func markerOn(t *testing.T, s Store, priv ed25519.PrivateKey, acct string) {
11 t.Helper()
12 if err := WriteDigestMarker(context.Background(), s, RootSigner(priv), acct, "test"); err != nil {
13 t.Fatalf("WriteDigestMarker: %v", err)
14 }
15}
16
17func TestDigestMarkerLifecycle(t *testing.T) {
18 s := NewDirStore(t.TempDir())
19 ctx := context.Background()
20 priv, pub := testKeys(t)
21 if m, err := ReadDigestMarker(ctx, s, pub, "bab"); m != nil || err != nil {
22 t.Fatalf("absent marker = %+v, %v; want nil, nil", m, err)
23 }
24 markerOn(t, s, priv, "bab")
25 m, err := ReadDigestMarker(ctx, s, pub, "bab")
26 if err != nil || m == nil || m.Account != "bab" || m.At.IsZero() {
27 t.Fatalf("marker = %+v, %v", m, err)
28 }
29 // Writing it again keeps the first time: moving it later would hide a
30 // straggler written in between.
31 time.Sleep(1100 * time.Millisecond)
32 markerOn(t, s, priv, "bab")
33 again, _ := ReadDigestMarker(ctx, s, pub, "bab")
34 if !again.At.Equal(m.At) {
35 t.Fatalf("a second write moved the marker from %s to %s", m.At, again.At)
36 }
37 if other, err := ReadDigestMarker(ctx, s, pub, "cdf"); other != nil || err != nil {
38 t.Fatalf("the marker is per account: %+v, %v", other, err)
39 }
40 if err := RemoveDigestMarker(ctx, s, "bab"); err != nil {
41 t.Fatal(err)
42 }
43 if m, err := ReadDigestMarker(ctx, s, pub, "bab"); m != nil || err != nil {
44 t.Fatalf("after removal = %+v, %v", m, err)
45 }
46 if err := RemoveDigestMarker(ctx, s, "bab"); err != nil {
47 t.Fatalf("removing an absent marker: %v", err)
48 }
49}
50
51func TestDigestMarkerIsRootOnly(t *testing.T) {
52 s := NewDirStore(t.TempDir())
53 ctx := context.Background()
54 root, pub := testKeys(t)
55 seed, grant, err := MintKeyGrant(root, "ci", []string{"canary"}, time.Hour)
56 if err != nil {
57 t.Fatal(err)
58 }
59 key, err := ParseSigningKey(seed, "test")
60 if err != nil {
61 t.Fatal(err)
62 }
63 sg, err := ScopedSigner(key, grant, pub)
64 if err != nil {
65 t.Fatal(err)
66 }
67 if err := WriteDigestMarker(ctx, s, sg, "bab", "ci"); err == nil {
68 t.Fatal("a scoped key wrote the marker")
69 }
70 // A marker signed by some other key is present but unverifiable: an
71 // error, never "absent".
72 other, _ := testKeys(t)
73 markerOn(t, s, other, "bab")
74 if m, err := ReadDigestMarker(ctx, s, pub, "bab"); m != nil || err == nil {
75 t.Fatalf("a foreign marker = %+v, %v; want an error", m, err)
76 }
77}
78