Der Test liest Version, Cluster, Nodes, Storages, Bridges, VNets und die effektiven Rechte des Tokens und leitet daraus ab, welcher Vorgang per API, per SSH oder gar nicht geht – je PVE-Version: Template-Bau per API erst ab 8.4 mit import-Storage, Snippets und LXC-Exec nur per SSH. Fehlende Rechte erscheinen einzeln mit Pfad und Zweck; die Rollenliste in docs/proxmox-rechte.md prüft ein Test gegen den Code. SSH-Host-Keys werden wie Zertifikate erst nach Bestätigung genutzt, und bestätigt werden kann nur ein Schlüssel, den der letzte Test gesehen hat. Statussymbole in der GUI sind jetzt gezeichnet: ◐ und ○ fehlen im Web-Subset von JetBrains Mono. Refs #003 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
26 lines
955 B
TypeScript
26 lines
955 B
TypeScript
import { readFileSync } from "node:fs";
|
|
import { describe, expect, it } from "vitest";
|
|
import { benoetigteRechte, versionLesen } from "@/engine/proxmox/faehigkeiten";
|
|
|
|
/** Die Befehle in der Doku müssen genau die Rechte nennen, die der Verbindungstest verlangt. */
|
|
const doku = readFileSync("docs/proxmox-rechte.md", "utf8");
|
|
|
|
function befehlNach(ueberschrift: string): string[] {
|
|
const abschnitt = doku.slice(doku.indexOf(ueberschrift));
|
|
const treffer = /--privs "([^"]+)"/.exec(abschnitt);
|
|
return treffer![1]!.split(" ").sort();
|
|
}
|
|
|
|
describe("Doku der Proxmox-Rechte", () => {
|
|
it.each([
|
|
["## Rolle anlegen (PVE 9.x)", "9.2.1"],
|
|
["## Rolle anlegen (PVE 8.x)", "8.4.1"],
|
|
])("%s entspricht der Pflichtliste", (ueberschrift, version) => {
|
|
const pflicht = benoetigteRechte(versionLesen(version)!)
|
|
.filter((r) => r.pflicht)
|
|
.map((r) => r.recht)
|
|
.sort();
|
|
expect(befehlNach(ueberschrift)).toEqual(pflicht);
|
|
});
|
|
});
|