agent: LastContact cannot be negative (#3067)

The X-Consul-LastContact header cannot be negative.

Fixes #3067
This commit is contained in:
Frank Schroeder 2017-06-01 13:53:27 +02:00 committed by Frank Schröder
parent e23cd5acb6
commit 9956bc9b47
2 changed files with 22 additions and 5 deletions

View File

@ -311,6 +311,9 @@ func setKnownLeader(resp http.ResponseWriter, known bool) {
// setLastContact is used to set the last contact header
func setLastContact(resp http.ResponseWriter, last time.Duration) {
if last < 0 {
last = 0
}
lastMsec := uint64(last / time.Millisecond)
resp.Header().Set("X-Consul-LastContact", strconv.FormatUint(lastMsec, 10))
}

View File

@ -150,11 +150,25 @@ func TestSetKnownLeader(t *testing.T) {
func TestSetLastContact(t *testing.T) {
t.Parallel()
resp := httptest.NewRecorder()
setLastContact(resp, 123456*time.Microsecond)
header := resp.Header().Get("X-Consul-LastContact")
if header != "123" {
t.Fatalf("Bad: %v", header)
tests := []struct {
desc string
d time.Duration
h string
}{
{"neg", -1, "0"},
{"zero", 0, "0"},
{"pos", 123 * time.Millisecond, "123"},
{"pos ms only", 123456 * time.Microsecond, "123"},
}
for _, tt := range tests {
t.Run(tt.desc, func(t *testing.T) {
resp := httptest.NewRecorder()
setLastContact(resp, tt.d)
header := resp.Header().Get("X-Consul-LastContact")
if got, want := header, tt.h; got != want {
t.Fatalf("got X-Consul-LastContact header %q want %q", got, want)
}
})
}
}