OpenClaw Docker E2E Authoring
Docker E2E 레인, 릴리스 경로 Docker 테스트 또는 실시간 프로바이더 Docker 증명을 추가하거나 변경할 때 사용합니다.
레인 선택
- 결정론적 Docker: 의존성/서버를 가짜로 대체하고 경계를 넘는 정확한 런타임 계약을 단언합니다.
- 실시간 Docker: 사용자에게 보이는 동작이 실제 서비스를 필요로 하는 경우에만 실제 프로바이더 자격 증명/모델을 사용합니다.
- 두 접근법이 각각 다른 위험을 검증할 때는 둘 다 선호합니다. 결정론적은 바이트/페이로드 라우팅용, 실시간은 실제 프로바이더 동작용입니다.
작성 규칙
- 테스트 전용 헬퍼는
test/helpers또는scripts/e2e/lib/<lane>/에 위치하며, 프로덕션에서 가져오지 않는 한src/**에 두지 않습니다. - 패키지로 설치된 앱은
/app에서 실행되며, 명시적인 harness/helper 경로만 읽기 전용으로 마운트합니다. - 가짜 서버는 경계 요청을 JSONL로 로그에 기록하고, 클라이언트는 단순한 처리 성공이 아닌 실제 의존성 페이로드를 단언해야 합니다.
- 같은 변경에서 패키지 스크립트와
scripts/lib/docker-e2e-scenarios.mjs레인을 추가합니다. - 레인이 npm에서 플러그인을 설치하는 경우, 환경 변수를 통해 사양을 기본값으로 설정하여 게시된 경로와 로컬 재정의 경로 모두 테스트 가능하게 합니다.
미디어 및 비전
- 예상 답변은 테스트 중인 픽셀이나 프로바이더 출력에만 존재해야 합니다.
- 중립적인 파일명, 중립적인 프롬프트를 사용하고 메타데이터 누출이 없어야 합니다.
- 무작위 비트맵/OCR 토큰은 테스트가 더 강력한 글리프 집합을 소유하지 않는 한 저장소의 OCR 안전 알파벳
24567ACEF를 재사용합니다. - 실제 이미지 이해를 증명할 때는 예상 답변이 실행마다 고유하게 만듭니다.
chat.send E2E
chat.send가status: "started"와 문자열runId를 반환하도록 요구합니다.agent.wait로 완료를 기다립니다.- 이벤트 순서가 테스트 대상 동작이 아닌 경우
chat.history를 통해 최종 사용자에게 보이는 텍스트를 단언합니다. - 원본 채널/계정 메타데이터는 버그 경로에 대기 중인 인바운드/채널 컨텍스트가 필요한 경우에만 유지합니다.
검증
터치된 레인을 다루는 가장 작은 증명을 실행합니다:
pnpm exec oxfmt --write <변경된 파일>
node --check <새 .mjs 파일>
bash -n <새 .sh 파일>
node scripts/run-vitest.mjs test/scripts/docker-e2e-plan.test.ts
OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:<lane>
실제 프로바이더 레인의 경우, 결정론적 Docker가 통과한 후 일치하는 실시간 Docker 스크립트를 실행합니다. 커밋/PR 전에 $autoreview로 마무리합니다.