From 6ec8dc0ab209547ac58dd8c07cd0c8c4dd876639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Mon, 7 Apr 2025 02:24:05 +0300 Subject: [PATCH 01/27] feat(surrealdb): add initial implementation of SurrealDB storage with configuration and tests --- surrealdb/config.go | 59 +++++++++++++ surrealdb/go.mod | 65 ++++++++++++++ surrealdb/go.sum | 163 ++++++++++++++++++++++++++++++++++++ surrealdb/surrealdb.go | 74 ++++++++++++++++ surrealdb/surrealdb_test.go | 24 ++++++ 5 files changed, 385 insertions(+) create mode 100644 surrealdb/config.go create mode 100644 surrealdb/go.mod create mode 100644 surrealdb/go.sum create mode 100644 surrealdb/surrealdb.go create mode 100644 surrealdb/surrealdb_test.go diff --git a/surrealdb/config.go b/surrealdb/config.go new file mode 100644 index 00000000..e8ba6926 --- /dev/null +++ b/surrealdb/config.go @@ -0,0 +1,59 @@ +package surrealdb + +type Config struct { + ConnectionString string + Namespace string + Database string + + // auth + Username string + Password string + Access string + Scope string +} + +var ConfigDefault = Config{ + ConnectionString: "ws://localhost:8000", + Namespace: "fiber_storage", + Database: "fiber_storage", + Username: "root", + Password: "root", + Access: "full", + Scope: "all", +} + +func configDefault(config ...Config) Config { + // Return default config if nothing provided + if len(config) < 1 { + return ConfigDefault + } + + // Override default config + cfg := config[0] + + // Set default values + if cfg.ConnectionString == "" { + cfg.ConnectionString = ConfigDefault.ConnectionString + } + if cfg.Namespace == "" { + cfg.Namespace = ConfigDefault.Namespace + } + + if cfg.Database == "" { + cfg.Database = ConfigDefault.Database + } + + if cfg.Username == "" { + cfg.Username = ConfigDefault.Username + } + + if cfg.Password == "" { + cfg.Password = ConfigDefault.Password + } + + if cfg.Scope == "" { + cfg.Scope = ConfigDefault.Scope + } + + return cfg +} diff --git a/surrealdb/go.mod b/surrealdb/go.mod new file mode 100644 index 00000000..67788233 --- /dev/null +++ b/surrealdb/go.mod @@ -0,0 +1,65 @@ +module github.com/gofiber/storage/surrealdb/v2 + +go 1.23.3 + +require ( + github.com/stretchr/testify v1.10.0 + github.com/surrealdb/surrealdb.go v0.3.2 +) + +require ( + dario.cat/mergo v1.0.1 // indirect + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/platforms v0.2.1 // indirect + github.com/cpuguy83/dockercfg v0.3.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/distribution/reference v0.6.0 // indirect + github.com/docker/docker v28.0.1+incompatible // indirect + github.com/docker/go-connections v0.5.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/ebitengine/purego v0.8.2 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/gofrs/uuid v4.4.0+incompatible // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/magiconair/properties v1.8.9 // indirect + github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/patternmatcher v0.6.0 // indirect + github.com/moby/sys/sequential v0.5.0 // indirect + github.com/moby/sys/user v0.1.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/morikuni/aec v1.0.0 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.1 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/shirou/gopsutil/v4 v4.25.1 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/testcontainers/testcontainers-go v0.36.0 // indirect + github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + github.com/x448/float16 v0.8.4 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.35.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/trace v1.35.0 // indirect + golang.org/x/crypto v0.35.0 // indirect + golang.org/x/sys v0.31.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/surrealdb/go.sum b/surrealdb/go.sum new file mode 100644 index 00000000..91f0ae08 --- /dev/null +++ b/surrealdb/go.sum @@ -0,0 +1,163 @@ +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= +github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= +github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0= +github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= +github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= +github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= +github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= +github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs= +github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCFnk8LgmQ= +github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q= +github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00= +github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0= +github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI= +github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= +golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go new file mode 100644 index 00000000..ff32a779 --- /dev/null +++ b/surrealdb/surrealdb.go @@ -0,0 +1,74 @@ +package surrealdb + +import ( + "github.com/surrealdb/surrealdb.go" + "time" +) + +// Storage interface that is implemented by storage providers +type Storage struct { + db *surrealdb.DB +} + +func New(config ...Config) *Storage { + cfg := configDefault(config...) + db, err := surrealdb.New(cfg.ConnectionString) + if err != nil { + panic(err) + } + + if err = db.Use(cfg.Namespace, cfg.Database); err != nil { + panic(err) + } + + authData := &surrealdb.Auth{ + Username: cfg.Username, + Password: cfg.Password, + Access: cfg.Access, + Scope: cfg.Scope, + } + + token, err := db.SignIn(authData) + if err != nil { + panic(err) + } + + if err := db.Authenticate(token); err != nil { + panic(err) + } + + //defer func(token string) { + // if err := db.Invalidate(); err != nil { + // panic(err) + // } + //}(token) + + return &Storage{ + db: db, + } +} + +func (s *Storage) Get(key string) ([]byte, error) { + // TODO implement me + panic("implement me") +} + +func (s *Storage) Set(key string, val []byte, exp time.Duration) error { + //TODO implement me + panic("implement me") +} + +func (s *Storage) Delete(key string) error { + //TODO implement me + panic("implement me") +} + +func (s *Storage) Reset() error { + //TODO implement me + panic("implement me") +} + +func (s *Storage) Close() error { + //TODO implement me + panic("implement me") +} diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go new file mode 100644 index 00000000..bfdb97a5 --- /dev/null +++ b/surrealdb/surrealdb_test.go @@ -0,0 +1,24 @@ +package surrealdb + +import ( + "github.com/stretchr/testify/require" + "os" + "testing" +) + +var testStore *Storage +var testConfig = ConfigDefault + +func TestMain(m *testing.M) { + testStore = New(testConfig) + + code := m.Run() + testStore.Close() + os.Exit(code) +} + +func Test_Surrealdb_Get(t *testing.T) { + bytes, err := testStore.Get("") + require.NoError(t, err) + require.Nil(t, bytes) +} From 38d42c947fd2ddec96c3767744a1298581c95803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Mon, 7 Apr 2025 21:27:32 +0300 Subject: [PATCH 02/27] feat(surrealdb): add crud methods and write basic tests --- surrealdb/config.go | 11 ++++++ surrealdb/surrealdb.go | 71 +++++++++++++++++++++++++++++-------- surrealdb/surrealdb_test.go | 57 ++++++++++++++++++++++++++--- 3 files changed, 121 insertions(+), 18 deletions(-) diff --git a/surrealdb/config.go b/surrealdb/config.go index e8ba6926..fbcc8219 100644 --- a/surrealdb/config.go +++ b/surrealdb/config.go @@ -10,6 +10,8 @@ type Config struct { Password string Access string Scope string + + DefaultTable string } var ConfigDefault = Config{ @@ -20,6 +22,7 @@ var ConfigDefault = Config{ Password: "root", Access: "full", Scope: "all", + DefaultTable: "fiber_storage", } func configDefault(config ...Config) Config { @@ -55,5 +58,13 @@ func configDefault(config ...Config) Config { cfg.Scope = ConfigDefault.Scope } + if cfg.Access == "" { + cfg.Access = ConfigDefault.Access + } + + if cfg.DefaultTable == "" { + cfg.DefaultTable = ConfigDefault.DefaultTable + } + return cfg } diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go index ff32a779..3f693e10 100644 --- a/surrealdb/surrealdb.go +++ b/surrealdb/surrealdb.go @@ -1,13 +1,23 @@ package surrealdb import ( + "encoding/json" + "fmt" "github.com/surrealdb/surrealdb.go" + "github.com/surrealdb/surrealdb.go/pkg/models" "time" ) // Storage interface that is implemented by storage providers type Storage struct { - db *surrealdb.DB + db *surrealdb.DB + table string +} + +type model struct { + Key string `json:"k"` + Val []byte `json:"v"` + Exp int64 `json:"e"` } func New(config ...Config) *Storage { @@ -24,8 +34,6 @@ func New(config ...Config) *Storage { authData := &surrealdb.Auth{ Username: cfg.Username, Password: cfg.Password, - Access: cfg.Access, - Scope: cfg.Scope, } token, err := db.SignIn(authData) @@ -44,31 +52,66 @@ func New(config ...Config) *Storage { //}(token) return &Storage{ - db: db, + db: db, + table: cfg.DefaultTable, } } func (s *Storage) Get(key string) ([]byte, error) { - // TODO implement me - panic("implement me") + recordID := models.NewRecordID(s.table, key) + m, err := surrealdb.Select[model, models.RecordID](s.db, recordID) + if err != nil { + return nil, err + } + bytes, err := json.Marshal(m) + if err != nil { + return nil, err + } + return bytes, nil } func (s *Storage) Set(key string, val []byte, exp time.Duration) error { - //TODO implement me - panic("implement me") + create, err := surrealdb.Create[model](s.db, models.Table(key), &model{Key: key, Val: val, Exp: int64(exp)}) + if err != nil { + return err + } + + bytes, err := json.Marshal(create) + if err != nil { + return err + } + fmt.Println(string(bytes)) + return nil } func (s *Storage) Delete(key string) error { - //TODO implement me - panic("implement me") + _, err := surrealdb.Delete[model](s.db, models.NewRecordID(s.table, key)) + if err != nil { + return err + } + return nil } func (s *Storage) Reset() error { - //TODO implement me - panic("implement me") + _, err := surrealdb.Delete[[]model](s.db, models.Table(s.table)) + if err != nil { + return err + } + return nil } func (s *Storage) Close() error { - //TODO implement me - panic("implement me") + return s.db.Close() +} + +func (s *Storage) List(table string) ([]byte, error) { + a, err := surrealdb.Select[[]map[string]interface{}, models.Table](s.db, models.Table(table)) + if err != nil { + return nil, err + } + bytes, err := json.Marshal(a) + if err != nil { + return nil, err + } + return bytes, nil } diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index bfdb97a5..45281b14 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -1,6 +1,8 @@ package surrealdb import ( + "encoding/json" + "fmt" "github.com/stretchr/testify/require" "os" "testing" @@ -17,8 +19,55 @@ func TestMain(m *testing.M) { os.Exit(code) } -func Test_Surrealdb_Get(t *testing.T) { - bytes, err := testStore.Get("") - require.NoError(t, err) - require.Nil(t, bytes) +type testData struct { + Name string `json:"name"` + Age int `json:"age"` +} + +var data = testData{ + Name: "john", + Age: 35, +} + +func Test_Surrealdb_Create(t *testing.T) { + jsonData, err := json.Marshal(data) + require.NoError(t, err) + err = testStore.Set(testConfig.DefaultTable, jsonData, 0) + require.NoError(t, err) +} + +func Test_Surrealdb_CreateAndGet(t *testing.T) { + jsonData, err := json.Marshal(data) + require.NoError(t, err) + err = testStore.Set(testConfig.DefaultTable, jsonData, 0) + require.NoError(t, err) + + get, err := testStore.Get("yy2l8qwx55wc7ksxxjiz") + require.NoError(t, err) + require.NotEmpty(t, get) + +} + +func Test_Surrealdb_ListTable(t *testing.T) { + bytes, err := testStore.List(testConfig.DefaultTable) + require.NoError(t, err) + require.NotEmpty(t, bytes) + + fmt.Println(string(bytes)) +} + +func Test_Surrealdb_Get(t *testing.T) { + get, err := testStore.Get("783njhf8t4gkwlrvapsl") + require.NoError(t, err) + require.NotEmpty(t, get) +} + +func Test_Surrealdb_Delete(t *testing.T) { + err := testStore.Delete("qzplvi8yadeymz3az09c") + require.NoError(t, err) +} + +func Test_Surrealdb_Flush(t *testing.T) { + err := testStore.Reset() + require.NoError(t, err) } From bc1d9a9bdc1703cc14fc30ccfa718482a0e8aa96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 01:21:19 +0300 Subject: [PATCH 03/27] added "testStore.Close()" to error handling --- surrealdb/config.go | 36 ++++++++-- surrealdb/go.mod | 49 +------------ surrealdb/go.sum | 139 +----------------------------------- surrealdb/surrealdb.go | 105 ++++++++++++++++----------- surrealdb/surrealdb_test.go | 59 ++++++++------- 5 files changed, 129 insertions(+), 259 deletions(-) diff --git a/surrealdb/config.go b/surrealdb/config.go index fbcc8219..bae58cbf 100644 --- a/surrealdb/config.go +++ b/surrealdb/config.go @@ -1,16 +1,40 @@ package surrealdb +// Config holds the configuration required to initialize and connect to a SurrealDB instance. +// It includes authentication credentials, namespace/database selection, and default storage settings. +// +// Fields: +// - ConnectionString: the full SurrealDB connection URL (e.g., "ws://localhost:8000"). +// - Namespace: the namespace to use when connecting to SurrealDB. +// - Database: the database name within the specified namespace. +// - Username: the SurrealDB root or application-level username for authentication. +// - Password: the associated password for the given username. +// - Access: optional field for token-based access (not always required). +// - Scope: optional scope name for scoped authentication (e.g., user login scopes). +// - DefaultTable: the default table name where key-value records will be stored. type Config struct { + // The connection URL to connect to SurrealDB ConnectionString string - Namespace string - Database string - // auth + // The namespace to be used in SurrealDB + Namespace string + + // The database to be used within the specified namespace + Database string + + // The application username to connect to SurrealDB Username string - Password string - Access string - Scope string + // The application password to connect to SurrealDB + Password string + + // Optional access token or access type + Access string + + // Optional scope for scoped logins (e.g., user-defined scopes) + Scope string + + // The default table used to store key-value records DefaultTable string } diff --git a/surrealdb/go.mod b/surrealdb/go.mod index 67788233..8b284a0c 100644 --- a/surrealdb/go.mod +++ b/surrealdb/go.mod @@ -1,6 +1,6 @@ module github.com/gofiber/storage/surrealdb/v2 -go 1.23.3 +go 1.22 require ( github.com/stretchr/testify v1.10.0 @@ -8,58 +8,13 @@ require ( ) require ( - dario.cat/mergo v1.0.1 // indirect - github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/containerd/log v0.1.0 // indirect - github.com/containerd/platforms v0.2.1 // indirect - github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/distribution/reference v0.6.0 // indirect - github.com/docker/docker v28.0.1+incompatible // indirect - github.com/docker/go-connections v0.5.0 // indirect - github.com/docker/go-units v0.5.0 // indirect - github.com/ebitengine/purego v0.8.2 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/go-logr/logr v1.4.2 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect - github.com/klauspost/compress v1.17.4 // indirect github.com/kr/text v0.2.0 // indirect - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect - github.com/magiconair/properties v1.8.9 // indirect - github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/patternmatcher v0.6.0 // indirect - github.com/moby/sys/sequential v0.5.0 // indirect - github.com/moby/sys/user v0.1.0 // indirect - github.com/moby/sys/userns v0.1.0 // indirect - github.com/moby/term v0.5.0 // indirect - github.com/morikuni/aec v1.0.0 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.1 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/shirou/gopsutil/v4 v4.25.1 // indirect - github.com/sirupsen/logrus v1.9.3 // indirect - github.com/testcontainers/testcontainers-go v0.36.0 // indirect - github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 // indirect - github.com/tklauser/go-sysconf v0.3.12 // indirect - github.com/tklauser/numcpus v0.6.1 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect - go.opentelemetry.io/otel v1.35.0 // indirect - go.opentelemetry.io/otel/metric v1.35.0 // indirect - go.opentelemetry.io/otel/trace v1.35.0 // indirect - golang.org/x/crypto v0.35.0 // indirect - golang.org/x/sys v0.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/surrealdb/go.sum b/surrealdb/go.sum index 91f0ae08..83e1e50e 100644 --- a/surrealdb/go.sum +++ b/surrealdb/go.sum @@ -1,163 +1,28 @@ -dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= -dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= -github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= -github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= -github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= -github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= -github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0= -github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= -github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= -github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= -github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= -github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= -github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= -github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= -github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= -github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= -github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= -github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= -github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= -github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= -github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= -github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs= -github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCFnk8LgmQ= github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q= -github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00= -github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0= -github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI= -github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ= -github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= -github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= -github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= -go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= -go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= -go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= -go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= -go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= -golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go index 3f693e10..c562300e 100644 --- a/surrealdb/surrealdb.go +++ b/surrealdb/surrealdb.go @@ -2,7 +2,7 @@ package surrealdb import ( "encoding/json" - "fmt" + "errors" "github.com/surrealdb/surrealdb.go" "github.com/surrealdb/surrealdb.go/pkg/models" "time" @@ -14,21 +14,30 @@ type Storage struct { table string } +// model represents a key-value storage record used in SurrealDB. +// It contains the key name, the stored byte value, and an optional expiration timestamp. +// +// Fields: +// - Key: the unique identifier for the stored item. +// - Body: the value stored as a byte slice (can represent any serialized data, such as JSON). +// - Exp: the expiration time as a Unix timestamp (0 means no expiration). type model struct { - Key string `json:"k"` - Val []byte `json:"v"` - Exp int64 `json:"e"` + Key string `json:"key"` + Body []byte `json:"body"` + Exp int64 `json:"exp"` } -func New(config ...Config) *Storage { +// New creates a new SurrealDB storage instance using the provided configuration. +// Returns an error if the connection or authentication fails. +func New(config ...Config) (*Storage, error) { cfg := configDefault(config...) db, err := surrealdb.New(cfg.ConnectionString) if err != nil { - panic(err) + return nil, err } if err = db.Use(cfg.Namespace, cfg.Database); err != nil { - panic(err) + return nil, err } authData := &surrealdb.Auth{ @@ -38,80 +47,90 @@ func New(config ...Config) *Storage { token, err := db.SignIn(authData) if err != nil { - panic(err) + return nil, err } - if err := db.Authenticate(token); err != nil { - panic(err) + if err = db.Authenticate(token); err != nil { + return nil, err } - //defer func(token string) { - // if err := db.Invalidate(); err != nil { - // panic(err) - // } - //}(token) - return &Storage{ db: db, table: cfg.DefaultTable, - } + }, nil } func (s *Storage) Get(key string) ([]byte, error) { + if len(key) == 0 { + return nil, errors.New("key is required") + } + recordID := models.NewRecordID(s.table, key) m, err := surrealdb.Select[model, models.RecordID](s.db, recordID) if err != nil { return nil, err } - bytes, err := json.Marshal(m) - if err != nil { - return nil, err + + if m.Exp > 0 && time.Now().Unix() > m.Exp { + _ = s.Delete(key) + return nil, nil } - return bytes, nil + + return m.Body, nil } func (s *Storage) Set(key string, val []byte, exp time.Duration) error { - create, err := surrealdb.Create[model](s.db, models.Table(key), &model{Key: key, Val: val, Exp: int64(exp)}) - if err != nil { - return err + if len(key) == 0 { + return errors.New("key is required") } - bytes, err := json.Marshal(create) - if err != nil { - return err + var expiresAt int64 + if exp > 0 { + expiresAt = time.Now().Add(exp).Unix() } - fmt.Println(string(bytes)) - return nil + + _, err := surrealdb.Create[model](s.db, models.NewRecordID(s.table, key), &model{ + Key: key, + Body: val, + Exp: expiresAt, + }) + return err } func (s *Storage) Delete(key string) error { - _, err := surrealdb.Delete[model](s.db, models.NewRecordID(s.table, key)) - if err != nil { - return err + if len(key) == 0 { + return errors.New("key is required") } - return nil + + _, err := surrealdb.Delete[model](s.db, models.NewRecordID(s.table, key)) + return err } func (s *Storage) Reset() error { _, err := surrealdb.Delete[[]model](s.db, models.Table(s.table)) - if err != nil { - return err - } - return nil + return err } func (s *Storage) Close() error { return s.db.Close() } -func (s *Storage) List(table string) ([]byte, error) { - a, err := surrealdb.Select[[]map[string]interface{}, models.Table](s.db, models.Table(table)) +func (s *Storage) List() ([]byte, error) { + records, err := surrealdb.Select[[]model, models.Table](s.db, models.Table(s.table)) if err != nil { return nil, err } - bytes, err := json.Marshal(a) - if err != nil { - return nil, err + + data := make(map[string][]byte, len(*records)) + now := time.Now().Unix() + + for _, item := range *records { + if item.Exp > 0 && now > item.Exp { + _ = s.Delete(item.Key) + continue + } + data[item.Key] = item.Body } - return bytes, nil + + return json.Marshal(data) } diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index 45281b14..f88474dc 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -1,7 +1,6 @@ package surrealdb import ( - "encoding/json" "fmt" "github.com/stretchr/testify/require" "os" @@ -12,58 +11,51 @@ var testStore *Storage var testConfig = ConfigDefault func TestMain(m *testing.M) { - testStore = New(testConfig) + var err error + testStore, err = New(testConfig) + if err != nil { + panic(err) + } code := m.Run() - testStore.Close() + if err := testStore.Close(); err != nil { + fmt.Fprintf(os.Stderr, "failed to close store: %v\n", err) + } os.Exit(code) } -type testData struct { - Name string `json:"name"` - Age int `json:"age"` -} - -var data = testData{ - Name: "john", - Age: 35, -} - func Test_Surrealdb_Create(t *testing.T) { - jsonData, err := json.Marshal(data) - require.NoError(t, err) - err = testStore.Set(testConfig.DefaultTable, jsonData, 0) + err := testStore.Set("create", []byte("test12345"), 0) require.NoError(t, err) } func Test_Surrealdb_CreateAndGet(t *testing.T) { - jsonData, err := json.Marshal(data) - require.NoError(t, err) - err = testStore.Set(testConfig.DefaultTable, jsonData, 0) + err := testStore.Set("createandget", []byte("test1234"), 0) require.NoError(t, err) - get, err := testStore.Get("yy2l8qwx55wc7ksxxjiz") + get, err := testStore.Get("createandget") require.NoError(t, err) require.NotEmpty(t, get) } func Test_Surrealdb_ListTable(t *testing.T) { - bytes, err := testStore.List(testConfig.DefaultTable) + bytes, err := testStore.List() require.NoError(t, err) require.NotEmpty(t, bytes) - - fmt.Println(string(bytes)) } -func Test_Surrealdb_Get(t *testing.T) { - get, err := testStore.Get("783njhf8t4gkwlrvapsl") +func Test_Surrealdb_Get_WithNoErr(t *testing.T) { + get, err := testStore.Get("create") require.NoError(t, err) require.NotEmpty(t, get) } func Test_Surrealdb_Delete(t *testing.T) { - err := testStore.Delete("qzplvi8yadeymz3az09c") + err := testStore.Set("delete", []byte("delete1234"), 0) + require.NoError(t, err) + + err = testStore.Delete("delete") require.NoError(t, err) } @@ -71,3 +63,18 @@ func Test_Surrealdb_Flush(t *testing.T) { err := testStore.Reset() require.NoError(t, err) } + +func BenchmarkSet(b *testing.B) { + store, err := New(ConfigDefault) + if err != nil { + b.Fatalf("failed to init storage: %v", err) + } + defer store.Close() + + for i := 0; i < b.N; i++ { + err := store.Set(fmt.Sprintf("bench-key-%d", i), []byte("value"), 0) + if err != nil { + b.Errorf("Set failed: %v", err) + } + } +} From 48d18604d40dbe5d55ae1ae9a4915eb88d9f0699 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 01:41:03 +0300 Subject: [PATCH 04/27] added some tests --- surrealdb/surrealdb_test.go | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index f88474dc..dc13c069 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -1,10 +1,12 @@ package surrealdb import ( + "encoding/json" "fmt" "github.com/stretchr/testify/require" "os" "testing" + "time" ) var testStore *Storage @@ -64,6 +66,44 @@ func Test_Surrealdb_Flush(t *testing.T) { require.NoError(t, err) } +func Test_Surrealdb_GetExpired(t *testing.T) { + err := testStore.Set("temp", []byte("value"), 1*time.Second) + require.NoError(t, err) + + time.Sleep(2 * time.Second) + + val, err := testStore.Get("temp") + require.NoError(t, err) + require.Nil(t, val) +} + +func Test_Surrealdb_GetMissing(t *testing.T) { + val, err := testStore.Get("non-existent-key") + require.NoError(t, err) + require.Nil(t, val) +} + +func Test_Surrealdb_ListSkipsExpired(t *testing.T) { + _ = testStore.Reset() + + // Geçerli kayıt + _ = testStore.Set("valid", []byte("123"), 0) + + // Süresi geçen kayıt + _ = testStore.Set("expired", []byte("456"), 1*time.Second) + time.Sleep(2 * time.Second) + + // List çağrısı + data, err := testStore.List() + require.NoError(t, err) + + var result map[string][]byte + err = json.Unmarshal(data, &result) + require.NoError(t, err) + + require.Contains(t, result, "valid") + require.NotContains(t, result, "expired") +} func BenchmarkSet(b *testing.B) { store, err := New(ConfigDefault) if err != nil { From d0f987d2f8c671763caa6bb84ce65fce27e1d1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:16:33 +0300 Subject: [PATCH 05/27] added readme and github actions file --- .github/workflows/test-surrealdb.yml | 35 +++++++++ surrealdb/README.md | 105 +++++++++++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 .github/workflows/test-surrealdb.yml create mode 100644 surrealdb/README.md diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml new file mode 100644 index 00000000..d85b2249 --- /dev/null +++ b/.github/workflows/test-surrealdb.yml @@ -0,0 +1,35 @@ +on: + push: + branches: + - master + - main + paths: + - 'surrealdb/**' + pull_request: + paths: + - 'surrealdb/**' +name: "Tests SurrealDB" +jobs: + Tests: + runs-on: ubuntu-latest + strategy: + matrix: + go-version: + - 1.22.x + - 1.23.x + - 1.24.x + services: + surrealdb: + image: 'surrealdb/surrealdb:latest' + ports: + - '8000:8000' + command: ["start", "--user", "root", "--pass", "root"] + steps: + - name: Fetch Repository + uses: actions/checkout@v4 + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: '${{ matrix.go-version }}' + - name: Run Test + run: cd ./surrealdb && go test ./... -v -race diff --git a/surrealdb/README.md b/surrealdb/README.md new file mode 100644 index 00000000..0459d273 --- /dev/null +++ b/surrealdb/README.md @@ -0,0 +1,105 @@ +--- +id: surrealdb +title: SurrealDB +--- + +![Release](https://img.shields.io/github/v/tag/gofiber/storage?filter=surrealdb*) +[![Discord](https://img.shields.io/discord/704680098577514527?style=flat&label=%F0%9F%92%AC%20discord&color=00ACD7)](https://gofiber.io/discord) +![Test](https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-surrealdb.yml?label=Tests) + +A SurrealDB storage driver using [surrealdb/surrealdb.go](https://github.com/surrealdb/surrealdb.go). + +**Note: Requires Go 1.20 and above** + +### Table of Contents +- [Signatures](#signatures) +- [Installation](#installation) +- [Examples](#examples) +- [Config](#config) +- [Default Config](#default-config) + +### Signatures +```go +func New(config ...Config) (*Storage, error) +func (s *Storage) Get(key string) ([]byte, error) +func (s *Storage) Set(key string, val []byte, exp time.Duration) error +func (s *Storage) Delete(key string) error +func (s *Storage) Reset() error +func (s *Storage) Close() error +func (s *Storage) Conn() *gocb.Cluster +func (s *Storage) List() ([]byte, error) { +``` +### Installation +SurrealDB is tested on Go 1.22 and 1.23 with support for modules. +Make sure to initialize a Go module first if you haven’t already: +```bash +go get github.com/gofiber/storage/surrealdb/v2 +``` + +### Examples +Import the storage package. +```go +import "github.com/gofiber/storage/surrealdb/v2" +``` + +You can use the following possibilities to create a storage: +```go +// Initialize default config +store, err := surrealdb.New() + +// Initialize SurrealDB storage with custom config +store, err := surrealdb.New(Config{ +ConnectionString: "ws://localhost:8000", +Namespace: "fiber_storage", +Database: "fiber_storage", +Username: "root", +Password: "root", +Access: "full", +Scope: "all", +DefaultTable: "fiber_storage", +}) +``` + +### Config +```go +type Config struct { +// The connection URL to connect to SurrealDB +ConnectionString string + +// The namespace to be used in SurrealDB +Namespace string + +// The database to be used within the specified namespace +Database string + +// The application username to connect to SurrealDB +Username string + +// The application password to connect to SurrealDB +Password string + +// Optional access token or access type +Access string + +// Optional scope for scoped logins (e.g., user-defined scopes) +Scope string + +// The default table used to store key-value records +DefaultTable string +} +``` + +### Default Config +```go +// ConfigDefault is the default config +var ConfigDefault = Config{ +ConnectionString: "ws://localhost:8000", +Namespace: "fiber_storage", +Database: "fiber_storage", +Username: "root", +Password: "root", +Access: "full", +Scope: "all", +DefaultTable: "fiber_storage", +} +``` From 0c639e37cae8ad893add12c062109db464f37dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:30:20 +0300 Subject: [PATCH 06/27] waiting for surrealdb --- .github/workflows/test-surrealdb.yml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml index d85b2249..3794c0e1 100644 --- a/.github/workflows/test-surrealdb.yml +++ b/.github/workflows/test-surrealdb.yml @@ -23,13 +23,21 @@ jobs: image: 'surrealdb/surrealdb:latest' ports: - '8000:8000' - command: ["start", "--user", "root", "--pass", "root"] + command: [ "start", "--user", "root", "--pass", "root" ] steps: - name: Fetch Repository uses: actions/checkout@v4 - - name: Install Go - uses: actions/setup-go@v5 - with: - go-version: '${{ matrix.go-version }}' - - name: Run Test - run: cd ./surrealdb && go test ./... -v -race + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version: '${{ matrix.go-version }}' + + - name: Wait for SurrealDB + run: | + for i in {1..15}; do + nc -z localhost 8000 && echo "SurrealDB is up!" && break + echo "Waiting for SurrealDB..." + sleep 2 + done + - name: Run Test + run: cd ./surrealdb && go test ./... -v -race From 7306bb3b4cf79d817b443924d1d52ed6bb2e4696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:42:05 +0300 Subject: [PATCH 07/27] refactored yml files --- .github/workflows/benchmark.yml | 6 +++++- .github/workflows/test-surrealdb.yml | 10 ++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 66da8d39..d656bb96 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -109,7 +109,11 @@ jobs: run: | docker run --name scylladb -p 9042:9042 -p 19042:19042 -p 9160:9160 -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9180:9180 -d scylladb/scylla:latest --broadcast-address 127.0.0.1 --listen-address 0.0.0.0 --broadcast-rpc-address 127.0.0.1 sleep 15 # Wait for ScyllaDb to initialize - + - name: Install SurrealDB + if: ${{ matrix.package == 'surrealdb' }} + run: | + docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root + sleep 30 # wait for SurrealDb to initialize - name: Setup Redis if: ${{ matrix.package == 'redis' || matrix.package == 'rueidis' }} uses: shogo82148/actions-setup-redis@v1 diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml index 3794c0e1..ef8ffdd3 100644 --- a/.github/workflows/test-surrealdb.yml +++ b/.github/workflows/test-surrealdb.yml @@ -32,12 +32,10 @@ jobs: with: go-version: '${{ matrix.go-version }}' - - name: Wait for SurrealDB + - name: Run ScyllaDb run: | - for i in {1..15}; do - nc -z localhost 8000 && echo "SurrealDB is up!" && break - echo "Waiting for SurrealDB..." - sleep 2 - done + docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root + sleep 30 # Wait for SurrealDb to initialize + - name: Run Test run: cd ./surrealdb && go test ./... -v -race From dfec0c6f76ffda091f2e17e2889349b87800754d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:46:05 +0300 Subject: [PATCH 08/27] added reset to the benchmark --- surrealdb/surrealdb_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index dc13c069..5679180e 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -110,6 +110,7 @@ func BenchmarkSet(b *testing.B) { b.Fatalf("failed to init storage: %v", err) } defer store.Close() + _ = store.Reset() for i := 0; i < b.N; i++ { err := store.Set(fmt.Sprintf("bench-key-%d", i), []byte("value"), 0) From af43d028309c789f1d889528188c57f4c307f81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:51:31 +0300 Subject: [PATCH 09/27] changed benchmark key --- surrealdb/surrealdb_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index 5679180e..e0b6494d 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -110,10 +110,10 @@ func BenchmarkSet(b *testing.B) { b.Fatalf("failed to init storage: %v", err) } defer store.Close() - _ = store.Reset() for i := 0; i < b.N; i++ { - err := store.Set(fmt.Sprintf("bench-key-%d", i), []byte("value"), 0) + key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano()) + err := store.Set(fmt.Sprintf("bench-key-%d", key), []byte("value"), 0) if err != nil { b.Errorf("Set failed: %v", err) } From 05c8d3ed0fbb3015f512dbd88165e430f87772bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 02:53:07 +0300 Subject: [PATCH 10/27] format key --- surrealdb/surrealdb_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index e0b6494d..69c385e3 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -113,7 +113,7 @@ func BenchmarkSet(b *testing.B) { for i := 0; i < b.N; i++ { key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano()) - err := store.Set(fmt.Sprintf("bench-key-%d", key), []byte("value"), 0) + err := store.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0) if err != nil { b.Errorf("Set failed: %v", err) } From 4701e7152992efc5ea6e84a3b470019472dec6cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 04:43:37 +0300 Subject: [PATCH 11/27] apply review suggestions and minor fixes, except test containers --- .github/workflows/test-surrealdb.yml | 3 +-- surrealdb/README.md | 16 +++++------- surrealdb/go.mod | 4 +-- surrealdb/surrealdb.go | 16 +++++++----- surrealdb/surrealdb_test.go | 39 ++++++++++++++++------------ 5 files changed, 42 insertions(+), 36 deletions(-) diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml index ef8ffdd3..6618f73a 100644 --- a/.github/workflows/test-surrealdb.yml +++ b/.github/workflows/test-surrealdb.yml @@ -15,7 +15,6 @@ jobs: strategy: matrix: go-version: - - 1.22.x - 1.23.x - 1.24.x services: @@ -32,7 +31,7 @@ jobs: with: go-version: '${{ matrix.go-version }}' - - name: Run ScyllaDb + - name: Run SurrealDB run: | docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root sleep 30 # Wait for SurrealDb to initialize diff --git a/surrealdb/README.md b/surrealdb/README.md index 0459d273..84a252d8 100644 --- a/surrealdb/README.md +++ b/surrealdb/README.md @@ -7,10 +7,6 @@ title: SurrealDB [![Discord](https://img.shields.io/discord/704680098577514527?style=flat&label=%F0%9F%92%AC%20discord&color=00ACD7)](https://gofiber.io/discord) ![Test](https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-surrealdb.yml?label=Tests) -A SurrealDB storage driver using [surrealdb/surrealdb.go](https://github.com/surrealdb/surrealdb.go). - -**Note: Requires Go 1.20 and above** - ### Table of Contents - [Signatures](#signatures) - [Installation](#installation) @@ -26,29 +22,29 @@ func (s *Storage) Set(key string, val []byte, exp time.Duration) error func (s *Storage) Delete(key string) error func (s *Storage) Reset() error func (s *Storage) Close() error -func (s *Storage) Conn() *gocb.Cluster +func (s *Storage) Conn() *surrealdb.DB func (s *Storage) List() ([]byte, error) { ``` ### Installation -SurrealDB is tested on Go 1.22 and 1.23 with support for modules. +SurrealDB is tested on latest two version of Golang. Make sure to initialize a Go module first if you haven’t already: ```bash -go get github.com/gofiber/storage/surrealdb/v2 +go get github.com/gofiber/storage/surrealdb ``` ### Examples Import the storage package. ```go -import "github.com/gofiber/storage/surrealdb/v2" +import "github.com/gofiber/storage/surrealdb" ``` You can use the following possibilities to create a storage: ```go // Initialize default config -store, err := surrealdb.New() +store := surrealdb.New() // Initialize SurrealDB storage with custom config -store, err := surrealdb.New(Config{ +store := surrealdb.New(Config{ ConnectionString: "ws://localhost:8000", Namespace: "fiber_storage", Database: "fiber_storage", diff --git a/surrealdb/go.mod b/surrealdb/go.mod index 8b284a0c..46027166 100644 --- a/surrealdb/go.mod +++ b/surrealdb/go.mod @@ -1,6 +1,6 @@ -module github.com/gofiber/storage/surrealdb/v2 +module github.com/gofiber/storage/surrealdb -go 1.22 +go 1.23 require ( github.com/stretchr/testify v1.10.0 diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go index c562300e..44addfe2 100644 --- a/surrealdb/surrealdb.go +++ b/surrealdb/surrealdb.go @@ -29,15 +29,15 @@ type model struct { // New creates a new SurrealDB storage instance using the provided configuration. // Returns an error if the connection or authentication fails. -func New(config ...Config) (*Storage, error) { +func New(config ...Config) *Storage { cfg := configDefault(config...) db, err := surrealdb.New(cfg.ConnectionString) if err != nil { - return nil, err + panic(err) } if err = db.Use(cfg.Namespace, cfg.Database); err != nil { - return nil, err + panic(err) } authData := &surrealdb.Auth{ @@ -47,17 +47,17 @@ func New(config ...Config) (*Storage, error) { token, err := db.SignIn(authData) if err != nil { - return nil, err + panic(err) } if err = db.Authenticate(token); err != nil { - return nil, err + panic(err) } return &Storage{ db: db, table: cfg.DefaultTable, - }, nil + } } func (s *Storage) Get(key string) ([]byte, error) { @@ -115,6 +115,10 @@ func (s *Storage) Close() error { return s.db.Close() } +func (s *Storage) Conn() *surrealdb.DB { + return s.db +} + func (s *Storage) List() ([]byte, error) { records, err := surrealdb.Select[[]model, models.Table](s.db, models.Table(s.table)) if err != nil { diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index 69c385e3..bc574675 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -13,11 +13,7 @@ var testStore *Storage var testConfig = ConfigDefault func TestMain(m *testing.M) { - var err error - testStore, err = New(testConfig) - if err != nil { - panic(err) - } + testStore = New(testConfig) code := m.Run() if err := testStore.Close(); err != nil { @@ -86,14 +82,11 @@ func Test_Surrealdb_GetMissing(t *testing.T) { func Test_Surrealdb_ListSkipsExpired(t *testing.T) { _ = testStore.Reset() - // Geçerli kayıt _ = testStore.Set("valid", []byte("123"), 0) - // Süresi geçen kayıt _ = testStore.Set("expired", []byte("456"), 1*time.Second) time.Sleep(2 * time.Second) - // List çağrısı data, err := testStore.List() require.NoError(t, err) @@ -104,18 +97,32 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) { require.Contains(t, result, "valid") require.NotContains(t, result, "expired") } + func BenchmarkSet(b *testing.B) { - store, err := New(ConfigDefault) - if err != nil { - b.Fatalf("failed to init storage: %v", err) - } + store := New(ConfigDefault) defer store.Close() for i := 0; i < b.N; i++ { key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano()) - err := store.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0) - if err != nil { - b.Errorf("Set failed: %v", err) - } + store.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0) + } +} + +func BenchmarkGet(b *testing.B) { + store := New(ConfigDefault) + defer store.Close() + store.Reset() + + key := "bench-get-key" + value := []byte("some-value") + + err := store.Set(key, value, 0) + if err != nil { + b.Fatalf("failed to prepare test value: %v", err) + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + store.Get(key) } } From f13d0882af361c01b0041f09b80f85d2bfd45d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 05:15:00 +0300 Subject: [PATCH 12/27] added testcontainers for testing --- surrealdb/go.mod | 50 ++++++++++++- surrealdb/go.sum | 135 ++++++++++++++++++++++++++++++++++++ surrealdb/surrealdb_test.go | 121 ++++++++++++++++++++++++++------ 3 files changed, 283 insertions(+), 23 deletions(-) diff --git a/surrealdb/go.mod b/surrealdb/go.mod index 46027166..aa87ddbe 100644 --- a/surrealdb/go.mod +++ b/surrealdb/go.mod @@ -1,6 +1,8 @@ module github.com/gofiber/storage/surrealdb -go 1.23 +go 1.23.0 + +toolchain go1.23.3 require ( github.com/stretchr/testify v1.10.0 @@ -8,13 +10,59 @@ require ( ) require ( + dario.cat/mergo v1.0.1 // indirect + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/platforms v0.2.1 // indirect + github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/distribution/reference v0.6.0 // indirect + github.com/docker/docker v28.0.1+incompatible // indirect + github.com/docker/go-connections v0.5.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/ebitengine/purego v0.8.2 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/kr/text v0.2.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/magiconair/properties v1.8.9 // indirect + github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/patternmatcher v0.6.0 // indirect + github.com/moby/sys/sequential v0.5.0 // indirect + github.com/moby/sys/user v0.1.0 // indirect + github.com/moby/sys/userns v0.1.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/morikuni/aec v1.0.0 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.1 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/shirou/gopsutil/v4 v4.25.1 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/testcontainers/testcontainers-go v0.36.0 // indirect + github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect github.com/x448/float16 v0.8.4 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.35.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/trace v1.35.0 // indirect + golang.org/x/crypto v0.35.0 // indirect + golang.org/x/sys v0.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/surrealdb/go.sum b/surrealdb/go.sum index 83e1e50e..98417ab9 100644 --- a/surrealdb/go.sum +++ b/surrealdb/go.sum @@ -1,28 +1,163 @@ +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= +github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= +github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= +github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0= +github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= +github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= +github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= +github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= +github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= +github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs= +github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCFnk8LgmQ= github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q= +github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00= +github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0= +github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI= +github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= +golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index bc574675..e611736b 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -1,34 +1,78 @@ package surrealdb import ( + "context" "encoding/json" "fmt" "github.com/stretchr/testify/require" + "github.com/testcontainers/testcontainers-go" + "github.com/testcontainers/testcontainers-go/modules/surrealdb" "os" "testing" "time" ) -var testStore *Storage -var testConfig = ConfigDefault +var ( + // surrealDb is the default image used for running surrealdb in tests. + surrealDb = "surrealdb/surrealdb:latest" + surrealDbImageEnvVar string = "TEST_SURREALDB_IMAGE" + surrealDbUser string = "root" + surrealDbPass string = "root" +) -func TestMain(m *testing.M) { - testStore = New(testConfig) +func newTestStore(t testing.TB) (*Storage, error) { + t.Helper() - code := m.Run() - if err := testStore.Close(); err != nil { - fmt.Fprintf(os.Stderr, "failed to close store: %v\n", err) + img := surrealDb + if imgFromEnv := os.Getenv(surrealDbImageEnvVar); imgFromEnv != "" { + img = imgFromEnv } - os.Exit(code) + surrealdbContainer, err := surrealdb.Run(context.Background(), img) + if err != nil { + return nil, err + } + + testcontainers.CleanupContainer(t, surrealdbContainer) + + host, err := surrealdbContainer.Host(context.Background()) + if err != nil { + return nil, err + } + + port, err := surrealdbContainer.MappedPort(context.Background(), "8000") + if err != nil { + return nil, err + } + + url := fmt.Sprintf("ws://%s:%s", host, port.Port()) + + return New( + Config{ + ConnectionString: url, + Namespace: "testns", + Database: "testdb", + Username: surrealDbUser, + Password: surrealDbPass, + DefaultTable: "fiber_storage", + }, + ), nil } func Test_Surrealdb_Create(t *testing.T) { - err := testStore.Set("create", []byte("test12345"), 0) + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + + err = testStore.Set("create", []byte("test12345"), 0) require.NoError(t, err) } func Test_Surrealdb_CreateAndGet(t *testing.T) { - err := testStore.Set("createandget", []byte("test1234"), 0) + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + + err = testStore.Set("createandget", []byte("test1234"), 0) require.NoError(t, err) get, err := testStore.Get("createandget") @@ -38,19 +82,34 @@ func Test_Surrealdb_CreateAndGet(t *testing.T) { } func Test_Surrealdb_ListTable(t *testing.T) { + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + bytes, err := testStore.List() require.NoError(t, err) require.NotEmpty(t, bytes) } func Test_Surrealdb_Get_WithNoErr(t *testing.T) { - get, err := testStore.Get("create") + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + + err = testStore.Set("create2", []byte("test1234"), 0) + require.NoError(t, err) + + get, err := testStore.Get("create2") require.NoError(t, err) require.NotEmpty(t, get) } func Test_Surrealdb_Delete(t *testing.T) { - err := testStore.Set("delete", []byte("delete1234"), 0) + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + + err = testStore.Set("delete", []byte("delete1234"), 0) require.NoError(t, err) err = testStore.Delete("delete") @@ -58,12 +117,20 @@ func Test_Surrealdb_Delete(t *testing.T) { } func Test_Surrealdb_Flush(t *testing.T) { - err := testStore.Reset() + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + + err = testStore.Reset() require.NoError(t, err) } func Test_Surrealdb_GetExpired(t *testing.T) { - err := testStore.Set("temp", []byte("value"), 1*time.Second) + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + + err = testStore.Set("temp", []byte("value"), 1*time.Second) require.NoError(t, err) time.Sleep(2 * time.Second) @@ -74,12 +141,20 @@ func Test_Surrealdb_GetExpired(t *testing.T) { } func Test_Surrealdb_GetMissing(t *testing.T) { + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + val, err := testStore.Get("non-existent-key") require.NoError(t, err) require.Nil(t, val) } func Test_Surrealdb_ListSkipsExpired(t *testing.T) { + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + _ = testStore.Reset() _ = testStore.Set("valid", []byte("123"), 0) @@ -99,30 +174,32 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) { } func BenchmarkSet(b *testing.B) { - store := New(ConfigDefault) - defer store.Close() + testStore, err := newTestStore(b) + require.NoError(b, err) + defer testStore.Close() for i := 0; i < b.N; i++ { key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano()) - store.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0) + testStore.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0) } } func BenchmarkGet(b *testing.B) { - store := New(ConfigDefault) - defer store.Close() - store.Reset() + testStore, err := newTestStore(b) + require.NoError(b, err) + defer testStore.Close() + testStore.Reset() key := "bench-get-key" value := []byte("some-value") - err := store.Set(key, value, 0) + err = testStore.Set(key, value, 0) if err != nil { b.Fatalf("failed to prepare test value: %v", err) } b.ResetTimer() for i := 0; i < b.N; i++ { - store.Get(key) + testStore.Get(key) } } From 685c6a67579a850c77959ccd567093812d6e9093 Mon Sep 17 00:00:00 2001 From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com> Date: Mon, 7 Apr 2025 22:47:13 -0400 Subject: [PATCH 13/27] Update test-surrealdb.yml --- .github/workflows/test-surrealdb.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml index 6618f73a..e98e7e9a 100644 --- a/.github/workflows/test-surrealdb.yml +++ b/.github/workflows/test-surrealdb.yml @@ -17,12 +17,6 @@ jobs: go-version: - 1.23.x - 1.24.x - services: - surrealdb: - image: 'surrealdb/surrealdb:latest' - ports: - - '8000:8000' - command: [ "start", "--user", "root", "--pass", "root" ] steps: - name: Fetch Repository uses: actions/checkout@v4 @@ -31,10 +25,5 @@ jobs: with: go-version: '${{ matrix.go-version }}' - - name: Run SurrealDB - run: | - docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root - sleep 30 # Wait for SurrealDb to initialize - - name: Run Test run: cd ./surrealdb && go test ./... -v -race From 496c0b684e8fe475daf9e34f32b9eb9025db9009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 8 Apr 2025 13:04:21 +0300 Subject: [PATCH 14/27] fix review comments and switch to Upsert in Set - Replaced Create with Upsert to allow overwriting existing keys - Removed trailing spaces from line 2 and 3 in README - Addressed other code review suggestions (naming, consistency, etc.) --- surrealdb/README.md | 6 +-- surrealdb/surrealdb.go | 3 +- surrealdb/surrealdb_test.go | 79 ++++++++++++++++++++++--------------- 3 files changed, 52 insertions(+), 36 deletions(-) diff --git a/surrealdb/README.md b/surrealdb/README.md index 84a252d8..a4b2cad9 100644 --- a/surrealdb/README.md +++ b/surrealdb/README.md @@ -1,6 +1,6 @@ --- -id: surrealdb -title: SurrealDB +id: surrealdb +title: SurrealDB --- ![Release](https://img.shields.io/github/v/tag/gofiber/storage?filter=surrealdb*) @@ -16,7 +16,7 @@ title: SurrealDB ### Signatures ```go -func New(config ...Config) (*Storage, error) +func New(config ...Config) (*Storage, error) func (s *Storage) Get(key string) ([]byte, error) func (s *Storage) Set(key string, val []byte, exp time.Duration) error func (s *Storage) Delete(key string) error diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go index 44addfe2..5f5382fa 100644 --- a/surrealdb/surrealdb.go +++ b/surrealdb/surrealdb.go @@ -89,7 +89,8 @@ func (s *Storage) Set(key string, val []byte, exp time.Duration) error { expiresAt = time.Now().Add(exp).Unix() } - _, err := surrealdb.Create[model](s.db, models.NewRecordID(s.table, key), &model{ + // Upsert is used instead of Create to allow overriding the same key if it already exists. + _, err := surrealdb.Upsert[model](s.db, models.NewRecordID(s.table, key), &model{ Key: key, Body: val, Exp: expiresAt, diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index e611736b..204c7301 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -63,7 +63,7 @@ func Test_Surrealdb_Create(t *testing.T) { require.NoError(t, err) defer testStore.Close() - err = testStore.Set("create", []byte("test12345"), 0) + err = testStore.Set("test", []byte("test12345"), 0) require.NoError(t, err) } @@ -72,10 +72,10 @@ func Test_Surrealdb_CreateAndGet(t *testing.T) { require.NoError(t, err) defer testStore.Close() - err = testStore.Set("createandget", []byte("test1234"), 0) + err = testStore.Set("test", []byte("test12345"), 0) require.NoError(t, err) - get, err := testStore.Get("createandget") + get, err := testStore.Get("test") require.NoError(t, err) require.NotEmpty(t, get) @@ -96,10 +96,10 @@ func Test_Surrealdb_Get_WithNoErr(t *testing.T) { require.NoError(t, err) defer testStore.Close() - err = testStore.Set("create2", []byte("test1234"), 0) + err = testStore.Set("test", []byte("test1234"), 0) require.NoError(t, err) - get, err := testStore.Get("create2") + get, err := testStore.Get("test") require.NoError(t, err) require.NotEmpty(t, get) } @@ -109,10 +109,10 @@ func Test_Surrealdb_Delete(t *testing.T) { require.NoError(t, err) defer testStore.Close() - err = testStore.Set("delete", []byte("delete1234"), 0) + err = testStore.Set("test", []byte("delete1234"), 0) require.NoError(t, err) - err = testStore.Delete("delete") + err = testStore.Delete("test") require.NoError(t, err) } @@ -121,7 +121,6 @@ func Test_Surrealdb_Flush(t *testing.T) { require.NoError(t, err) defer testStore.Close() - err = testStore.Reset() require.NoError(t, err) } @@ -155,8 +154,6 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) { require.NoError(t, err) defer testStore.Close() - _ = testStore.Reset() - _ = testStore.Set("valid", []byte("123"), 0) _ = testStore.Set("expired", []byte("456"), 1*time.Second) @@ -173,33 +170,51 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) { require.NotContains(t, result, "expired") } -func BenchmarkSet(b *testing.B) { +func Benchmark_SurrealDB_Set(b *testing.B) { testStore, err := newTestStore(b) require.NoError(b, err) defer testStore.Close() - for i := 0; i < b.N; i++ { - key := fmt.Sprintf("bench-key-%d-%d", i, time.Now().UnixNano()) - testStore.Set(fmt.Sprintf("bench-key-%s", key), []byte("value"), 0) - } -} - -func BenchmarkGet(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) - defer testStore.Close() - testStore.Reset() - - key := "bench-get-key" - value := []byte("some-value") - - err = testStore.Set(key, value, 0) - if err != nil { - b.Fatalf("failed to prepare test value: %v", err) - } - + b.ReportAllocs() b.ResetTimer() + for i := 0; i < b.N; i++ { - testStore.Get(key) + err = testStore.Set("john", []byte("doe"), 0) } + + require.NoError(b, err) +} + +func Benchmark_SurrealDB_Get(b *testing.B) { + testStore, err := newTestStore(b) + require.NoError(b, err) + defer testStore.Close() + + err = testStore.Set("john", []byte("doe"), 0) + require.NoError(b, err) + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + _, err = testStore.Get("john") + } + + require.NoError(b, err) +} + +func Benchmark_SurrealDB_SetAndDelete(b *testing.B) { + testStore, err := newTestStore(b) + require.NoError(b, err) + defer testStore.Close() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + testStore.Set("john", []byte("doe"), 0) + err = testStore.Delete("john") + } + + require.NoError(b, err) } From c425087442e45ef669d675f5020aec67763aabc8 Mon Sep 17 00:00:00 2001 From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:12:58 -0400 Subject: [PATCH 15/27] Update README.md --- surrealdb/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/surrealdb/README.md b/surrealdb/README.md index a4b2cad9..d3294b40 100644 --- a/surrealdb/README.md +++ b/surrealdb/README.md @@ -8,6 +8,7 @@ title: SurrealDB ![Test](https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-surrealdb.yml?label=Tests) ### Table of Contents + - [Signatures](#signatures) - [Installation](#installation) - [Examples](#examples) @@ -15,6 +16,7 @@ title: SurrealDB - [Default Config](#default-config) ### Signatures + ```go func New(config ...Config) (*Storage, error) func (s *Storage) Get(key string) ([]byte, error) @@ -25,20 +27,26 @@ func (s *Storage) Close() error func (s *Storage) Conn() *surrealdb.DB func (s *Storage) List() ([]byte, error) { ``` + ### Installation + SurrealDB is tested on latest two version of Golang. Make sure to initialize a Go module first if you haven’t already: + ```bash go get github.com/gofiber/storage/surrealdb ``` ### Examples + Import the storage package. + ```go import "github.com/gofiber/storage/surrealdb" ``` You can use the following possibilities to create a storage: + ```go // Initialize default config store := surrealdb.New() @@ -57,6 +65,7 @@ DefaultTable: "fiber_storage", ``` ### Config + ```go type Config struct { // The connection URL to connect to SurrealDB @@ -86,6 +95,7 @@ DefaultTable string ``` ### Default Config + ```go // ConfigDefault is the default config var ConfigDefault = Config{ From 33ac0242fc89ab3fb2b97f4dcba6d775eb8ae022 Mon Sep 17 00:00:00 2001 From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:24:24 -0400 Subject: [PATCH 16/27] Update go.mod --- surrealdb/go.mod | 1 - 1 file changed, 1 deletion(-) diff --git a/surrealdb/go.mod b/surrealdb/go.mod index aa87ddbe..8a8efbdd 100644 --- a/surrealdb/go.mod +++ b/surrealdb/go.mod @@ -2,7 +2,6 @@ module github.com/gofiber/storage/surrealdb go 1.23.0 -toolchain go1.23.3 require ( github.com/stretchr/testify v1.10.0 From bc8ed05b291552c37541144390b92674ffe98d20 Mon Sep 17 00:00:00 2001 From: Juan Calderon-Perez <835733+gaby@users.noreply.github.com> Date: Thu, 17 Apr 2025 07:25:30 -0400 Subject: [PATCH 17/27] Update benchmark.yml --- .github/workflows/benchmark.yml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index ebf60722..3c820220 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -99,18 +99,6 @@ jobs: --env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \ bitnami/etcd:latest - - name: Install ScyllaDb - if: ${{ matrix.package == 'scylladb' }} - run: | - docker run --name scylladb -p 9042:9042 -p 19042:19042 -p 9160:9160 -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9180:9180 -d scylladb/scylla:latest --broadcast-address 127.0.0.1 --listen-address 0.0.0.0 --broadcast-rpc-address 127.0.0.1 - sleep 15 - - - name: Install SurrealDB - if: ${{ matrix.package == 'surrealdb' }} - run: | - docker run --name surrealdb -p 8000:8000 -d surrealdb/surrealdb:latest start --user root --pass root - sleep 30 - - name: Setup Redis if: ${{ matrix.package == 'redis' || matrix.package == 'rueidis' }} uses: shogo82148/actions-setup-redis@v1 @@ -166,4 +154,4 @@ jobs: auto-push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} save-data-file: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} - \ No newline at end of file + From d153ddd17b862d75d0128e0b636e98a428fb143b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Wed, 23 Apr 2025 16:54:13 +0300 Subject: [PATCH 18/27] feat(surrealdb): add operational mode configuration and update tests --- .github/workflows/benchmark.yml | 1 + .github/workflows/test-surrealdb.yml | 4 +++- README.md | 3 ++- surrealdb/config.go | 8 ++++++++ surrealdb/surrealdb_test.go | 26 +++++++++++--------------- 5 files changed, 25 insertions(+), 17 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 3c820220..ad80ae08 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -133,6 +133,7 @@ jobs: TEST_NATS_IMAGE: "nats:2-alpine" TEST_POSTGRES_IMAGE: "docker.io/postgres:16-alpine" TEST_SCYLLADB_IMAGE: "scylladb/scylla:6.2" + TEST_SURREALDB_IMAGE: "surrealdb/surrealdb:latest" - name: Get Previous Benchmark Results uses: actions/cache@v4 diff --git a/.github/workflows/test-surrealdb.yml b/.github/workflows/test-surrealdb.yml index e98e7e9a..740385ee 100644 --- a/.github/workflows/test-surrealdb.yml +++ b/.github/workflows/test-surrealdb.yml @@ -26,4 +26,6 @@ jobs: go-version: '${{ matrix.go-version }}' - name: Run Test - run: cd ./surrealdb && go test ./... -v -race + env: + TEST_SURREALDB_IMAGE: surrealdb/surrealdb:latest + run: cd ./surrealdb && go test ./... -v -race \ No newline at end of file diff --git a/README.md b/README.md index 699b16e6..71f60c31 100644 --- a/README.md +++ b/README.md @@ -77,4 +77,5 @@ type Storage interface { - [ScyllaDB](./scylladb/README.md) - [SQLite3](./sqlite3/README.md) - [ClickHouse](./clickhouse/README.md) -- [Valkey](./valkey/README.md) \ No newline at end of file +- [Valkey](./valkey/README.md) +- [SurrealDB](./surrealdb/README.md) \ No newline at end of file diff --git a/surrealdb/config.go b/surrealdb/config.go index bae58cbf..301b1e05 100644 --- a/surrealdb/config.go +++ b/surrealdb/config.go @@ -36,6 +36,13 @@ type Config struct { // The default table used to store key-value records DefaultTable string + + // Mode determines the operational mode of SurrealDB. + // Accepted values: + // - "default" (requires authentication) + // - "memory" (in-memory mode, no authentication required) + // - "kv" (file-based key-value store, no authentication required) + Mode string } var ConfigDefault = Config{ @@ -47,6 +54,7 @@ var ConfigDefault = Config{ Access: "full", Scope: "all", DefaultTable: "fiber_storage", + Mode: "default", // default, kv, memory } func configDefault(config ...Config) Config { diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index 204c7301..ff9a1bd8 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -3,7 +3,6 @@ package surrealdb import ( "context" "encoding/json" - "fmt" "github.com/stretchr/testify/require" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/modules/surrealdb" @@ -22,30 +21,28 @@ var ( func newTestStore(t testing.TB) (*Storage, error) { t.Helper() + ctx := context.Background() img := surrealDb if imgFromEnv := os.Getenv(surrealDbImageEnvVar); imgFromEnv != "" { img = imgFromEnv } - surrealdbContainer, err := surrealdb.Run(context.Background(), img) + surrealdbContainer, err := surrealdb.Run( + ctx, img, + surrealdb.WithUsername(surrealDbUser), + surrealdb.WithPassword(surrealDbPass), + ) if err != nil { return nil, err } testcontainers.CleanupContainer(t, surrealdbContainer) - host, err := surrealdbContainer.Host(context.Background()) + url, err := surrealdbContainer.URL(ctx) if err != nil { return nil, err } - port, err := surrealdbContainer.MappedPort(context.Background(), "8000") - if err != nil { - return nil, err - } - - url := fmt.Sprintf("ws://%s:%s", host, port.Port()) - return New( Config{ ConnectionString: url, @@ -78,7 +75,6 @@ func Test_Surrealdb_CreateAndGet(t *testing.T) { get, err := testStore.Get("test") require.NoError(t, err) require.NotEmpty(t, get) - } func Test_Surrealdb_ListTable(t *testing.T) { @@ -132,11 +128,11 @@ func Test_Surrealdb_GetExpired(t *testing.T) { err = testStore.Set("temp", []byte("value"), 1*time.Second) require.NoError(t, err) - time.Sleep(2 * time.Second) - - val, err := testStore.Get("temp") + require.Eventually(t, func() bool { + val, _ := testStore.Get("temp") + return val == nil + }, 3*time.Second, 100*time.Millisecond) require.NoError(t, err) - require.Nil(t, val) } func Test_Surrealdb_GetMissing(t *testing.T) { From caa5078fef1b1b4333472f26a17da1293af0ac15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:12:59 +0300 Subject: [PATCH 19/27] added coderabbit suggestion --- surrealdb/README.md | 3 ++- surrealdb/config.go | 17 ++++++++++------- surrealdb/surrealdb_test.go | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/surrealdb/README.md b/surrealdb/README.md index d3294b40..698ddb3f 100644 --- a/surrealdb/README.md +++ b/surrealdb/README.md @@ -18,7 +18,8 @@ title: SurrealDB ### Signatures ```go -func New(config ...Config) (*Storage, error) +func New(config ...Config) *Storage + func (s *Storage) Get(key string) ([]byte, error) func (s *Storage) Set(key string, val []byte, exp time.Duration) error func (s *Storage) Delete(key string) error diff --git a/surrealdb/config.go b/surrealdb/config.go index 301b1e05..07bd974b 100644 --- a/surrealdb/config.go +++ b/surrealdb/config.go @@ -37,12 +37,12 @@ type Config struct { // The default table used to store key-value records DefaultTable string - // Mode determines the operational mode of SurrealDB. - // Accepted values: - // - "default" (requires authentication) - // - "memory" (in-memory mode, no authentication required) - // - "kv" (file-based key-value store, no authentication required) - Mode string + //// Mode determines the operational mode of SurrealDB. + //// Accepted values: + //// - "default" (requires authentication) + //// - "memory" (in-memory mode, no authentication required) - not supported + //// - "kv" (file-based key-value store, no authentication required) - not supported + //Mode string } var ConfigDefault = Config{ @@ -54,7 +54,6 @@ var ConfigDefault = Config{ Access: "full", Scope: "all", DefaultTable: "fiber_storage", - Mode: "default", // default, kv, memory } func configDefault(config ...Config) Config { @@ -98,5 +97,9 @@ func configDefault(config ...Config) Config { cfg.DefaultTable = ConfigDefault.DefaultTable } + //if cfg.Mode == "" { + // cfg.Mode = ConfigDefault.Mode + //} + return cfg } diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index ff9a1bd8..339cb3e5 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -110,6 +110,10 @@ func Test_Surrealdb_Delete(t *testing.T) { err = testStore.Delete("test") require.NoError(t, err) + + val, err := testStore.Get("test") + require.NoError(t, err) + require.Nil(t, val) } func Test_Surrealdb_Flush(t *testing.T) { @@ -117,7 +121,19 @@ func Test_Surrealdb_Flush(t *testing.T) { require.NoError(t, err) defer testStore.Close() + err = testStore.Set("test_key", []byte("test_value"), 0) require.NoError(t, err) + + val, err := testStore.Get("test_key") + require.NoError(t, err) + require.NotNil(t, val) + + err = testStore.Reset() + require.NoError(t, err) + + val, err = testStore.Get("test_key") + require.NoError(t, err) + require.Nil(t, val) } func Test_Surrealdb_GetExpired(t *testing.T) { From 0dea23ff24966e79b5c9424799e1d73d345a9711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Sat, 26 Apr 2025 11:22:31 +0300 Subject: [PATCH 20/27] removed Config.Mode until supported in official sdk and added connection url validation --- surrealdb/config.go | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/surrealdb/config.go b/surrealdb/config.go index 07bd974b..7fcf1224 100644 --- a/surrealdb/config.go +++ b/surrealdb/config.go @@ -1,5 +1,10 @@ package surrealdb +import ( + "log" + "strings" +) + // Config holds the configuration required to initialize and connect to a SurrealDB instance. // It includes authentication credentials, namespace/database selection, and default storage settings. // @@ -13,7 +18,7 @@ package surrealdb // - Scope: optional scope name for scoped authentication (e.g., user login scopes). // - DefaultTable: the default table name where key-value records will be stored. type Config struct { - // The connection URL to connect to SurrealDB + // WebSocket connections (ws:// or wss://) are recommended over HTTP for better reliability ConnectionString string // The namespace to be used in SurrealDB @@ -36,13 +41,6 @@ type Config struct { // The default table used to store key-value records DefaultTable string - - //// Mode determines the operational mode of SurrealDB. - //// Accepted values: - //// - "default" (requires authentication) - //// - "memory" (in-memory mode, no authentication required) - not supported - //// - "kv" (file-based key-value store, no authentication required) - not supported - //Mode string } var ConfigDefault = Config{ @@ -97,9 +95,10 @@ func configDefault(config ...Config) Config { cfg.DefaultTable = ConfigDefault.DefaultTable } - //if cfg.Mode == "" { - // cfg.Mode = ConfigDefault.Mode - //} + if !strings.HasPrefix(cfg.ConnectionString, "ws://") && !strings.HasPrefix(cfg.ConnectionString, "wss://") && + !strings.HasPrefix(cfg.ConnectionString, "http://") && !strings.HasPrefix(cfg.ConnectionString, "https://") { + log.Printf("Warning: ConnectionString %s doesn't start with ws://, wss://, http:// or https://", cfg.ConnectionString) + } return cfg } From 7496f5526c16f58c08f02bd1dcd6069ea259eb79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 29 Apr 2025 09:52:30 +0300 Subject: [PATCH 21/27] updated packages --- surrealdb/go.mod | 17 +++++++++-------- surrealdb/go.sum | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/surrealdb/go.mod b/surrealdb/go.mod index 8a8efbdd..5871f0a3 100644 --- a/surrealdb/go.mod +++ b/surrealdb/go.mod @@ -2,10 +2,11 @@ module github.com/gofiber/storage/surrealdb go 1.23.0 - require ( github.com/stretchr/testify v1.10.0 github.com/surrealdb/surrealdb.go v0.3.2 + github.com/testcontainers/testcontainers-go v0.37.0 + github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 ) require ( @@ -31,10 +32,10 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect github.com/klauspost/compress v1.17.4 // indirect - github.com/kr/text v0.2.0 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect - github.com/magiconair/properties v1.8.9 // indirect + github.com/magiconair/properties v1.8.10 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/patternmatcher v0.6.0 // indirect github.com/moby/sys/sequential v0.5.0 // indirect @@ -47,11 +48,8 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/shirou/gopsutil/v4 v4.25.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/testcontainers/testcontainers-go v0.36.0 // indirect - github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/x448/float16 v0.8.4 // indirect @@ -60,8 +58,11 @@ require ( go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/sdk v1.32.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect - golang.org/x/crypto v0.35.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/sys v0.32.0 // indirect + google.golang.org/grpc v1.70.0 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/surrealdb/go.sum b/surrealdb/go.sum index 98417ab9..0e1e9c89 100644 --- a/surrealdb/go.sum +++ b/surrealdb/go.sum @@ -1,5 +1,7 @@ dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -12,7 +14,8 @@ github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpS github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -42,10 +45,14 @@ github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRx github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= @@ -58,6 +65,8 @@ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= @@ -89,6 +98,8 @@ github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7n github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= @@ -96,6 +107,8 @@ github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCF github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q= github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00= github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0= +github.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg= +github.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM= github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI= github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= @@ -114,23 +127,33 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= +go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA= +golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -145,8 +168,17 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -155,9 +187,19 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950= +google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb h1:TLPQVbx1GJ8VKZxz52VAxl1EBgKXXbTiU9Fc5fZeLn4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= +google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= +google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= From 494ff4e03562e8686082e5b7e3fd6e609121cb11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 29 Apr 2025 09:56:36 +0300 Subject: [PATCH 22/27] updated packages2 --- surrealdb/go.mod | 35 ++++++++++++++-------------- surrealdb/go.sum | 59 +++++++++++++++++++++++++++++++++++------------- 2 files changed, 61 insertions(+), 33 deletions(-) diff --git a/surrealdb/go.mod b/surrealdb/go.mod index 5871f0a3..284a8c41 100644 --- a/surrealdb/go.mod +++ b/surrealdb/go.mod @@ -6,59 +6,60 @@ require ( github.com/stretchr/testify v1.10.0 github.com/surrealdb/surrealdb.go v0.3.2 github.com/testcontainers/testcontainers-go v0.37.0 - github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 + github.com/testcontainers/testcontainers-go/modules/surrealdb v0.37.0 ) require ( dario.cat/mergo v1.0.1 // indirect - github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/cpuguy83/dockercfg v0.3.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/docker v28.0.1+incompatible // indirect + github.com/docker/docker v28.1.1+incompatible // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/ebitengine/purego v0.8.2 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.8.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect - github.com/klauspost/compress v1.17.4 // indirect - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect github.com/magiconair/properties v1.8.10 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/go-archive v0.1.0 // indirect github.com/moby/patternmatcher v0.6.0 // indirect - github.com/moby/sys/sequential v0.5.0 // indirect - github.com/moby/sys/user v0.1.0 // indirect + github.com/moby/sys/sequential v0.6.0 // indirect + github.com/moby/sys/user v0.4.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect - github.com/moby/term v0.5.0 // indirect + github.com/moby/term v0.5.2 // indirect github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/shirou/gopsutil/v4 v4.25.1 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/shirou/gopsutil/v4 v4.25.3 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/tklauser/go-sysconf v0.3.12 // indirect - github.com/tklauser/numcpus v0.6.1 // indirect + github.com/tklauser/go-sysconf v0.3.15 // indirect + github.com/tklauser/numcpus v0.10.0 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect - go.opentelemetry.io/otel/sdk v1.32.0 // indirect + go.opentelemetry.io/otel/sdk v1.35.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect golang.org/x/crypto v0.37.0 // indirect golang.org/x/sys v0.32.0 // indirect diff --git a/surrealdb/go.sum b/surrealdb/go.sum index 0e1e9c89..4664ad09 100644 --- a/surrealdb/go.sum +++ b/surrealdb/go.sum @@ -2,12 +2,17 @@ dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= @@ -23,6 +28,8 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0= github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswggs8AdFmXQw51I= +github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -33,6 +40,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= +github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -40,6 +49,8 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -57,28 +68,38 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= -github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 h1:PpXWgLPs+Fqr325bN2FD2ISlRRztXibcX6e8f5FR5Dc= +github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= +github.com/moby/go-archive v0.1.0/go.mod h1:G9B+YoujNohJmrIYFBpSd54GTUB4lt9S+xVQvsJyFuo= github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= +github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= +github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= +github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -91,10 +112,14 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs= github.com/shirou/gopsutil/v4 v4.25.1/go.mod h1:RoUCUpndaJFtT+2zsZzzmhvbfGoDCJ7nFXKJf8GqJbI= +github.com/shirou/gopsutil/v4 v4.25.3 h1:SeA68lsu8gLggyMbmCn8cmp97V1TI9ld9sVzAUcKcKE= +github.com/shirou/gopsutil/v4 v4.25.3/go.mod h1:xbuxyoZj+UsgnZrENu3lQivsngRR5BdjbJwf2fv4szA= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -105,16 +130,18 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/surrealdb/surrealdb.go v0.3.2 h1:ynBbD0onW+M4BXhZ1+dDdVnNcaqBqFlHaHCFnk8LgmQ= github.com/surrealdb/surrealdb.go v0.3.2/go.mod h1:A0zahuChOaJtvTm2lefQnV+6aJtgqNLm9TIdYhZbw1Q= -github.com/testcontainers/testcontainers-go v0.36.0 h1:YpffyLuHtdp5EUsI5mT4sRw8GZhO/5ozyDT1xWGXt00= -github.com/testcontainers/testcontainers-go v0.36.0/go.mod h1:yk73GVJ0KUZIHUtFna6MO7QS144qYpoY8lEEtU9Hed0= github.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg= github.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM= -github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0 h1:x5kibhWJYAZe6GKXYlJyljVkBt7X9KRNJ4fj65AO6gI= -github.com/testcontainers/testcontainers-go/modules/surrealdb v0.36.0/go.mod h1:mocRRy6nXfjM75723YS6KoIoUt5rldiYxRvC9niLceQ= +github.com/testcontainers/testcontainers-go/modules/surrealdb v0.37.0 h1:t+q4bKHoRGJ5815GvXqtH8h6HUvpzDGRuuPptdTnTtU= +github.com/testcontainers/testcontainers-go/modules/surrealdb v0.37.0/go.mod h1:Q6VDM9oKs2FAb1H+sH5EiCaXfLVjhNaoG++rAAMtsFE= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/go-sysconf v0.3.15 h1:VE89k0criAymJ/Os65CSn1IXaol+1wrsFHEB8Ol49K4= +github.com/tklauser/go-sysconf v0.3.15/go.mod h1:Dmjwr6tYFIseJw7a3dRLJfsHAMXZ3nEnL/aZY+0IuI4= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/tklauser/numcpus v0.10.0 h1:18njr6LDBk1zuna922MgdjQuJFjrdppsZG60sHGfjso= +github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XVuEeem8LsQ= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -125,6 +152,8 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U= @@ -135,6 +164,7 @@ go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/ go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= +go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= @@ -142,8 +172,6 @@ go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v8 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= -golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -152,8 +180,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.36.0 h1:vWF2fRbw4qslQsQzgFqZff+BItCvGFQqKzKIzx1rmoA= -golang.org/x/net v0.36.0/go.mod h1:bFmbeoIPfrw4sMHNhb4J9f6+tPziuGjq7Jk/38fxi1I= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -164,19 +192,17 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= -golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -203,3 +229,4 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= From e81b66dbf45e5e2b9acc2bc8744d95d8c120aa3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Yasir=20Na=C3=A7?= <76746351+aliyasirnac@users.noreply.github.com> Date: Tue, 29 Apr 2025 10:14:14 +0300 Subject: [PATCH 23/27] added garbage collector --- surrealdb/README.md | 5 +++++ surrealdb/config.go | 9 ++++++++ surrealdb/surrealdb.go | 45 ++++++++++++++++++++++++++++++++----- surrealdb/surrealdb_test.go | 21 +++++++++++++++++ 4 files changed, 75 insertions(+), 5 deletions(-) diff --git a/surrealdb/README.md b/surrealdb/README.md index 698ddb3f..ec32da04 100644 --- a/surrealdb/README.md +++ b/surrealdb/README.md @@ -62,6 +62,7 @@ Password: "root", Access: "full", Scope: "all", DefaultTable: "fiber_storage", +GCInterval: time.Second * 10, }) ``` @@ -92,6 +93,9 @@ Scope string // The default table used to store key-value records DefaultTable string + +// Optional. Default is 10 * time.Second +GCInterval time.Duration } ``` @@ -108,5 +112,6 @@ Password: "root", Access: "full", Scope: "all", DefaultTable: "fiber_storage", +GCInterval: time.Second * 10, } ``` diff --git a/surrealdb/config.go b/surrealdb/config.go index 7fcf1224..7179ccbb 100644 --- a/surrealdb/config.go +++ b/surrealdb/config.go @@ -3,6 +3,7 @@ package surrealdb import ( "log" "strings" + "time" ) // Config holds the configuration required to initialize and connect to a SurrealDB instance. @@ -41,6 +42,9 @@ type Config struct { // The default table used to store key-value records DefaultTable string + + // Optional. Default is 10 * time.Second + GCInterval time.Duration } var ConfigDefault = Config{ @@ -52,6 +56,7 @@ var ConfigDefault = Config{ Access: "full", Scope: "all", DefaultTable: "fiber_storage", + GCInterval: time.Second * 10, } func configDefault(config ...Config) Config { @@ -100,5 +105,9 @@ func configDefault(config ...Config) Config { log.Printf("Warning: ConnectionString %s doesn't start with ws://, wss://, http:// or https://", cfg.ConnectionString) } + if int(cfg.GCInterval.Seconds()) <= 0 { + cfg.GCInterval = ConfigDefault.GCInterval + } + return cfg } diff --git a/surrealdb/surrealdb.go b/surrealdb/surrealdb.go index 5f5382fa..0d5f23a2 100644 --- a/surrealdb/surrealdb.go +++ b/surrealdb/surrealdb.go @@ -10,8 +10,10 @@ import ( // Storage interface that is implemented by storage providers type Storage struct { - db *surrealdb.DB - table string + db *surrealdb.DB + table string + stopGC chan struct{} + interval time.Duration } // model represents a key-value storage record used in SurrealDB. @@ -54,10 +56,15 @@ func New(config ...Config) *Storage { panic(err) } - return &Storage{ - db: db, - table: cfg.DefaultTable, + storage := &Storage{ + db: db, + table: cfg.DefaultTable, + stopGC: make(chan struct{}), + interval: cfg.GCInterval, } + + go storage.gc() + return storage } func (s *Storage) Get(key string) ([]byte, error) { @@ -113,6 +120,7 @@ func (s *Storage) Reset() error { } func (s *Storage) Close() error { + close(s.stopGC) return s.db.Close() } @@ -139,3 +147,30 @@ func (s *Storage) List() ([]byte, error) { return json.Marshal(data) } + +func (s *Storage) gc() { + ticker := time.NewTicker(s.interval) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + s.cleanupExpired() + case <-s.stopGC: + return + } + } +} + +func (s *Storage) cleanupExpired() { + records, err := surrealdb.Select[[]model, models.Table](s.db, models.Table(s.table)) + if err != nil { + return + } + now := time.Now().Unix() + for _, item := range *records { + if item.Exp > 0 && now > item.Exp { + _ = s.Delete(item.Key) + } + } +} diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index 339cb3e5..7bf353b8 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -182,6 +182,27 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) { require.NotContains(t, result, "expired") } +func Test_Surrealdb_GarbageCollector_RemovesExpiredKeys(t *testing.T) { + testStore, err := newTestStore(t) + require.NoError(t, err) + defer testStore.Close() + + err = testStore.Set("temp_key", []byte("temp_value"), 1*time.Second) + require.NoError(t, err) + + val, err := testStore.Get("temp_key") + require.NoError(t, err) + require.NotNil(t, val) + + time.Sleep(3 * time.Second) + + require.Eventually(t, func() bool { + val, err = testStore.Get("temp_key") + require.NoError(t, err) + return val == nil + }, 3*time.Second, 300*time.Millisecond) +} + func Benchmark_SurrealDB_Set(b *testing.B) { testStore, err := newTestStore(b) require.NoError(b, err) From 3a1a37e00fe559a3f151ee508b8a0a364839cdab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 07:26:27 +0000 Subject: [PATCH 24/27] chore(deps): bump github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue Bumps [github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue](https://github.com/aws/aws-sdk-go-v2) from 1.18.14 to 1.19.0. - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/v1.19.0/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.14...v1.19.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue dependency-version: 1.19.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- dynamodb/go.mod | 2 +- dynamodb/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dynamodb/go.mod b/dynamodb/go.mod index bb586dc5..bc92a99b 100644 --- a/dynamodb/go.mod +++ b/dynamodb/go.mod @@ -6,7 +6,7 @@ require ( github.com/aws/aws-sdk-go-v2 v1.36.3 github.com/aws/aws-sdk-go-v2/config v1.29.14 github.com/aws/aws-sdk-go-v2/credentials v1.17.67 - github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.18.14 + github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.19.0 github.com/aws/aws-sdk-go-v2/service/dynamodb v1.43.1 github.com/stretchr/testify v1.10.0 github.com/testcontainers/testcontainers-go v0.37.0 diff --git a/dynamodb/go.sum b/dynamodb/go.sum index 9ccdfadd..b612c4ba 100644 --- a/dynamodb/go.sum +++ b/dynamodb/go.sum @@ -12,8 +12,8 @@ github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqW github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g= github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9Bc4+D7nZua0KGYOM= github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ= -github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.18.14 h1:Qvnm8jtST/nidLDVHASEEVmB8neXuoA8O7u3if+nGYw= -github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.18.14/go.mod h1:xC/rXqmBJnY3SRUP+qAWg+ryTzDcpiUQiOJGN5in9Dg= +github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.19.0 h1:F3W0YqWZrpCcelbvXMP9LWSTOI620aAq1+8fZ/71TBg= +github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.19.0/go.mod h1:34X+UzFJwsQfyk5U1hYiCO/gv9ZVL+Hh8w+bJQ6+HbU= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= From e91e04b166cd6f3c448c3e61f491ba28e5ba4bb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 07:26:36 +0000 Subject: [PATCH 25/27] chore(deps): bump github.com/redis/go-redis/v9 in /redis Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) from 9.7.3 to 9.8.0. - [Release notes](https://github.com/redis/go-redis/releases) - [Changelog](https://github.com/redis/go-redis/blob/master/CHANGELOG.md) - [Commits](https://github.com/redis/go-redis/compare/v9.7.3...v9.8.0) --- updated-dependencies: - dependency-name: github.com/redis/go-redis/v9 dependency-version: 9.8.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- redis/go.mod | 4 ++-- redis/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/redis/go.mod b/redis/go.mod index 0ab3209e..fa44db03 100644 --- a/redis/go.mod +++ b/redis/go.mod @@ -3,7 +3,7 @@ module github.com/gofiber/storage/redis/v3 go 1.23.0 require ( - github.com/redis/go-redis/v9 v9.7.3 + github.com/redis/go-redis/v9 v9.8.0 github.com/stretchr/testify v1.10.0 github.com/testcontainers/testcontainers-go v0.37.0 github.com/testcontainers/testcontainers-go/modules/redis v0.37.0 @@ -14,7 +14,7 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/cpuguy83/dockercfg v0.3.2 // indirect diff --git a/redis/go.sum b/redis/go.sum index e870d7b3..e2c16f0c 100644 --- a/redis/go.sum +++ b/redis/go.sum @@ -12,8 +12,8 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= @@ -93,8 +93,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= -github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= +github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI= +github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/shirou/gopsutil/v4 v4.25.1 h1:QSWkTc+fu9LTAWfkZwZ6j8MSUk4A2LV7rbH0ZqmLjXs= From 722e242fdfcb43e6804f215e5eed0dbc21265561 Mon Sep 17 00:00:00 2001 From: aliyasirnac Date: Thu, 1 May 2025 17:37:09 +0300 Subject: [PATCH 26/27] changed testStore signature --- surrealdb/surrealdb_test.go | 70 ++++++++++++++----------------------- 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/surrealdb/surrealdb_test.go b/surrealdb/surrealdb_test.go index 7bf353b8..6b4fd276 100644 --- a/surrealdb/surrealdb_test.go +++ b/surrealdb/surrealdb_test.go @@ -19,7 +19,7 @@ var ( surrealDbPass string = "root" ) -func newTestStore(t testing.TB) (*Storage, error) { +func newTestStore(t testing.TB) *Storage { t.Helper() ctx := context.Background() @@ -32,16 +32,12 @@ func newTestStore(t testing.TB) (*Storage, error) { surrealdb.WithUsername(surrealDbUser), surrealdb.WithPassword(surrealDbPass), ) - if err != nil { - return nil, err - } + require.NoError(t, err) testcontainers.CleanupContainer(t, surrealdbContainer) url, err := surrealdbContainer.URL(ctx) - if err != nil { - return nil, err - } + require.NoError(t, err) return New( Config{ @@ -52,24 +48,22 @@ func newTestStore(t testing.TB) (*Storage, error) { Password: surrealDbPass, DefaultTable: "fiber_storage", }, - ), nil + ) } func Test_Surrealdb_Create(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("test12345"), 0) + err := testStore.Set("test", []byte("test12345"), 0) require.NoError(t, err) } func Test_Surrealdb_CreateAndGet(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("test12345"), 0) + err := testStore.Set("test", []byte("test12345"), 0) require.NoError(t, err) get, err := testStore.Get("test") @@ -78,8 +72,7 @@ func Test_Surrealdb_CreateAndGet(t *testing.T) { } func Test_Surrealdb_ListTable(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() bytes, err := testStore.List() @@ -88,11 +81,10 @@ func Test_Surrealdb_ListTable(t *testing.T) { } func Test_Surrealdb_Get_WithNoErr(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("test1234"), 0) + err := testStore.Set("test", []byte("test1234"), 0) require.NoError(t, err) get, err := testStore.Get("test") @@ -101,11 +93,10 @@ func Test_Surrealdb_Get_WithNoErr(t *testing.T) { } func Test_Surrealdb_Delete(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test", []byte("delete1234"), 0) + err := testStore.Set("test", []byte("delete1234"), 0) require.NoError(t, err) err = testStore.Delete("test") @@ -117,11 +108,10 @@ func Test_Surrealdb_Delete(t *testing.T) { } func Test_Surrealdb_Flush(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("test_key", []byte("test_value"), 0) + err := testStore.Set("test_key", []byte("test_value"), 0) require.NoError(t, err) val, err := testStore.Get("test_key") @@ -137,11 +127,10 @@ func Test_Surrealdb_Flush(t *testing.T) { } func Test_Surrealdb_GetExpired(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("temp", []byte("value"), 1*time.Second) + err := testStore.Set("temp", []byte("value"), 1*time.Second) require.NoError(t, err) require.Eventually(t, func() bool { @@ -152,8 +141,7 @@ func Test_Surrealdb_GetExpired(t *testing.T) { } func Test_Surrealdb_GetMissing(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() val, err := testStore.Get("non-existent-key") @@ -162,8 +150,7 @@ func Test_Surrealdb_GetMissing(t *testing.T) { } func Test_Surrealdb_ListSkipsExpired(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() _ = testStore.Set("valid", []byte("123"), 0) @@ -183,11 +170,10 @@ func Test_Surrealdb_ListSkipsExpired(t *testing.T) { } func Test_Surrealdb_GarbageCollector_RemovesExpiredKeys(t *testing.T) { - testStore, err := newTestStore(t) - require.NoError(t, err) + testStore := newTestStore(t) defer testStore.Close() - err = testStore.Set("temp_key", []byte("temp_value"), 1*time.Second) + err := testStore.Set("temp_key", []byte("temp_value"), 1*time.Second) require.NoError(t, err) val, err := testStore.Get("temp_key") @@ -204,13 +190,13 @@ func Test_Surrealdb_GarbageCollector_RemovesExpiredKeys(t *testing.T) { } func Benchmark_SurrealDB_Set(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() + var err error for i := 0; i < b.N; i++ { err = testStore.Set("john", []byte("doe"), 0) } @@ -219,11 +205,10 @@ func Benchmark_SurrealDB_Set(b *testing.B) { } func Benchmark_SurrealDB_Get(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() - err = testStore.Set("john", []byte("doe"), 0) + err := testStore.Set("john", []byte("doe"), 0) require.NoError(b, err) b.ReportAllocs() @@ -237,13 +222,12 @@ func Benchmark_SurrealDB_Get(b *testing.B) { } func Benchmark_SurrealDB_SetAndDelete(b *testing.B) { - testStore, err := newTestStore(b) - require.NoError(b, err) + testStore := newTestStore(b) defer testStore.Close() b.ReportAllocs() b.ResetTimer() - + var err error for i := 0; i < b.N; i++ { testStore.Set("john", []byte("doe"), 0) err = testStore.Delete("john") From 32f7699d7a472d8342b3adc9a49976bf0c49c58e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 May 2025 07:55:34 +0000 Subject: [PATCH 27/27] chore(deps): bump github.com/neo4j/neo4j-go-driver/v5 in /neo4j Bumps [github.com/neo4j/neo4j-go-driver/v5](https://github.com/neo4j/neo4j-go-driver) from 5.28.0 to 5.28.1. - [Release notes](https://github.com/neo4j/neo4j-go-driver/releases) - [Commits](https://github.com/neo4j/neo4j-go-driver/compare/v5.28.0...v5.28.1) --- updated-dependencies: - dependency-name: github.com/neo4j/neo4j-go-driver/v5 dependency-version: 5.28.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- neo4j/go.mod | 2 +- neo4j/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/neo4j/go.mod b/neo4j/go.mod index 9751acbd..7141a6a7 100644 --- a/neo4j/go.mod +++ b/neo4j/go.mod @@ -3,7 +3,7 @@ module github.com/gofiber/storage/neo4j go 1.23.0 require ( - github.com/neo4j/neo4j-go-driver/v5 v5.28.0 + github.com/neo4j/neo4j-go-driver/v5 v5.28.1 github.com/stretchr/testify v1.10.0 github.com/testcontainers/testcontainers-go v0.37.0 github.com/testcontainers/testcontainers-go/modules/neo4j v0.37.0 diff --git a/neo4j/go.sum b/neo4j/go.sum index 2a1e5051..40f9bc0e 100644 --- a/neo4j/go.sum +++ b/neo4j/go.sum @@ -73,8 +73,8 @@ github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/neo4j/neo4j-go-driver/v5 v5.28.0 h1:chDT68PHNa8JZRmjSkGzAbk1weLWo4rMtDvccvpobg0= -github.com/neo4j/neo4j-go-driver/v5 v5.28.0/go.mod h1:Vff8OwT7QpLm7L2yYr85XNWe9Rbqlbeb9asNXJTHO4k= +github.com/neo4j/neo4j-go-driver/v5 v5.28.1 h1:RKWQW7wTgYAY2fU9S+9LaJ9OwRPbRc0I17tlT7nDmAY= +github.com/neo4j/neo4j-go-driver/v5 v5.28.1/go.mod h1:Vff8OwT7QpLm7L2yYr85XNWe9Rbqlbeb9asNXJTHO4k= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=