Example #1
0
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))
		}
	}
}