funcTestGet(t *testing.T) { loadCounts := make(map[string]int, len(db)) gee := NewGroup("scores", 2<<10, GetterFunc( func(key string) ([]byte, error) { log.Println("[SlowDB] search key", key) if v, ok := db[key]; ok { if _, ok := loadCounts[key]; !ok { loadCounts[key] = 0 } loadCounts[key] += 1 return []byte(v), nil } returnnil, fmt.Errorf("%s not exist", key) }))
for k, v := range db { if view, err := gee.Get(k); err != nil || view.String() != v { t.Fatal("failed to get value of Tom") } if _, err := gee.Get(k); err != nil || loadCounts[k] > 1 { t.Fatalf("cache %s miss", k) } }
if view, err := gee.Get("unknown"); err == nil { t.Fatalf("the value of unknow should be empty, but %s got", view) } }
$ go test -run TestGet 2020/02/11 22:07:31 [SlowDB] search key Sam 2020/02/11 22:07:31 [GeeCache] hit 2020/02/11 22:07:31 [SlowDB] search key Tom 2020/02/11 22:07:31 [GeeCache] hit 2020/02/11 22:07:31 [SlowDB] search key Jack 2020/02/11 22:07:31 [GeeCache] hit 2020/02/11 22:07:31 [SlowDB] search key unknown PASS ok geecache 0.008s
funcTestGet(t *testing.T) { loadCounts := make(map[string]int, len(db)) gee := NewGroup("scores", 2<<10, GetterFunc( func(key string) ([]byte, error) { log.Println("[SlowDB] search key", key) if v, ok := db[key]; ok { if _, ok := loadCounts[key]; !ok { loadCounts[key] = 0 } loadCounts[key] += 1 return []byte(v), nil } returnnil, fmt.Errorf("%s not exist", key) }))
for k, v := range db { if view, err := gee.Get(k); err != nil || view.String() != v { t.Fatal("failed to get value of Tom") } if _, err := gee.Get(k); err != nil || loadCounts[k] > 1 { t.Fatalf("cache %s miss", k) } }
if view, err := gee.Get("unknown"); err == nil { t.Fatalf("the value of unknow should be empty, but %s got", view) } }
$ go test -run TestGet 2020/02/11 22:07:31 [SlowDB] search key Sam 2020/02/11 22:07:31 [GeeCache] hit 2020/02/11 22:07:31 [SlowDB] search key Tom 2020/02/11 22:07:31 [GeeCache] hit 2020/02/11 22:07:31 [SlowDB] search key Jack 2020/02/11 22:07:31 [GeeCache] hit 2020/02/11 22:07:31 [SlowDB] search key unknown PASS ok geecache 0.008s