누적된 잠금·승인·증거 체인이 구현과 완료를 반복 차단해 작업 비용을 키웠다. 보안·데이터 손상·명시적 외부 의존성만 차단 조건으로 남기고 로드맵과 스킬의 기본 흐름을 단순화한다.
97 lines
4.8 KiB
Markdown
97 lines
4.8 KiB
Markdown
---
|
|
test_env: dev
|
|
test_profile: control-plane-smoke
|
|
domain: control-plane
|
|
verification_type: smoke
|
|
last_rule_updated_at: 2026-06-12
|
|
---
|
|
|
|
# control-plane-smoke dev 테스트
|
|
|
|
## 읽기 조건
|
|
|
|
- `apps/control-plane/**` 변경 또는 Control Plane health/readiness, config loading, wire endpoint dev 검증 판단이 필요한 경우
|
|
|
|
## 적용 범위
|
|
|
|
- `apps/control-plane/cmd/control-plane/**`
|
|
- `apps/control-plane/internal/wire/**`
|
|
- `apps/control-plane/Dockerfile`
|
|
- Control Plane HTTP health/readiness와 proto-socket WebSocket hello baseline
|
|
- Control Plane-Edge TCP wire endpoint, Edge outbound hello, disconnect baseline
|
|
- dev compose host publish와 DB/Redis 분리
|
|
|
|
## 분류
|
|
|
|
- domain: control-plane
|
|
- verification_type: smoke
|
|
- scope: control-plane HTTP와 wire baseline
|
|
|
|
## 환경
|
|
|
|
- host: Docker compose 또는 Flutter client가 포함된 runtime evidence는 원격 runner `ssh toki@toki-labs.com`의 `/Users/toki/agent-work/iop-dev` 기준으로 수행한다.
|
|
- port: Control Plane HTTP `18001` (host-facing), Portal/Control Plane wire test endpoint `19001`, CP-Edge wire `19002`, Edge-Node TCP transport `19003`, web/dev preview `13001`, Control Plane metrics `19103`, Prometheus `19111`, Grafana `19121`.
|
|
- runtime: Go `1.24`, Docker compose
|
|
- package manager: Go modules / Makefile
|
|
- docker: `docker-compose.yml`에 postgres, redis, control-plane, web, prometheus, grafana service가 Control Plane 관측 그룹으로 정의되어 있다. edge service는 Control Plane-Edge 연결 검증을 위한 인접 runtime service다. dev 검증은 `docker compose --env-file .env.dev.example ...`로 수행한다.
|
|
- external service: postgres host publish `15401`, redis host publish `16301`
|
|
- model endpoint:
|
|
- operator notice: 기존 dev Control Plane/UI/Edge 접속 포트는 유지하고 Control Plane metrics `19103`, Prometheus `19111`, Grafana `19121`만 관측용으로 추가한다. Grafana/Prometheus는 원격 runner 내부 또는 SSH 터널 기준이다.
|
|
- credential: DB/Redis credential 원문은 문서에 기록하지 않는다.
|
|
|
|
## 명령
|
|
|
|
- setup: `IOP_EDGE_NODE_TOKEN=<token> docker compose --env-file .env.dev.example up -d postgres redis control-plane web prometheus grafana`
|
|
- lint:
|
|
- unit: `go test ./apps/control-plane/...`
|
|
- smoke: `curl -fsS http://127.0.0.1:18001/healthz`, `curl -fsS http://127.0.0.1:18001/readyz`
|
|
- e2e: `make test-control-plane-edge-wire`는 보조 smoke이며 기본 포트를 쓰는 스크립트이므로 dev 포트 override 가능 여부를 먼저 확인한다.
|
|
- model:
|
|
- full-cycle: Control Plane command, health/readiness, wire hello 수동 검증
|
|
|
|
## 최소 검증
|
|
|
|
- 변경한 control-plane 패키지 또는 `go test ./apps/control-plane/...`를 실행한다.
|
|
- HTTP lifecycle 변경 시 dev port `/healthz`와 `/readyz`를 확인한다.
|
|
- Client-Control Plane wire protocol 변경 시 proto-socket WebSocket hello baseline을 dev wire port `19001` 기준으로 확인한다.
|
|
- Control Plane-Edge TCP wire, Edge outbound connector, registry lifecycle 변경 시 dev `19002` 기준으로 hello accepted, Edge connected, Edge disconnected marker를 확인한다.
|
|
|
|
## 보조 검증
|
|
|
|
- docker compose control-plane service healthcheck를 확인한다.
|
|
- Edge 포함 compose 검증에서는 `IOP_EDGE_NODE_TOKEN`을 원격 runner 환경에서 주입하고, token 원문은 tracked 파일에 기록하지 않는다.
|
|
|
|
## 판정 기준
|
|
|
|
- control-plane service가 dev stack으로 기동되고 health endpoint가 성공 응답을 반환한다.
|
|
- Prometheus와 Grafana가 같은 dev compose project에서 올라오며, Prometheus는 compose 내부 DNS로 `control-plane:9093`과 dev native Edge metrics `host.docker.internal:19101`을 scrape한다.
|
|
- wire endpoint는 Control Plane 브라우저/앱 경계로 유지되고 Node 직접 연결/스케줄링 경로로 확장되지 않는다.
|
|
- dev stack은 local/test stack의 host publish 포트(`13000`, `18000`, `19080`, `19081`, `15400`, `16300`)를 점유하지 않는다.
|
|
|
|
## 기준 출력 예시
|
|
|
|
```text
|
|
curl -fsS http://127.0.0.1:18001/healthz
|
|
curl -fsS http://127.0.0.1:18001/readyz
|
|
```
|
|
|
|
## 차단 기준
|
|
|
|
- docker compose 실행 권한 또는 postgres/redis service 기동이 불가능하다.
|
|
- 현재 작업 컨테이너에서 Docker-in-Docker가 필요해지는 검증은 수행하지 않고 원격 runner 차단으로 보고한다.
|
|
- 실제 DB/Redis credential 확인이 필요한데 안전하게 제공되지 않았다.
|
|
- dev 포트가 이미 점유되어 있어 local/test stack과 공존할 수 없다.
|
|
|
|
## 보고 항목
|
|
|
|
- 실행한 명령:
|
|
- 성공한 검증:
|
|
- 실패/차단된 검증:
|
|
- 생략 사유:
|
|
- 남은 위험:
|
|
|
|
## 금지 사항
|
|
|
|
- Control Plane에서 Node 직접 연결이나 직접 스케줄링을 제품 기본 계약으로 만들지 않는다.
|
|
- 실제 DB/Redis credential이나 private endpoint를 tracked docs/rules에 기록하지 않는다.
|
|
- secret, token, 개인 endpoint 원문은 tracked 파일에 기록하지 않는다.
|