|
@@ -0,0 +1,47 @@
|
|
|
|
|
+# M1 Smoke Test — Live Results
|
|
|
|
|
+
|
|
|
|
|
+Run on 2026-06-13, host interserver2. All 9 steps from
|
|
|
|
|
+`M1_VERIFICATION.md` passed.
|
|
|
|
|
+
|
|
|
|
|
+## Step results
|
|
|
|
|
+
|
|
|
|
|
+| # | step | result |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| 1 | `docker compose build` | ✅ all 6 images built |
|
|
|
|
|
+| 1 | `docker compose up -d` | ✅ all 10 services up (postgres, redis, nats, emqx, clickhouse, fakefcmd, ingestd, routerd, deliverd, admind) |
|
|
|
|
|
+| 1 | `docker compose up seed` | ✅ `seed: ok` |
|
|
|
|
|
+| 2 | verify companies/individuals/fcm_tokens | ✅ 1+1+1 rows |
|
|
|
|
|
+| 3 | fakefcmd `/health` | ✅ `{"status":"ok","received":0,"failed":0}` |
|
|
|
|
|
+| 4 | signed POST to ingestd | ✅ `202 {"alert_id":"0000019ec2...","dedupe_count":1}` |
|
|
|
|
|
+| 5 | `deliveries` row appears | ✅ `status=sent, attempts=1, channel=fcm` |
|
|
|
|
|
+| 6 | fakefcmd log | ✅ `alert_id=0000019ec2... title="Disk full on db-prod-03"` |
|
|
|
|
|
+| 7 | bad signature | ✅ `401` |
|
|
|
|
|
+| 7 | payload > 256KB | ✅ `413` |
|
|
|
|
|
+| 7 | invalid JSON | ✅ `400` |
|
|
|
|
|
+| 7 | bad severity | ✅ `400` |
|
|
|
|
|
+| 8 | loadgen-http 50/s × 30s | ✅ 1529 sent, 0 failed, 0 rate_limited |
|
|
|
|
|
+| 8 | deliveries count after burst | ✅ 1530 sent (1529 burst + 1 step-4) |
|
|
|
|
|
+| 9 | same dedupe_key 3x | ✅ `dedupe_count: 1, 2, 3` |
|
|
|
|
|
+
|
|
|
|
|
+## Issues found and fixed during the live run
|
|
|
|
|
+
|
|
|
|
|
+| # | issue | fix |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| 1 | `Dockerfile` `COPY ... 2>/dev/null \|\| true` not supported by BuildKit | removed the shell redirect; only copy the file that exists |
|
|
|
|
|
+| 2 | `go.mod` requires Go 1.25; Docker base image was 1.24 | bumped Dockerfile `FROM golang:1.25-alpine` |
|
|
|
|
|
+| 3 | `emqx/emqx:5-alpine` tag no longer exists in Docker Hub | pinned to `emqx/emqx:5.10.4` (latest v5 stable) |
|
|
|
|
|
+| 4 | EMQX 5.10 healthcheck `wget` against `/api/v5/status` requires auth | swapped to `bash /dev/tcp/127.0.0.1/1883` — the MQTT TCP port is the real liveness signal |
|
|
|
|
|
+| 5 | `nats:2.10-alpine` healthcheck failed because HTTP monitoring needs explicit `-m 8222` flag | added `-m 8222` to the nats command line |
|
|
|
|
|
+| 6 | Host already has a redis on `:6379` and a postgres on `:5432`; docker proxy failed to bind | changed compose to `expose:` (no host port mapping) for postgres + redis. App services reach them via docker DNS. |
|
|
|
|
|
+
|
|
|
|
|
+## Honest notes
|
|
|
|
|
+
|
|
|
|
|
+- The `emqx` container shows `health: starting` indefinitely in step 1; the
|
|
|
|
|
+ TCP probe is succeeding (we can connect to 1883) but docker's
|
|
|
|
|
+ healthcheck machinery seems slow to mark it healthy. Doesn't block
|
|
|
|
|
+ M1. Will revisit in M4.
|
|
|
|
|
+- The `seed` container is a one-shot sidecar that doesn't restart. To
|
|
|
|
|
+ re-run it: `docker compose up seed`.
|
|
|
|
|
+- Default `BA_POSTGRES_PASSWORD` and `BA_REDIS_URL` in compose are
|
|
|
|
|
+ dev-only values; production overrides via `.env` are out of M1
|
|
|
|
|
+ scope.
|