| // Copyright 2021 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| // github.com/alicebob/miniredis/v2 pulls in | |
| // github.com/yuin/gopher-lua which uses a non | |
| // build-tag-guarded use of the syscall package. | |
| //go:build !plan9 | |
| package cache | |
| import ( | |
| "context" | |
| "sort" | |
| "testing" | |
| "github.com/alicebob/miniredis/v2" | |
| "github.com/go-redis/redis/v8" | |
| "github.com/google/go-cmp/cmp" | |
| ) | |
| func TestBasics(t *testing.T) { | |
| ctx := context.Background() | |
| s, err := miniredis.Run() | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| defer s.Close() | |
| c := New(redis.NewClient(&redis.Options{Addr: s.Addr()})) | |
| val := []byte("value") | |
| must(t, c.Put(ctx, "key", val, 0)) | |
| got, err := c.Get(ctx, "key") | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| if !cmp.Equal(got, val) { | |
| t.Fatalf("got %v, want %v", got, val) | |
| } | |
| must(t, c.Delete(ctx, "key")) | |
| got, err = c.Get(ctx, "key") | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| if got != nil { | |
| t.Fatalf("got %v, want nil", got) | |
| } | |
| } | |
| func TestDeletePrefix(t *testing.T) { | |
| ctx := context.Background() | |
| s, err := miniredis.Run() | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| defer s.Close() | |
| c := New(redis.NewClient(&redis.Options{Addr: s.Addr()})) | |
| check := func(want []string) { | |
| t.Helper() | |
| got, err := c.client.Keys(ctx, "*").Result() | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| sort.Strings(want) | |
| sort.Strings(got) | |
| if !cmp.Equal(got, want) { | |
| t.Errorf("got %v, want %v", got, want) | |
| } | |
| } | |
| all := []string{"a", "b", "c", "a@x", "a/x"} | |
| for _, k := range all { | |
| must(t, c.Put(ctx, k, []byte("value"), 0)) | |
| } | |
| check(all) | |
| scanCount = 1 | |
| must(t, c.DeletePrefix(ctx, "a")) | |
| check([]string{"b", "c"}) | |
| must(t, c.Clear(ctx)) | |
| check([]string{}) | |
| } | |
| func must(t *testing.T, err error) { | |
| t.Helper() | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| } |