From b60d5e6796eec5a903d8e6663404e57fe52ddbbb Mon Sep 17 00:00:00 2001 From: Ivan Kozlovic Date: Thu, 11 Jun 2020 18:09:27 -0600 Subject: [PATCH] Fixed TestPing test The test was not checking that PINGs were sent, however, without disabling the first short ping and with a very low interval, there was chance on Travis that the first short ping was sent before the client had connected, which would break the NATS client protocol that expects to receive a PONG to initial PING (after CONNECT). The client library could arguably be updated to accept PING during the CONNECT phase. Signed-off-by: Ivan Kozlovic --- server/ping_test.go | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/server/ping_test.go b/server/ping_test.go index 9bea9eb6..95ae0613 100644 --- a/server/ping_test.go +++ b/server/ping_test.go @@ -14,11 +14,11 @@ package server import ( + "bufio" "fmt" + "net" "testing" "time" - - "github.com/nats-io/nats.go" ) const PING_CLIENT_PORT = 11228 @@ -28,17 +28,41 @@ var DefaultPingOptions = Options{ Port: PING_CLIENT_PORT, NoLog: true, NoSigs: true, - PingInterval: 5 * time.Millisecond, + PingInterval: 50 * time.Millisecond, } func TestPing(t *testing.T) { - s := RunServer(&DefaultPingOptions) + o := DefaultPingOptions + o.DisableShortFirstPing = true + s := RunServer(&o) defer s.Shutdown() - nc, err := nats.Connect(fmt.Sprintf("nats://127.0.0.1:%d", PING_CLIENT_PORT)) + c, err := net.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", PING_CLIENT_PORT)) if err != nil { - t.Fatalf("Error creating client: %v\n", err) + t.Fatalf("Error connecting: %v", err) + } + defer c.Close() + br := bufio.NewReader(c) + // Wait for INFO + br.ReadLine() + // Send CONNECT + c.Write([]byte("CONNECT {\"verbose\":false}\r\nPING\r\n")) + // Wait for first PONG + br.ReadLine() + // Wait for PING + start := time.Now() + for i := 0; i < 3; i++ { + l, _, err := br.ReadLine() + if err != nil { + t.Fatalf("Error: %v", err) + } + if string(l) != "PING" { + t.Fatalf("Expected PING, got %q", l) + } + if dur := time.Since(start); dur < 25*time.Millisecond || dur > 75*time.Millisecond { + t.Fatalf("Pings duration off: %v", dur) + } + c.Write([]byte(pongProto)) + start = time.Now() } - defer nc.Close() - time.Sleep(10 * time.Millisecond) }