From 21d7aa1d9d84e4c992d072ba0e04aa588f3cfd03 Mon Sep 17 00:00:00 2001 From: pshubham Date: Thu, 17 Oct 2024 14:03:51 +0530 Subject: [PATCH 1/2] Adding support for pretty response --- go.mod | 9 ++-- go.sum | 48 ++++++++++++++++++- internal/db/dicedb.go | 39 +++------------ internal/middleware/ratelimiter.go | 2 +- .../tests/integration/commands/hget_test.go | 6 +-- .../integration/commands/hgetall_test.go | 4 +- .../tests/integration/commands/hset_test.go | 6 +-- 7 files changed, 69 insertions(+), 45 deletions(-) diff --git a/go.mod b/go.mod index c95fc69..1323bff 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,14 @@ module server -go 1.22.5 +go 1.23 + +toolchain go1.23.0 require ( - github.com/dicedb/go-dice v0.0.0-20240820180649-d97f15fca831 + github.com/dicedb/dicedb-go v0.0.0-20241015181607-d31c1df12107 github.com/joho/godotenv v1.5.1 github.com/stretchr/testify v1.9.0 + github.com/testcontainers/testcontainers-go v0.33.0 ) require ( @@ -31,6 +34,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/google/uuid v1.6.0 // 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.7 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect @@ -47,7 +51,6 @@ require ( github.com/shirou/gopsutil/v3 v3.23.12 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/testcontainers/testcontainers-go v0.33.0 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect diff --git a/go.sum b/go.sum index 2d7d869..263cec5 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/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= @@ -20,11 +22,18 @@ 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.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E= github.com/cpuguy83/dockercfg v0.3.1/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= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dicedb/dicedb-go v0.0.0-20241011194507-ad62a2dfc08e h1:H53752EPCePdIz7ceoYNIfiHWpiSrKE1rVKXnSyV8KI= +github.com/dicedb/dicedb-go v0.0.0-20241011194507-ad62a2dfc08e/go.mod h1:luVXhxSZ0TkZvA3dCqDPQ0WaLx5AZ29+/5gDyWq1Xi0= +github.com/dicedb/dicedb-go v0.0.0-20241015181607-d31c1df12107 h1:sL5dXtCsogSMP/afS2K2vVMMYFqJy02EezeRXpZnGy0= +github.com/dicedb/dicedb-go v0.0.0-20241015181607-d31c1df12107/go.mod h1:iaOsphlvjJ87VL/5d32ZgeQYxhYS51k7/bvFKro7lWk= github.com/dicedb/go-dice v0.0.0-20240820180649-d97f15fca831 h1:Cqyj9WCtoobN6++bFbDSe27q94SPwJD9Z0wmu+SDRuk= github.com/dicedb/go-dice v0.0.0-20240820180649-d97f15fca831/go.mod h1:8+VZrr14c2LW8fW4tWZ8Bv3P2lfvlg+PpsSn5cWWuiQ= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= @@ -48,15 +57,22 @@ 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.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= 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.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +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.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -83,10 +99,13 @@ 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/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/shirou/gopsutil/v3 v3.23.12 h1:z90NtUkp3bMtmICZKpC4+WaknU1eXtp5vtbQ11DgpE4= github.com/shirou/gopsutil/v3 v3.23.12/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -113,10 +132,18 @@ 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.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +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.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o= +go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +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= @@ -128,6 +155,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.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= 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= @@ -143,8 +172,14 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= 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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +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= @@ -153,9 +188,20 @@ 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= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13 h1:vlzZttNJGVqTsRFU9AmdnrcO1Znh8Ew9kCD//yjigk0= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb h1:lK0oleSc7IQsUxO3U5TjL9DWlsxpEBemh+zpB7IqhWI= +google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97 h1:6GQBEOdGkX6MMTLT9V+TjtIRZCw9VPD5Z+yHY9wMgS0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231002182017-d307bd883b97/go.mod h1:v7nGkzlmW8P3n/bKmWBn2WpBjpOEx8Q6gMueudAmKfY= +google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= +google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 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= diff --git a/internal/db/dicedb.go b/internal/db/dicedb.go index 7da8f9f..1f2e53a 100644 --- a/internal/db/dicedb.go +++ b/internal/db/dicedb.go @@ -12,10 +12,9 @@ import ( "os" "server/config" "server/util/cmds" - "strings" "time" - dicedb "github.com/dicedb/go-dice" + "github.com/dicedb/dicedb-go" ) const RespNil = "(nil)" @@ -36,9 +35,10 @@ func (db *DiceDB) CloseDiceDB() { func InitDiceClient(configValue *config.Config) (*DiceDB, error) { diceClient := dicedb.NewClient(&dicedb.Options{ - Addr: configValue.DiceDBAddr, - DialTimeout: 10 * time.Second, - MaxRetries: 10, + Addr: configValue.DiceDBAddr, + DialTimeout: 10 * time.Second, + MaxRetries: 10, + EnablePrettyResponse: true, }) // Ping the dicedb client to verify the connection @@ -67,7 +67,7 @@ func (db *DiceDB) ExecuteCommand(command *cmds.CommandRequest) (interface{}, err } if err != nil { - return nil, fmt.Errorf("(error) %v", err) + return nil, fmt.Errorf("%v", err) } // Print the result based on its type @@ -77,7 +77,7 @@ func (db *DiceDB) ExecuteCommand(command *cmds.CommandRequest) (interface{}, err case []byte: return string(v), nil case []interface{}: - return renderListResponse(v) + return v, nil case int64: return fmt.Sprintf("%v", v), nil case nil: @@ -86,28 +86,3 @@ func (db *DiceDB) ExecuteCommand(command *cmds.CommandRequest) (interface{}, err return fmt.Sprintf("%v", v), nil } } - -func renderListResponse(items []interface{}) (string, error) { - if len(items)%2 != 0 { - return "", fmt.Errorf("(error) invalid result format") - } - - var builder strings.Builder - for i := 0; i < len(items); i += 2 { - field, ok1 := items[i].(string) - value, ok2 := items[i+1].(string) - - // Check if both field and value are valid strings - if !ok1 || !ok2 { - return "", fmt.Errorf("(error) invalid result type") - } - - // Append the formatted field and value - _, err := fmt.Fprintf(&builder, "%d) \"%s\"\n%d) \"%s\"\n", i+1, field, i+2, value) - if err != nil { - return "", err - } - } - - return builder.String(), nil -} diff --git a/internal/middleware/ratelimiter.go b/internal/middleware/ratelimiter.go index c17b4a0..dc2a2d6 100644 --- a/internal/middleware/ratelimiter.go +++ b/internal/middleware/ratelimiter.go @@ -12,7 +12,7 @@ import ( "strings" "time" - dicedb "github.com/dicedb/go-dice" + "github.com/dicedb/dicedb-go" ) // RateLimiter middleware to limit requests based on a specified limit and duration diff --git a/internal/tests/integration/commands/hget_test.go b/internal/tests/integration/commands/hget_test.go index 4a81701..55b578d 100644 --- a/internal/tests/integration/commands/hget_test.go +++ b/internal/tests/integration/commands/hget_test.go @@ -30,8 +30,8 @@ func TestHGet(t *testing.T) { {Command: "HGET", Body: []string{"user", "name"}}, }, Result: []TestCaseResult{ - {Expected: "2"}, - {Expected: "John Doe"}, + {Expected: "(integer) 2"}, + {Expected: "\"John Doe\""}, }, }, { @@ -41,7 +41,7 @@ func TestHGet(t *testing.T) { {Command: "HGET", Body: []string{"user1", "gender"}}, }, Result: []TestCaseResult{ - {Expected: "2"}, + {Expected: "(integer) 2"}, {Expected: "(nil)"}, }, }, diff --git a/internal/tests/integration/commands/hgetall_test.go b/internal/tests/integration/commands/hgetall_test.go index 4171e06..4014e94 100644 --- a/internal/tests/integration/commands/hgetall_test.go +++ b/internal/tests/integration/commands/hgetall_test.go @@ -30,8 +30,8 @@ func TestHGetAll(t *testing.T) { {Command: "HGETALL", Body: []string{"user"}}, }, Result: []TestCaseResult{ - {Expected: "1"}, - {Expected: "1) \"name\"\n2) \"John Doe\"\n"}, + {Expected: "(integer) 1"}, + {Expected: "1) name\n John Doe\n"}, }, }, { diff --git a/internal/tests/integration/commands/hset_test.go b/internal/tests/integration/commands/hset_test.go index 0174ffa..8423dd5 100644 --- a/internal/tests/integration/commands/hset_test.go +++ b/internal/tests/integration/commands/hset_test.go @@ -18,7 +18,7 @@ func TestHSet(t *testing.T) { {Command: "HSET", Body: []string{"user", "name", "John Doe", "age", "30"}}, }, Result: []TestCaseResult{ - {Expected: "2"}, + {Expected: "(integer) 2"}, }, }, { @@ -28,8 +28,8 @@ func TestHSet(t *testing.T) { {Command: "HSET", Body: []string{"user1", "name", "John Loe", "gender", "Male"}}, }, Result: []TestCaseResult{ - {Expected: "2"}, - {Expected: "1"}, + {Expected: "(integer) 2"}, + {Expected: "(integer) 1"}, }, }, { From 74ad9c01e678addbe7255bc8ab7f3d492756fc5e Mon Sep 17 00:00:00 2001 From: pshubham Date: Thu, 17 Oct 2024 14:52:17 +0530 Subject: [PATCH 2/2] Fix tests --- internal/middleware/ratelimiter.go | 2 +- .../tests/integration/commands/exists_test.go | 8 ++--- .../tests/integration/commands/expire_test.go | 10 +++---- .../integration/commands/expireat_test.go | 10 +++---- .../integration/commands/expiretime_test.go | 8 ++--- .../tests/integration/commands/get_test.go | 2 +- .../integration/commands/hgetall_test.go | 2 +- .../tests/integration/commands/incr_test.go | 30 +++++++++---------- .../tests/integration/commands/set_test.go | 22 +++++++------- 9 files changed, 47 insertions(+), 47 deletions(-) diff --git a/internal/middleware/ratelimiter.go b/internal/middleware/ratelimiter.go index dc2a2d6..8cf9594 100644 --- a/internal/middleware/ratelimiter.go +++ b/internal/middleware/ratelimiter.go @@ -161,5 +161,5 @@ func addRateLimitHeaders(w http.ResponseWriter, limit, remaining, used, resetTim w.Header().Set("x-ratelimit-reset", strconv.FormatInt(resetTime, 10)) // Expose the rate limit headers to the client - w.Header().Set("Access-Control-Expose-Headers", "x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-used, x-ratelimit-reset") + w.Header().Set("Access-Control-Expose-Headers", "x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-used, x-ratelimit-reset") } diff --git a/internal/tests/integration/commands/exists_test.go b/internal/tests/integration/commands/exists_test.go index 826fdec..c8284c5 100644 --- a/internal/tests/integration/commands/exists_test.go +++ b/internal/tests/integration/commands/exists_test.go @@ -20,7 +20,7 @@ func TestExists(t *testing.T) { {Command: "EXISTS", Body: []string{"non_existent_key"}}, }, Result: []TestCaseResult{ - {Expected: "0"}, // Expecting 0 because the key should not exist + {Expected: "(integer) 0"}, // Expecting 0 because the key should not exist }, }, { @@ -30,8 +30,8 @@ func TestExists(t *testing.T) { {Command: "EXISTS", Body: []string{"existing_key"}}, }, Result: []TestCaseResult{ - {Expected: "OK"}, // Expecting "OK" from the SET command - {Expected: "1"}, // Expecting 1 because the key should exist + {Expected: "OK"}, // Expecting "OK" from the SET command + {Expected: "(integer) 1"}, // Expecting 1 because the key should exist }, }, { @@ -44,7 +44,7 @@ func TestExists(t *testing.T) { Result: []TestCaseResult{ {Expected: "OK"}, {Expected: "OK"}, - {Expected: "2"}, // Expecting 2 because only key1 and key2 exist + {Expected: "(integer) 2"}, // Expecting 2 because only key1 and key2 exist }, }, { diff --git a/internal/tests/integration/commands/expire_test.go b/internal/tests/integration/commands/expire_test.go index 47cecab..0e6ce24 100644 --- a/internal/tests/integration/commands/expire_test.go +++ b/internal/tests/integration/commands/expire_test.go @@ -23,7 +23,7 @@ func TestExpire(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "1"}, + {Expected: "(integer) 1"}, }, }, { @@ -35,8 +35,8 @@ func TestExpire(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "1"}, - {Expected: "SomeValue"}, + {Expected: "(integer) 1"}, + {Expected: "\"SomeValue\""}, }, }, { @@ -48,7 +48,7 @@ func TestExpire(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "1"}, + {Expected: "(integer) 1"}, {Expected: "(nil)"}, // Expecting (nil) after waiting }, }, @@ -58,7 +58,7 @@ func TestExpire(t *testing.T) { {Command: "EXPIRE", Body: []string{"non_existent_key", "1"}}, }, Result: []TestCaseResult{ - {Expected: "0"}, + {Expected: "(integer) 0"}, }, }, { diff --git a/internal/tests/integration/commands/expireat_test.go b/internal/tests/integration/commands/expireat_test.go index 6b3fa29..015880f 100644 --- a/internal/tests/integration/commands/expireat_test.go +++ b/internal/tests/integration/commands/expireat_test.go @@ -22,7 +22,7 @@ func TestExpireAt(t *testing.T) { {Command: "EXPIREAT", Body: []string{"non_existent_key", "1660000000"}}, // Arbitrary timestamp }, Result: []TestCaseResult{ - {Expected: "0"}, // Expecting 0 because the key does not exist + {Expected: "(integer) 0"}, // Expecting 0 because the key does not exist }, }, { @@ -34,8 +34,8 @@ func TestExpireAt(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "1"}, // Expecting 1 because EXPIREAT set the expiration successfully - {Expected: "1"}, // Key should still exist as it hasn't expired yet + {Expected: "(integer) 1"}, // Expecting 1 because EXPIREAT set the expiration successfully + {Expected: "(integer) 1"}, // Key should still exist as it hasn't expired yet }, }, { @@ -47,8 +47,8 @@ func TestExpireAt(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "1"}, // EXPIREAT should execute successfully - {Expected: "0"}, // Key should not exist as it has already expired + {Expected: "(integer) 1"}, // EXPIREAT should execute successfully + {Expected: "(integer) 0"}, // Key should not exist as it has already expired }, }, { diff --git a/internal/tests/integration/commands/expiretime_test.go b/internal/tests/integration/commands/expiretime_test.go index c4454f2..811de40 100644 --- a/internal/tests/integration/commands/expiretime_test.go +++ b/internal/tests/integration/commands/expiretime_test.go @@ -22,7 +22,7 @@ func TestExpireTime(t *testing.T) { {Command: "EXPIRETIME", Body: []string{"non_existent_key"}}, }, Result: []TestCaseResult{ - {Expected: "-2"}, // Expecting -2 because the key does not exist + {Expected: "(integer) -2"}, // Expecting -2 because the key does not exist }, }, { @@ -34,8 +34,8 @@ func TestExpireTime(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "1"}, // Indicating the EXPIREAT command was successful - {Expected: strconv.FormatInt(time.Now().Add(30*time.Second).Unix(), 10)}, // Future timestamp in seconds + {Expected: "(integer) 1"}, // Indicating the EXPIREAT command was successful + {Expected: "(integer) " + strconv.FormatInt(time.Now().Add(30*time.Second).Unix(), 10)}, // Future timestamp in seconds }, }, { @@ -46,7 +46,7 @@ func TestExpireTime(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "-1"}, // Expecting -1 because no expiration is set + {Expected: "(integer) -1"}, // Expecting -1 because no expiration is set }, }, { diff --git a/internal/tests/integration/commands/get_test.go b/internal/tests/integration/commands/get_test.go index 02eb137..f33391a 100644 --- a/internal/tests/integration/commands/get_test.go +++ b/internal/tests/integration/commands/get_test.go @@ -25,7 +25,7 @@ func TestGet(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "v"}, + {Expected: "\"v\""}, {Expected: "(nil)"}, }, Delays: []time.Duration{0, 0, 5 * time.Second}, diff --git a/internal/tests/integration/commands/hgetall_test.go b/internal/tests/integration/commands/hgetall_test.go index 4014e94..9ffac82 100644 --- a/internal/tests/integration/commands/hgetall_test.go +++ b/internal/tests/integration/commands/hgetall_test.go @@ -20,7 +20,7 @@ func TestHGetAll(t *testing.T) { {Command: "HGETALL", Body: []string{"user"}}, }, Result: []TestCaseResult{ - {Expected: ""}, + {Expected: "(empty list or set)"}, }, }, { diff --git a/internal/tests/integration/commands/incr_test.go b/internal/tests/integration/commands/incr_test.go index e7df5b6..cd0861f 100644 --- a/internal/tests/integration/commands/incr_test.go +++ b/internal/tests/integration/commands/incr_test.go @@ -30,11 +30,11 @@ func TestIncr(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "1"}, - {Expected: "2"}, - {Expected: "1"}, - {Expected: "2"}, - {Expected: "1"}, + {Expected: "(integer) 1"}, + {Expected: "(integer) 2"}, + {Expected: "(integer) 1"}, + {Expected: "(integer) 2"}, + {Expected: "(integer) 1"}, }, }, { @@ -46,8 +46,8 @@ func TestIncr(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: strconv.FormatInt(math.MinInt64+1, 10)}, - {Expected: strconv.FormatInt(math.MinInt64+2, 10)}, + {Expected: "(integer) " + strconv.FormatInt(math.MinInt64+1, 10)}, + {Expected: "(integer) " + strconv.FormatInt(math.MinInt64+2, 10)}, }, }, { @@ -58,9 +58,9 @@ func TestIncr(t *testing.T) { {Command: "INCR", Body: []string{"non_existent"}}, }, Result: []TestCaseResult{ - {Expected: "1"}, - {Expected: "1"}, - {Expected: "2"}, + {Expected: "(integer) 1"}, + {Expected: "(integer) 1"}, + {Expected: "(integer) 2"}, }, }, { @@ -75,11 +75,11 @@ func TestIncr(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "43"}, + {Expected: "(integer) 43"}, {Expected: "OK"}, - {Expected: "-9"}, + {Expected: "(integer) -9"}, {Expected: "OK"}, - {Expected: "1"}, + {Expected: "(integer) 1"}, }, }, { @@ -92,8 +92,8 @@ func TestIncr(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "1"}, - {Expected: "2"}, + {Expected: "(integer) 1"}, + {Expected: "(integer) 2"}, {Expected: "(nil)"}, }, Delays: []time.Duration{0, 0, 0, 2 * time.Second}, diff --git a/internal/tests/integration/commands/set_test.go b/internal/tests/integration/commands/set_test.go index e6b8fa2..f98c515 100644 --- a/internal/tests/integration/commands/set_test.go +++ b/internal/tests/integration/commands/set_test.go @@ -23,7 +23,7 @@ func TestSet(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "v"}, + {Expected: "\"v\""}, }, }, { @@ -34,7 +34,7 @@ func TestSet(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "123456789"}, // This is Redis' scientific notation for large numbers + {Expected: "(integer) 123456789"}, // This is Redis' scientific notation for large numbers }, }, { @@ -47,7 +47,7 @@ func TestSet(t *testing.T) { Result: []TestCaseResult{ {Expected: "OK"}, {Expected: "OK"}, - {Expected: "5"}, // As the value 5 is stored as a string + {Expected: "(integer) 5"}, // As the value 5 is stored as a string }, }, { @@ -67,7 +67,7 @@ func TestSet(t *testing.T) { {Command: "GET", Body: []string{"a"}}, }, Result: []TestCaseResult{ - {Expected: "0"}, // DEL returns number of deleted keys + {Expected: "(integer) 0"}, // DEL returns number of deleted keys {Expected: "(nil)"}, {Expected: "(nil)"}, }, @@ -80,9 +80,9 @@ func TestSet(t *testing.T) { {Command: "GET", Body: []string{"c"}}, }, Result: []TestCaseResult{ - {Expected: "0"}, // DEL returns number of deleted keys + {Expected: "(integer) 0"}, // DEL returns number of deleted keys {Expected: "OK"}, - {Expected: "v"}, + {Expected: "\"v\""}, }, }, { @@ -94,9 +94,9 @@ func TestSet(t *testing.T) { {Command: "SET", Body: []string{"b", "v", "NX"}}, }, Result: []TestCaseResult{ - {Expected: "0"}, // DEL returns number of deleted keys + {Expected: "(integer) 0"}, // DEL returns number of deleted keys {Expected: "OK"}, - {Expected: "v"}, + {Expected: "\"v\""}, {Expected: "(nil)"}, // NX fails because the key already exists }, }, @@ -121,7 +121,7 @@ func TestSet(t *testing.T) { Result: []TestCaseResult{ {Expected: "OK"}, {Expected: "OK"}, - {Expected: "v2"}, + {Expected: "\"v2\""}, }, }, { @@ -136,7 +136,7 @@ func TestSet(t *testing.T) { {Expected: "OK"}, {Expected: "OK"}, {Expected: "OK"}, - {Expected: "v3"}, + {Expected: "\"v3\""}, }, }, { @@ -149,7 +149,7 @@ func TestSet(t *testing.T) { }, Result: []TestCaseResult{ {Expected: "OK"}, - {Expected: "v"}, + {Expected: "\"v\""}, {Expected: "OK"}, {Expected: "(nil)"}, // After expiration },