A sweep of the whole console: status codes, a data race, atomic writes, dead code
From the race detector, staticcheck, a garbage-in battery over every safe route and a
headless pass through every tab on two machines. Fixed:
- docker inspect/health of a container that isn't there answered 500; now 404, and a
daemon that is down 503 (dockerErr, with a test).
- /api/virt/instances/{name} on a machine without Incus answered 502 "incus not found";
it now says Incus isn't ready, like its siblings.
- Deleting a ZFS snapshot with a bad name answered 500; a bad name is 400, a snapshot
that doesn't exist 404.
- The task list read a task's Running flag without the task's lock while the waiter
goroutine cleared it: a data race, now read under the lock.
- The Virtualization export config and run record were written in place; a crash
mid-write would have left a half file. Atomic now, like the config and state files.
- An unused function in kvm.go, one in incus/subnet.go, an unused field in files/move.go
and a capitalised error string, from staticcheck.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
05161bf7ef
commit
285278abdb
@@ -2,6 +2,7 @@ package api
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"net/http/httptest"
|
||||
"net/url"
|
||||
"os"
|
||||
@@ -102,3 +103,21 @@ func TestFilesReadDanglingLink(t *testing.T) {
|
||||
t.Fatalf("got %d: %s", w.Code, w.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
// dockerErr tells a thing that isn't there from a daemon that isn't up from anything else.
|
||||
func TestDockerErr(t *testing.T) {
|
||||
for _, c := range []struct {
|
||||
msg string
|
||||
want int
|
||||
}{
|
||||
{"error: No such object: zzz", 404}, {"Error response from daemon: No such container: x", 404},
|
||||
{"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?", 503},
|
||||
{"something else entirely", 500},
|
||||
} {
|
||||
w := httptest.NewRecorder()
|
||||
dockerErr(w, errors.New(c.msg))
|
||||
if w.Code != c.want {
|
||||
t.Errorf("%q → %d, want %d", c.msg, w.Code, c.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user