feat(14-01): record vendor calls with summer parity:upstream and replay them offline
- WriteUpstream masks vars, hashes long base64 JSON strings and refuses unmasked Authorization/X-Api-Key - multipart requests recorded as ordered parts; the fake compares parts and hashed payloads - loopback CONNECT recording proxy with a local ECDSA parity CA, script and forward modes - parity:upstream command, README and parity docs
This commit is contained in:
@@ -15,7 +15,7 @@ import (
|
||||
|
||||
func TestParityCommandContract(t *testing.T) {
|
||||
names := commandNames()
|
||||
for _, want := range []string{"parity:record", "parity:proxy", "parity:replay"} {
|
||||
for _, want := range []string{"parity:record", "parity:proxy", "parity:replay", "parity:upstream"} {
|
||||
if !containsName(names, want) {
|
||||
t.Fatalf("missing %s in %v", want, names)
|
||||
}
|
||||
@@ -82,6 +82,29 @@ func TestParityCommandContract(t *testing.T) {
|
||||
}
|
||||
assertNoSecrets(t, out+"\n"+errString(err), jwt, inv)
|
||||
|
||||
upDir := t.TempDir()
|
||||
upScript := filepath.Join(upDir, "script.yaml")
|
||||
if err := os.WriteFile(upScript, []byte("responses: []\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
upOut := filepath.Join(outDir, "routes", "POST_x__ok.upstream.yaml")
|
||||
out, err = runParityCapture("parity:upstream", "--listen", "0.0.0.0:8425", "--ca-dir", filepath.Join(upDir, "ca"), "--out", upOut, "--script", upScript, "--vars", filepath.Join(upDir, "vars.yaml"))
|
||||
if err == nil || !strings.Contains(err.Error(), "loopback") {
|
||||
t.Fatalf("upstream non-loopback: %v %s", err, out)
|
||||
}
|
||||
out, err = runParityCapture("parity:upstream", "--ca-dir", filepath.Join(upDir, "ca"), "--out", upOut, "--script", upScript, "--vars", filepath.Join(outDir, "routes", "vars.yaml"))
|
||||
if err == nil || !strings.Contains(err.Error(), "vars file") {
|
||||
t.Fatalf("upstream vars inside output dir: %v %s", err, out)
|
||||
}
|
||||
out, err = runParityCapture("parity:upstream", "--ca-dir", filepath.Join(outDir, "routes", "ca"), "--out", upOut, "--script", upScript, "--vars", filepath.Join(upDir, "vars.yaml"))
|
||||
if err == nil || !strings.Contains(err.Error(), "ca dir") {
|
||||
t.Fatalf("upstream CA inside output dir: %v %s", err, out)
|
||||
}
|
||||
out, err = runParityCapture("parity:upstream", "--out", upOut, "--vars", filepath.Join(upDir, "vars.yaml"))
|
||||
if err == nil || !strings.Contains(err.Error(), "--ca-dir") {
|
||||
t.Fatalf("upstream missing --ca-dir: %v %s", err, out)
|
||||
}
|
||||
|
||||
missing := filepath.Join(outDir, "missing-var.yaml")
|
||||
if err := os.WriteFile(missing, []byte("version: 1\nname: miss\nsteps:\n - id: a\n request:\n method: GET\n path: /x/{{missing}}\n response:\n status: 200\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
Reference in New Issue
Block a user