Files
kandev/apps/backend/internal/agentctl/server/api/managed_runtime_test.go
T
2026-09-08 07:25:56 +00:00

63 lines
1.9 KiB
Go

package api
import (
"bytes"
"encoding/json"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"
"github.com/kandev/kandev/internal/agent/managedruntime"
)
func TestManagedRuntimeCacheRepairUsesProbeEnvironmentAndExactTree(t *testing.T) {
server := newTestServer(t)
instanceCacheRoot := t.TempDir()
probeCacheRoot := t.TempDir()
server.cfg.AgentEnv = []string{"NPM_CONFIG_CACHE=" + instanceCacheRoot}
packageSpec := "@scope/managed-acp@1.2.3"
probeNpxRoot := filepath.Join(probeCacheRoot, "_npx")
target := filepath.Join(probeNpxRoot, managedruntime.NpxExecutionCacheKey(packageSpec))
sibling := filepath.Join(probeNpxRoot, "0123456789abcdef")
instanceTarget := filepath.Join(
instanceCacheRoot, "_npx", managedruntime.NpxExecutionCacheKey(packageSpec),
)
if err := os.MkdirAll(target, 0o755); err != nil {
t.Fatal(err)
}
if err := os.MkdirAll(sibling, 0o755); err != nil {
t.Fatal(err)
}
if err := os.MkdirAll(instanceTarget, 0o755); err != nil {
t.Fatal(err)
}
body, err := json.Marshal(map[string]any{
"package_spec": packageSpec,
"env": map[string]string{"NPM_CONFIG_CACHE": probeCacheRoot},
})
if err != nil {
t.Fatal(err)
}
req := httptest.NewRequest(http.MethodPost, "/api/v1/agent/managed-runtime/cache-repair", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
resp := httptest.NewRecorder()
server.router.ServeHTTP(resp, req)
if resp.Code != http.StatusOK {
t.Fatalf("cache repair status = %d, want %d: %s", resp.Code, http.StatusOK, resp.Body.String())
}
if _, err := os.Stat(target); !os.IsNotExist(err) {
t.Fatalf("target stat error = %v, want not-exist", err)
}
if _, err := os.Stat(sibling); err != nil {
t.Fatalf("unrelated tree was removed: %v", err)
}
if _, err := os.Stat(instanceTarget); err != nil {
t.Fatalf("instance-environment tree was removed instead of probe tree: %v", err)
}
}