워커가 실행됐기를 바라며 일정 시간 재우는 대신, 이 작업 인계는 어떻게 테스트할까요?
식별자를 담은 요청 하나를 생각해 봐요. 워커는 버퍼 없는 채널에서 요청을 받고, 그 요청 전용 결과 칸에 식별자를 기록한 뒤 같은 식별자를 담은 확인 응답을 보내요. 송신 완료를 sent, 결과 기록을 observed, 확인 응답 수신을 acknowledged라고 부를게요.
버퍼 없는 채널에서 송신이 끝났다면 그에 대응하는 수신이 일어났다는 건 알 수 있어요. 하지만 워커가 수신 뒤의 문장들을 끝냈다는 뜻은 아니에요. 따라서 sent와 observed의 로그 항목은 어느 쪽이 먼저 나타나도 돼요.
저라면 대응하는 확인 응답을 받은 지점을 테스트 경계로 삼겠어요. 워커가 확인 응답을 보내기 전에 결과를 기록하게 하고, 테스트가 그 응답을 받은 다음 결과를 살펴봐요. 그러면 동기화 관계를 근거로 그 관찰을 설명할 수 있어요. 멈춘 테스트를 끝낼 타임아웃은 두되, 그만큼 기다렸다는 사실로 진행을 입증했다고 하지는 않아요. 여기서 넘겨주는 방식은 간단하게 둬도 되겠어요.