핸드오프 테스트를 보면 대개 sleep 한 번 걸어 두고 잘됐기를 바라는 단언으로 끝나요. 이 경우엔 그럴 필요가 없어요.
요청에는 식별자가 붙어 있어요. 워커는 버퍼 없는 채널에서 요청을 받아 그 식별자를 해당 요청의 결과 슬롯에 기록하고, 같은 식별자를 담은 확인 응답을 돌려보내요. 송신이 끝난 시점을 sent, 결과를 쓴 시점을 observed, 테스트가 확인 응답을 받은 시점을 acknowledged라고 부를게요.
버퍼 없는 채널에서 송신이 끝났다면 짝이 되는 수신이 일어났다는 뜻이에요. 알 수 있는 건 거기까지예요. 워커가 수신 다음 문장까지 갔는지는 모르니까 로그에서 sent와 observed는 어느 쪽이 먼저 찍혀도 이상하지 않고, 송신 직후에 슬롯을 확인하면 경쟁 상태가 돼요.
그래서 테스트는 확인 응답을 기다려요. 워커는 응답을 보내기 전에 결과를 쓰고, 테스트는 응답을 받은 다음에만 슬롯을 읽어요. 순서는 채널이 알아서 보장해 줘요. 타임아웃은 남겨 두되 멈춘 테스트를 끝내는 용도로만 써요. 진행됐다는 증거는 아니니까요.
양방향으로 채널 하나씩, 그게 전부예요. 이 핸드오프는 이 정도로 작게 둬도 되겠어요.