package agent import ( "context" "os" "path/filepath" "strings" "testing" "gitea.hsrv.site/mrleo1nid/backup-master/internal/api" ) func TestSelfUpdateRejectsForeignPath(t *testing.T) { for _, p := range []string{"https://evil.example/x", "/dl/../etc/passwd", "/api/v1/x"} { err := selfUpdate(context.Background(), api.NewClient("http://127.0.0.1:1", "t"), &api.AgentUpdate{Version: "v1.0.0", Path: p, SHA256: strings.Repeat("a", 64)}, "v0.1.0") if err == nil || !strings.Contains(err.Error(), "недопустимый путь") { t.Errorf("%s: %v", p, err) } } } func TestWriteVerified(t *testing.T) { p := filepath.Join(t.TempDir(), "bin") // sha256("abc") good := "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad" if err := writeVerified(p, strings.NewReader("abc"), good); err != nil { t.Fatal(err) } if err := writeVerified(p, strings.NewReader("abd"), good); err == nil { t.Fatal("подменённый бинарник принят") } if _, err := os.Stat(p); err != nil { t.Fatal(err) } } func TestCatalogFor(t *testing.T) { cat, warns, err := catalogFor(&api.AgentConfig{CatalogYAML: "categories:\n - {name: only, type: files, paths: [/x]}\n"}) if err != nil || len(warns) != 0 || cat.Find("only") == nil || cat.Find("xui") != nil { t.Fatalf("каталог с сервера не применён: %v %v", err, warns) } // каталог, который эта версия не понимает, — встроенный + переопределения и предупреждение cat, warns, err = catalogFor(&api.AgentConfig{ CatalogYAML: "categories:\n - {name: x, type: future-type}\n", ConfigYAML: "categories:\n - {name: scripts, disabled: true}\n", }) if err != nil || len(warns) != 1 || cat.Find("xui") == nil || !cat.Find("scripts").Disabled { t.Fatalf("запасной каталог: %v %v", err, warns) } // старый сервер без catalog_yaml if cat, _, err := catalogFor(&api.AgentConfig{}); err != nil || cat.Find("xui") == nil { t.Fatalf("встроенный каталог: %v", err) } }