mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 11:48:43 -07:00
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 <ivan@synadia.com>
69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
// Copyright 2015-2019 The NATS Authors
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package server
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
const PING_CLIENT_PORT = 11228
|
|
|
|
var DefaultPingOptions = Options{
|
|
Host: "127.0.0.1",
|
|
Port: PING_CLIENT_PORT,
|
|
NoLog: true,
|
|
NoSigs: true,
|
|
PingInterval: 50 * time.Millisecond,
|
|
}
|
|
|
|
func TestPing(t *testing.T) {
|
|
o := DefaultPingOptions
|
|
o.DisableShortFirstPing = true
|
|
s := RunServer(&o)
|
|
defer s.Shutdown()
|
|
|
|
c, err := net.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", PING_CLIENT_PORT))
|
|
if err != nil {
|
|
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()
|
|
}
|
|
}
|