CFG_VER/APP_VER in the env file: invalid configs replaced, updates follow APP_VER (dev/stable/pin)
This commit is contained in:
@@ -43,7 +43,7 @@ func newFakeGitea(t *testing.T, tag string, assetContent []byte) *fakeGitea {
|
||||
sign := func() []byte { return ed25519.Sign(priv, f.asset) }
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("/api/v1/repos/o/r/releases/latest", func(w http.ResponseWriter, r *http.Request) {
|
||||
serveRelease := func(w http.ResponseWriter, r *http.Request) {
|
||||
assets := []map[string]string{
|
||||
{"name": "gpu-turnstile.exe", "browser_download_url": f.srv.URL + "/dl/exe"},
|
||||
{"name": "gpu-turnstile.exe.sha256", "browser_download_url": f.srv.URL + "/dl/sha"},
|
||||
@@ -52,7 +52,9 @@ func newFakeGitea(t *testing.T, tag string, assetContent []byte) *fakeGitea {
|
||||
assets = append(assets, map[string]string{"name": "gpu-turnstile.exe.sig", "browser_download_url": f.srv.URL + "/dl/sig"})
|
||||
}
|
||||
json.NewEncoder(w).Encode(map[string]any{"tag_name": f.tag, "assets": assets})
|
||||
})
|
||||
}
|
||||
mux.HandleFunc("/api/v1/repos/o/r/releases/latest", serveRelease)
|
||||
mux.HandleFunc("/api/v1/repos/o/r/releases/tags/"+f.tag, serveRelease)
|
||||
mux.HandleFunc("/dl/exe", func(w http.ResponseWriter, r *http.Request) { w.Write(f.asset) })
|
||||
mux.HandleFunc("/dl/sig", func(w http.ResponseWriter, r *http.Request) {
|
||||
sig := sign()
|
||||
@@ -73,6 +75,12 @@ func (f *fakeGitea) updater(version string) *Updater {
|
||||
return &Updater{Repo: f.srv.URL + "/o/r", Asset: "gpu-turnstile.exe", Version: version}
|
||||
}
|
||||
|
||||
func (f *fakeGitea) updaterDesired(version, desired string) *Updater {
|
||||
u := f.updater(version)
|
||||
u.Desired = desired
|
||||
return u
|
||||
}
|
||||
|
||||
func fakeExe(t *testing.T) string {
|
||||
t.Helper()
|
||||
exe := filepath.Join(t.TempDir(), "gpu-turnstile.exe")
|
||||
@@ -153,12 +161,61 @@ func TestCheckSkipsWithoutPublicKey(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckSkipsDevBuild(t *testing.T) {
|
||||
func TestCheckDevBuildGetsStable(t *testing.T) {
|
||||
// A dev binary cannot be compared; APP_VER=stable replaces it with the
|
||||
// latest release.
|
||||
f := newFakeGitea(t, "v9.9.9", []byte("new-binary"))
|
||||
withPublicKey(t, f.pubPEM)
|
||||
staged, err := f.updater("dev").Check(context.Background(), fakeExe(t))
|
||||
exe := fakeExe(t)
|
||||
staged, err := f.updater("dev").Check(context.Background(), exe)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !staged {
|
||||
t.Fatal("expected dev binary to be replaced by the latest release")
|
||||
}
|
||||
content, _ := os.ReadFile(exe)
|
||||
if string(content) != "new-binary" {
|
||||
t.Fatalf("exe content = %q", content)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckDesiredDevDisables(t *testing.T) {
|
||||
f := newFakeGitea(t, "v9.9.9", []byte("new-binary"))
|
||||
withPublicKey(t, f.pubPEM)
|
||||
for _, version := range []string{"dev", "v0.1.2"} {
|
||||
staged, err := f.updaterDesired(version, "dev").Check(context.Background(), fakeExe(t))
|
||||
if err != nil || staged {
|
||||
t.Fatalf("version %s: staged=%v err=%v, want no action with APP_VER=dev", version, staged, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckPinned(t *testing.T) {
|
||||
// Pin mode stages the exact tag — up or down — and skips when the
|
||||
// binary already matches.
|
||||
for _, version := range []string{"v0.1.2", "v9.9.9", "dev"} {
|
||||
f := newFakeGitea(t, "v0.5.0", []byte("pinned-binary"))
|
||||
withPublicKey(t, f.pubPEM)
|
||||
exe := fakeExe(t)
|
||||
staged, err := f.updaterDesired(version, "v0.5.0").Check(context.Background(), exe)
|
||||
if err != nil {
|
||||
t.Fatalf("version %s: %v", version, err)
|
||||
}
|
||||
if !staged {
|
||||
t.Fatalf("version %s: expected pinned v0.5.0 to be staged", version)
|
||||
}
|
||||
content, _ := os.ReadFile(exe)
|
||||
if string(content) != "pinned-binary" {
|
||||
t.Fatalf("version %s: exe content = %q", version, content)
|
||||
}
|
||||
}
|
||||
|
||||
f := newFakeGitea(t, "v0.5.0", []byte("pinned-binary"))
|
||||
withPublicKey(t, f.pubPEM)
|
||||
staged, err := f.updaterDesired("v0.5.0", "v0.5.0").Check(context.Background(), fakeExe(t))
|
||||
if err != nil || staged {
|
||||
t.Fatalf("staged=%v err=%v, want no action for dev build", staged, err)
|
||||
t.Fatalf("staged=%v err=%v, want no action when already on the pinned version", staged, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user