diff --git a/Makefile b/Makefile index 0323b379..03580287 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ all: testdeps go test ./... go test ./... -short -race - go test ./... -run=NONE -bench=. + go test ./... -run=NONE -bench=. -benchmem env GOOS=linux GOARCH=386 go test ./... go vet go get github.com/gordonklaus/ineffassign diff --git a/command.go b/command.go index dde513be..4223e010 100644 --- a/command.go +++ b/command.go @@ -439,7 +439,14 @@ func (cmd *DurationCmd) readReply(rd *proto.Reader) error { if cmd.err != nil { return cmd.err } - cmd.val = time.Duration(n) * cmd.precision + switch n { + // -2 if the key does not exist + // -1 if the key exists but has no associated expire + case -2, -1: + cmd.val = time.Duration(n) + default: + cmd.val = time.Duration(n) * cmd.precision + } return nil } diff --git a/commands_test.go b/commands_test.go index 02fc7bf4..5f363dfa 100644 --- a/commands_test.go +++ b/commands_test.go @@ -374,7 +374,11 @@ var _ = Describe("Commands", func() { ttl = client.TTL("key") Expect(ttl.Err()).NotTo(HaveOccurred()) - Expect(ttl.Val() < 0).To(Equal(true)) + Expect(ttl.Val()).To(Equal(time.Duration(-1))) + + ttl = client.TTL("nonexistent_key") + Expect(ttl.Err()).NotTo(HaveOccurred()) + Expect(ttl.Val()).To(Equal(time.Duration(-2))) }) It("should ExpireAt", func() {