disinto/tests
Claude 27baf496db
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/pr/secret-scan Pipeline was successful
ci/woodpecker/pr/smoke-init Pipeline was successful
fix: vault-import.sh: pipe-separator in ops_data/paths_to_write silently truncates secret values containing | (#898)
Replace the `|`-delimited string accumulators with bash associative and
indexed arrays so any byte may appear in a secret value.

Two sites used `|` as a delimiter over data that includes user secrets:

1. ops_data["path:key"]="value|status" — extraction via `${data%%|*}`
   truncated values at the first `|` (silently corrupting writes).
2. paths_to_write["path"]="k1=v1|k2=v2|..." — split back via
   `IFS='|' read -ra` at write time, so a value containing `|` was
   shattered across kv pairs (silently misrouting writes).

Fix:

- Split ops_data into two assoc arrays (`ops_value`, `ops_status`) keyed
  on "vault_path:vault_key" — value and status are stored independently
  with no in-band delimiter. (`:` is safe because both vault_path and
  vault_key are identifier-safe.)
- Track distinct paths in `path_seen` and, for each path, collect its
  kv pairs into a fresh indexed `pairs_array` by filtering ops_value.
  `_kv_put_secret` already splits each entry on the first `=` only, so
  `=` and `|` inside values are both preserved.

Added a bats regression that imports values like `abc|xyz`, `p1|p2|p3`,
and `admin|with|pipes` and asserts they round-trip through Vault
unmodified. Values are single-quoted in the .env so they survive
`source` — the accumulator is what this test exercises.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 20:04:54 +00:00
..
fixtures fix: [nomad-step-2] S2.2 — tools/vault-import.sh (import .env + sops into KV) (#880) 2026-04-16 17:22:05 +00:00
disinto-init-nomad.bats fix: [nomad-step-2] S2.5 review — gate policies/auth/import on --empty; reject --empty + --import-* (#883) 2026-04-16 19:25:32 +00:00
lib-generators.bats fix: bug: code fixes to docker/agents/ don't take effect — agent image is never rebuilt (#887) 2026-04-16 16:08:48 +00:00
lib-hvault.bats fix: lib/hvault.sh uses secret/ mount prefix but migration policies use kv/ — agents will get 403 (#890) 2026-04-16 19:32:36 +00:00
lib-issue-claim.bats fix: bug: hire-an-agent does not add the new agent as collaborator on the project repo (#856) 2026-04-16 10:47:53 +00:00
lib-load-project.bats fix: bug: generator emits invalid env var name FORGE_BOT_USER_<service>^^ when service name contains hyphen (#852) 2026-04-16 13:23:18 +00:00
mock-forgejo.py fix: mock-forgejo path parsing bug + non-fatal cron in smoke-init (#586) 2026-04-10 15:08:43 +00:00
smoke-credentials.sh fix: fix: stop baking credentials into git remote URLs — use clean URLs + existing credential helper everywhere (#604) 2026-04-10 17:04:10 +00:00
smoke-init.sh fix: [nomad-prep] P7 — make disinto init idempotent + add --dry-run (#800) 2026-04-15 22:37:22 +00:00
smoke-load-secret.sh fix: reorder test boilerplate to avoid duplicate-detection false positive 2026-04-15 19:18:39 +00:00
vault-import.bats fix: vault-import.sh: pipe-separator in ops_data/paths_to_write silently truncates secret values containing | (#898) 2026-04-16 20:04:54 +00:00