From 92a7b2359067b7333700645768a7010b1b012066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6khan=20=C3=96zelo=C4=9Flu?= Date: Fri, 29 Oct 2021 14:43:53 +0300 Subject: [PATCH] Add Keys function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keys() method added for listing stored keys in database. Usage added in README and pkg/main.go. Signed-off-by: Gökhan Özeloğlu --- README.md | 7 ++++- example/pkg/main.go | 5 ++++ keys.go | 14 +++++++++ keys_test.go | 69 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 keys.go create mode 100644 keys_test.go diff --git a/README.md b/README.md index bd4e3c9..354b713 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,12 @@ func main() { log.Fatalf(err.Error()) } fmt.Printf("key name changed: %v1\n", ok) - + + keys := db.Keys() + for _, k := range keys { + fmt.Println(k) + } + err = db.Close() // Call while closing the database. if err != nil { log.Fatalf(err.Error()) diff --git a/example/pkg/main.go b/example/pkg/main.go index 0b8894f..2979400 100644 --- a/example/pkg/main.go +++ b/example/pkg/main.go @@ -51,6 +51,11 @@ func main() { } fmt.Printf("key name changed: %v1\n", ok) + keys := db.Keys() + for _, k := range keys { + fmt.Println(k) + } + err = db.Close() if err != nil { log.Fatalf(err.Error()) diff --git a/keys.go b/keys.go new file mode 100644 index 0000000..aef1bbf --- /dev/null +++ b/keys.go @@ -0,0 +1,14 @@ +package kvs + +// Keys list the stored keys in a slice. If db is empty, empty slice is returned. +func (k *Kvs) Keys() []string { + k.mu.Lock() + defer k.mu.Unlock() + var keys []string + + for key := range k.kv { + keys = append(keys, key) + } + + return keys +} diff --git a/keys_test.go b/keys_test.go new file mode 100644 index 0000000..f525e57 --- /dev/null +++ b/keys_test.go @@ -0,0 +1,69 @@ +package kvs + +import ( + "os" + "testing" + "time" +) + +func TestKvs_Keys(t *testing.T) { + db, err := open(t.Name(), "", 2*time.Minute) + if err != nil { + t.Fatalf(err.Error()) + } + t.Logf("db created.") + + pairs := []string{"foo", "1", "bar", "2", "fizz", "3", "buzz", "4"} + for i := 0; i < len(pairs); i += 2 { + db.Set(pairs[i], pairs[i+1]) + } + t.Logf("key-value pairs are set.") + + keys := db.Keys() + if len(keys) != len(pairs)/2 { + t.Errorf("Fetched keys are wrong. pairs len is %d, "+ + "fetched len is %d.", len(pairs)/2, len(keys)) + } + for _, k := range keys { + t.Logf(k) + } + + err = db.Close() + if err != nil { + t.Fatalf(err.Error()) + } + t.Logf("db closed.") + + err = os.RemoveAll(db.dir) + if err != nil { + t.Fatalf(err.Error()) + } + t.Logf("temp db removed.") +} + +func TestKvs_EmptyKeys(t *testing.T) { + db, err := open(t.Name(), "", 2*time.Minute) + if err != nil { + t.Fatalf(err.Error()) + } + t.Logf("db created.") + + keys := db.Keys() + if len(keys) != 0 { + t.Errorf("Fetched keys are wrong. pairs len is %d, "+ + "fetched len is %d.", 0, len(keys)) + } + t.Logf("Empty slice: %d", len(keys)) + + err = db.Close() + if err != nil { + t.Fatalf(err.Error()) + } + t.Logf("db closed.") + + err = os.RemoveAll(db.dir) + if err != nil { + t.Fatalf(err.Error()) + } + t.Logf("temp db removed.") +}