func Listen(br *s.Bracelet, expectedRequests, expectedResponses Expect, t *testing.T, ch <-chan struct{}) { for range ch { request, err := br.Read() if err != nil { select { case _, ok := <-ch: if !ok { return } default: t.Fatal("Can't read message from bracelet") } } strRequest := string(request) expectedRequests.Check(strRequest, "from bracelet") response, err := server.AnswerRequest(br.ID, strRequest) switch err { case s.NoResponse: break case nil: if _, err = br.Write(response); err != nil { br.Conn.Close() select { case _, ok := <-ch: if !ok { return } default: t.Fatal("Can't write message to braclet") } } expectedResponses.Check(response, "to bracelet") break default: t.Fatal(fmt.Sprintf("Can't find answer for %s", strRequest)) } } }