package escrow // S3 Group D — the WG-key escrow join. Red-proof (e): remove the auto-inject call and the // bundle-contains-key assertion fails. import ( "encoding/base64" "encoding/json" "os" "path/filepath" "testing" ) func TestAttachWGKey(t *testing.T) { dir := t.TempDir() keyPath := filepath.Join(dir, "private.key") // Missing key file → clean no-attach (pre-S3 bundles stay byte-compatible). b := &IdentityBundle{TunnelToken: "tt", PBSToken: "pt"} attached, err := AttachWGKey(b, keyPath) if err != nil || attached { t.Fatalf("missing file: attached=%v err=%v", attached, err) } raw, _ := json.Marshal(b) if string(raw) != `{"tunnel_token":"tt","pbs_token":"pt"}` { t.Fatalf("bundle without key marshals with extra fields: %s", raw) } // Present key file → attached, field carried. key := base64.StdEncoding.EncodeToString(make([]byte, 32)) os.WriteFile(keyPath, []byte(key+"\n"), 0o600) attached, err = AttachWGKey(b, keyPath) if err != nil || !attached { t.Fatalf("present file: attached=%v err=%v", attached, err) } if b.WGPrivateKey != key { t.Fatalf("bundle key = %q", b.WGPrivateKey) } raw, _ = json.Marshal(b) var back IdentityBundle json.Unmarshal(raw, &back) if back.WGPrivateKey != key { t.Fatal("wg_private_key does not survive the bundle round-trip") } // Corrupt key file → error (the operator must know their escrow would lack the identity). os.WriteFile(keyPath, []byte("garbage"), 0o600) if _, err := AttachWGKey(&IdentityBundle{}, keyPath); err == nil { t.Fatal("corrupt key file attached silently") } }