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 "bytes"
5 "os"
6 "path/filepath"
7 "strings"
8 "testing"
9)
10
11func TestPlan14Fix3RetainRunningPrevious(t *testing.T) {
12 for _, running := range []string{"v1", "v2", "v0", "../escape"} {
13 t.Run(running, func(t *testing.T) {
14 opt := t.TempDir()
15 host := "console.example"
16 for _, v := range []string{"v0", "v1", "v2", "v3"} {
17 if err := StageArtifact(opt, "bab", v, "console", []byte(v)); err != nil {
18 t.Fatal(err)
19 }
20 }
21 for _, v := range []string{"v1", "v2"} {
22 if err := PointLive(opt, host, "bab", v, "console"); err != nil {
23 t.Fatal(err)
24 }
25 }
26 err := PointLive(opt, host, "bab", "v3", "console", running)
27 live, e := LiveVersion(opt, host)
28 if e != nil {
29 t.Fatal(e)
30 }
31 previous, e := os.Readlink(filepath.Join(opt, "previous", host))
32 if e != nil {
33 t.Fatal(e)
34 }
35 if running == "v0" || running == "../escape" {
36 if err == nil || live != "v2" || previous != VersionPath(opt, "bab", "v1", "console") {
37 t.Fatal("unpointed build acquired authority", err, live, previous)
38 }
39 } else {
40 if err != nil || live != "v3" || previous != VersionPath(opt, "bab", running, "console") {
41 t.Fatal("running pointer lost", err, live, previous)
42 }
43 pins, err := LivePins(opt)
44 if err != nil || !pins[running] || !pins["v3"] {
45 t.Fatal(pins, err)
46 }
47 }
48 })
49 }
50}
51
52func TestPlan14Fix3OrdinaryFailureDoesNotClaimOutage(t *testing.T) {
53 for _, unit := range []string{"", "console.service"} {
54 t.Run(unit, func(t *testing.T) {
55 host := "console.example.com"
56 ctx, reg, store, pub, opt := startUnitFixture(t, host)
57 rt, err := reg.Get(host)
58 if err != nil {
59 t.Fatal(err)
60 }
61 rt.Unit = unit
62 if err := reg.Upsert(*rt); err != nil {
63 t.Fatal(err)
64 }
65 fail := func(string) error { return os.ErrPermission }
66 var output bytes.Buffer
67 withCapturedStdout(t, &output, func() {
68 if err := Pass(ctx, reg, store, pub, opt, fail, WithStartUnit(fail)); err != nil {
69 t.Fatal(err)
70 }
71 })
72 if !strings.Contains(output.String(), "could not start it") || strings.Contains(output.String(), "may be serving nothing") != (unit != "") {
73 t.Fatal(output.String())
74 }
75 })
76 }
77}
78