diff --git a/.github/workflows/test-leveldb.yml b/.github/workflows/test-leveldb.yml new file mode 100644 index 00000000..98a479a0 --- /dev/null +++ b/.github/workflows/test-leveldb.yml @@ -0,0 +1,27 @@ +on: + push: + branches: + - master + - main + paths: + - 'leveldb/**' + pull_request: + paths: + - 'leveldb/**' +name: "Tests LevelDB" +jobs: + Tests: + strategy: + matrix: + go-version: + - 1.23.x + runs-on: ubuntu-latest + steps: + - name: Fetch Repository + uses: actions/checkout@v4 + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: '${{ matrix.go-version }}' + - name: Test LevelDB + run: cd ./leveldb && go test ./... -v -race diff --git a/README.md b/README.md index 8ec2fcb8..3f2352c1 100644 --- a/README.md +++ b/README.md @@ -77,3 +77,4 @@ type Storage interface { - [SQLite3](./sqlite3/README.md) - [ClickHouse](./clickhouse/README.md) - [Valkey](./valkey/README.md) +- [LevelDB](./leveldb/README.md) diff --git a/leveldb/leveldb_test.go b/leveldb/leveldb_test.go index 9b12086e..062acc2d 100644 --- a/leveldb/leveldb_test.go +++ b/leveldb/leveldb_test.go @@ -1,6 +1,7 @@ package leveldb import ( + "fmt" "os" "testing" "time" @@ -164,3 +165,60 @@ func Test_GarbageCollection_BeforeWorking(t *testing.T) { err = removeAllFiles("./fiber.leveldb") require.Nil(t, err) } + +func Benchmark_Set(b *testing.B) { + db := New() + defer func() { + db.Close() + _ = removeAllFiles("./fiber.leveldb") + }() + + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + i := 0 + for pb.Next() { + key := []byte(fmt.Sprintf("key_%d", i)) + value := []byte(fmt.Sprintf("value_%d", i)) + _ = db.Set(key, value, 0) + i++ + } + }) +} + +func Benchmark_Get(b *testing.B) { + db := New() + defer func() { + db.Close() + _ = removeAllFiles("./fiber.leveldb") + }() + + key := []byte("test_key") + value := []byte("test_value") + _ = db.Set(key, value, 0) + + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + _, _ = db.Get(key) + } + }) +} + +func Benchmark_Delete(b *testing.B) { + db := New() + defer func() { + db.Close() + _ = removeAllFiles("./fiber.leveldb") + }() + + b.ResetTimer() + b.RunParallel(func(pb *testing.PB) { + i := 0 + for pb.Next() { + key := fmt.Sprintf("key_%d", i) + _ = db.Set([]byte(key), []byte("value"), 0) + _ = db.Delete(key) + i++ + } + }) +}