daemon: agent-driven workspace images — repo→image registry (GET/PUT/DELETE /api/repos), spawn resolves custom image, self-healing lvmh-ops control container with docker.sock; 132 tests, e2e 87/87
This commit is contained in:
@@ -4,6 +4,7 @@ package main
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -132,3 +133,55 @@ func TestStoreSettingsAndContainers(t *testing.T) {
|
||||
t.Fatal("container row should be gone")
|
||||
}
|
||||
}
|
||||
|
||||
func TestStoreRepoImages(t *testing.T) {
|
||||
store := openTestStore(t)
|
||||
|
||||
if _, ok, err := store.GetRepoImage("group/proj"); err != nil || ok {
|
||||
t.Fatalf("missing repo image = %v %v, want absent no-error", ok, err)
|
||||
}
|
||||
if rows, err := store.ListRepoImages(); err != nil || rows != nil {
|
||||
t.Fatalf("empty list = %v %v, want nil no-error", rows, err)
|
||||
}
|
||||
|
||||
if err := store.SetRepoImage("group/proj", "lvmh-worker-g--p-ab12cd"); err != nil {
|
||||
t.Fatalf("set: %v", err)
|
||||
}
|
||||
if img, ok, _ := store.GetRepoImage("group/proj"); !ok || img != "lvmh-worker-g--p-ab12cd" {
|
||||
t.Fatalf("get = %q %v", img, ok)
|
||||
}
|
||||
|
||||
// upsert replaces
|
||||
if err := store.SetRepoImage("group/proj", "lvmh-worker-g--p-ff99ee"); err != nil {
|
||||
t.Fatalf("upsert: %v", err)
|
||||
}
|
||||
if img, _, _ := store.GetRepoImage("group/proj"); img != "lvmh-worker-g--p-ff99ee" {
|
||||
t.Fatalf("after upsert = %q", img)
|
||||
}
|
||||
|
||||
if err := store.SetRepoImage("other/repo", "lvmh-worker-o--r-11aabb"); err != nil {
|
||||
t.Fatalf("set second: %v", err)
|
||||
}
|
||||
rows, err := store.ListRepoImages()
|
||||
if err != nil {
|
||||
t.Fatalf("list: %v", err)
|
||||
}
|
||||
want := []RepoImageRow{
|
||||
{Repo: "group/proj", Image: "lvmh-worker-g--p-ff99ee"},
|
||||
{Repo: "other/repo", Image: "lvmh-worker-o--r-11aabb"},
|
||||
}
|
||||
if !reflect.DeepEqual(rows, want) {
|
||||
t.Fatalf("list = %+v, want %+v (sorted by repo)", rows, want)
|
||||
}
|
||||
|
||||
if err := store.DeleteRepoImage("group/proj"); err != nil {
|
||||
t.Fatalf("delete: %v", err)
|
||||
}
|
||||
if _, ok, _ := store.GetRepoImage("group/proj"); ok {
|
||||
t.Fatal("repo image should be gone")
|
||||
}
|
||||
// idempotent delete
|
||||
if err := store.DeleteRepoImage("group/proj"); err != nil {
|
||||
t.Fatalf("delete absent: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user