Skip to content

Commit 3ed54ad

Browse files
re-TickRitik Jain
and
Ritik Jain
authored
adds a check for running in test mode without db connection (#71)
* feat(mongo): Adds Distinct, CountDocuments and Aggregate methods to mock their outputs. * fix(keploy): adds a delay in between capture and denoise calls to keploy server delay is necessary to capture the noise fields of response accurately * fix(kmongo): adds a check for nil pointer to prevent crash in find, findone mocked method refactors kmongo code to improve maintainence #63 * feat(kmux): adds a middleware function for gorilla/mux multiplexer #66 * fix(khttpClient): adds an interceptor for http client to mock the outputs of external http calls * docs: fixed typo in sql driver's example * fix(khttpClient): register types to gob and fixes UnmarshalBinay method of ReadCloser to decode gcp response in UnmarshalBinary method, the b byte array contents are copied to a temp byte array to prevent alteration in the given parameter b byte array * docs(gcp): adds an example in readme for a gcp compute * fix(ksql): run the mocked outputs of sql queries when database is down #70 * fix(ksql): keploy sql driver methods returns the sql/driver errors instead of KError.Err This is done because sql package compares errors by using == or errors.Is so, errors should be same instances. Co-authored-by: Ritik Jain <[email protected]>
1 parent 1e33d41 commit 3ed54ad

9 files changed

+117
-29
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ func main(){
348348
body, err := io.ReadAll(resp.Body)
349349
fmt.Println("BODY : ", body)
350350
})
351+
351352
r.HandleFunc("/mux/httpDo", func(w http.ResponseWriter, r *http.Request){
352353
putBody, _ := json.Marshal(map[string]interface{}{
353354
"name": "Ash",

go.mod

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/bnkamalesh/webgo/v6 v6.2.2
99
github.com/creasty/defaults v1.5.2
1010
github.com/gin-gonic/gin v1.7.7
11-
github.com/go-playground/validator/v10 v10.4.1
11+
github.com/go-playground/validator/v10 v10.10.1
1212
github.com/labstack/echo/v4 v4.6.1
1313
go.mongodb.org/mongo-driver v1.8.1
1414
go.uber.org/zap v1.19.1
@@ -25,8 +25,8 @@ require (
2525
github.com/agnivade/levenshtein v1.1.0 // indirect
2626
github.com/gin-contrib/sse v0.1.0 // indirect
2727
github.com/go-chi/render v1.0.1 // indirect
28-
github.com/go-playground/locales v0.13.0 // indirect
29-
github.com/go-playground/universal-translator v0.17.0 // indirect
28+
github.com/go-playground/locales v0.14.0 // indirect
29+
github.com/go-playground/universal-translator v0.18.0 // indirect
3030
github.com/go-stack/stack v1.8.0 // indirect
3131
github.com/golang/protobuf v1.4.3 // indirect
3232
github.com/golang/snappy v0.0.1 // indirect
@@ -36,7 +36,7 @@ require (
3636
github.com/json-iterator/go v1.1.9 // indirect
3737
github.com/klauspost/compress v1.13.6 // indirect
3838
github.com/labstack/gommon v0.3.0 // indirect
39-
github.com/leodido/go-urn v1.2.0 // indirect
39+
github.com/leodido/go-urn v1.2.1 // indirect
4040
github.com/mattn/go-colorable v0.1.8 // indirect
4141
github.com/mattn/go-isatty v0.0.14 // indirect
4242
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
@@ -52,7 +52,7 @@ require (
5252
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
5353
go.uber.org/atomic v1.7.0 // indirect
5454
go.uber.org/multierr v1.6.0 // indirect
55-
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
55+
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 // indirect
5656
golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect
5757
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
5858
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect

go.sum

+21
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH
3030
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
3131
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
3232
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
33+
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
3334
github.com/creasty/defaults v1.5.2 h1:/VfB6uxpyp6h0fr7SPp7n8WJBoV8jfxQXPCnkVSjyls=
3435
github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY=
3536
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -57,10 +58,16 @@ github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBY
5758
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
5859
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
5960
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
61+
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
62+
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
6063
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
6164
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
65+
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
66+
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
6267
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
6368
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
69+
github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig=
70+
github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
6471
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
6572
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
6673
github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM=
@@ -110,15 +117,20 @@ github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQ
110117
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
111118
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
112119
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
120+
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
121+
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
113122
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
114123
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
115124
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
125+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
116126
github.com/labstack/echo/v4 v4.6.1 h1:OMVsrnNFzYlGSdaiYGHbgWQnr+JM7NG+B9suCPie14M=
117127
github.com/labstack/echo/v4 v4.6.1/go.mod h1:RnjgMWNDB9g/HucVWhQYNQP9PvbYf6adqftqryo7s9k=
118128
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
119129
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
120130
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
121131
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
132+
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
133+
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
122134
github.com/logrusorgru/aurora/v3 v3.0.0/go.mod h1:vsR12bk5grlLvLXAYrBsb5Oc/N+LxAlxggSjiwMnCUc=
123135
github.com/matryer/moq v0.2.3/go.mod h1:9RtPYjTnH1bSBIkpvtHkFN7nbWAnO7oRpdJkEIn6UtE=
124136
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
@@ -136,13 +148,16 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
136148
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
137149
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
138150
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
151+
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
139152
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
140153
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
141154
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
142155
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
143156
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
144157
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
145158
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
159+
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
160+
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
146161
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
147162
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
148163
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
@@ -200,6 +215,8 @@ golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWP
200215
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
201216
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
202217
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
218+
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M=
219+
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
203220
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
204221
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
205222
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -219,6 +236,7 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
219236
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
220237
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
221238
golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
239+
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
222240
golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY=
223241
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
224242
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -246,6 +264,7 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
246264
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
247265
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
248266
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
267+
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
249268
golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
250269
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
251270
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -303,6 +322,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
303322
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
304323
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
305324
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
325+
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
326+
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
306327
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
307328
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
308329
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

integrations/ksql/connBeginTx.go

+4
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,12 @@ func (t Tx) Commit() error {
5555
if x.Err != nil {
5656
mockErr = x.Err
5757
}
58+
mockErr = convertKError(mockErr)
5859
return mockErr
5960
}
6061
return err
6162
}
63+
6264
// Rollback mocks the outputs of Rollback method present driver's Tx interface.
6365
func (t Tx) Rollback() error {
6466
if keploy.GetModeFromContext(t.ctx) == keploy.MODE_OFF {
@@ -96,6 +98,7 @@ func (t Tx) Rollback() error {
9698
if x.Err != nil {
9799
mockErr = x.Err
98100
}
101+
mockErr = convertKError(mockErr)
99102
return mockErr
100103
}
101104
return err
@@ -149,6 +152,7 @@ func (c Conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, er
149152
if x.Err != nil {
150153
mockErr = x.Err
151154
}
155+
mockErr = convertKError(mockErr)
152156
return drTx, mockErr
153157
}
154158
return drTx, err

integrations/ksql/connPrepareContext.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ type Stmt struct {
1616
driver.Stmt
1717
ctx context.Context
1818
query string
19-
log *zap.Logger
19+
log *zap.Logger
2020
}
2121

2222
func (s Stmt) Exec(args []driver.Value) (driver.Result, error) {
@@ -67,6 +67,7 @@ func (s Stmt) Exec(args []driver.Value) (driver.Result, error) {
6767
if x.Err != nil {
6868
mockErr = x.Err
6969
}
70+
mockErr = convertKError(mockErr)
7071
return drResult, mockErr
7172
}
7273
return result, err
@@ -78,7 +79,7 @@ func (s Stmt) Query(args []driver.Value) (driver.Rows, error) {
7879
var (
7980
err error
8081
kerr *keploy.KError = &keploy.KError{}
81-
drRows *Rows = &Rows{
82+
drRows *Rows = &Rows{
8283
ctx: s.ctx,
8384
query: s.query,
8485
}
@@ -115,6 +116,7 @@ func (s Stmt) Query(args []driver.Value) (driver.Rows, error) {
115116
if x.Err != nil {
116117
mockErr = x.Err
117118
}
119+
mockErr = convertKError(mockErr)
118120
return drRows, mockErr
119121
}
120122
return drRows, err
@@ -188,6 +190,7 @@ func (s Stmt) Close() error {
188190
if x.Err != nil {
189191
mockErr = x.Err
190192
}
193+
mockErr = convertKError(mockErr)
191194
return mockErr
192195
}
193196
return err
@@ -205,7 +208,7 @@ func (c Conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, er
205208
var (
206209
err error
207210
kerr *keploy.KError = &keploy.KError{}
208-
drStmt *Stmt = &Stmt{
211+
drStmt *Stmt = &Stmt{
209212
log: c.log,
210213
ctx: ctx,
211214
query: query,
@@ -242,6 +245,7 @@ func (c Conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, er
242245
if x.Err != nil {
243246
mockErr = x.Err
244247
}
248+
mockErr = convertKError(mockErr)
245249
return drStmt, mockErr
246250
}
247251
return drStmt, err

integrations/ksql/driver.go

+30-5
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ import (
1717
// Driver wraps the sql driver to overrides Open method of driver.Driver.
1818
type Driver struct {
1919
driver.Driver
20+
// Mode string
2021
}
2122

22-
// Open returns wrapped driver.Conn in order to mock outputs of sql Querries.
23+
// Open returns wrapped driver.Conn in order to mock outputs of sql Querries.
2324
//
2425
// dsn is a string in driver specific format used as connection URI.
2526
func (ksql *Driver) Open(dsn string) (driver.Conn, error) {
@@ -28,32 +29,55 @@ func (ksql *Driver) Open(dsn string) (driver.Conn, error) {
2829
err error
2930
)
3031
conn, err := ksql.Driver.Open(dsn)
32+
33+
// if ksql.Mode == "test" {
34+
if keploy.GetMode() == keploy.MODE_TEST {
35+
err = nil
36+
conn = Conn{}
37+
}
3138
if err != nil {
3239
return nil, err
3340
}
3441
logger, _ := zap.NewProduction()
3542
defer func() {
3643
_ = logger.Sync() // flushes buffer, if any
3744
}()
38-
res = Conn{conn: conn, log: logger}
45+
res = Conn{conn: conn, log: logger} // mode: ksql.Mode
46+
3947
return res, err
4048
}
4149

42-
// Conn is used to override driver.Conn interface methods to mock the outputs of the querries.
50+
// Conn is used to override driver.Conn interface methods to mock the outputs of the querries.
4351
type Conn struct {
52+
// mode string
4453
conn driver.Conn
45-
log *zap.Logger
54+
log *zap.Logger
4655
}
4756

4857
func (c Conn) Begin() (driver.Tx, error) {
58+
// if c.mode == "test" {
59+
if keploy.GetMode() == keploy.MODE_TEST {
60+
61+
return Tx{}, nil
62+
}
4963
return c.conn.Begin()
5064
}
5165

5266
func (c Conn) Close() error {
67+
// if c.mode == "test" {
68+
if keploy.GetMode() == keploy.MODE_TEST {
69+
70+
return nil
71+
}
5372
return c.conn.Close()
5473
}
5574

5675
func (c Conn) Prepare(query string) (driver.Stmt, error) {
76+
// if c.mode == "test" {
77+
if keploy.GetMode() == keploy.MODE_TEST {
78+
79+
return Stmt{}, nil
80+
}
5781
return c.conn.Prepare(query)
5882
}
5983

@@ -65,7 +89,7 @@ func (c Conn) OpenConnector(name string) (driver.Connector, error) {
6589
return nil, errors.New("mocked Driver.Conn var not implements DriverContext interface")
6690
}
6791

68-
// Ping is the mocked method of sql/driver's Ping.
92+
// Ping is the mocked method of sql/driver's Ping.
6993
func (c Conn) Ping(ctx context.Context) error {
7094
pc, ok := c.conn.(driver.Pinger)
7195
if !ok {
@@ -107,6 +131,7 @@ func (c Conn) Ping(ctx context.Context) error {
107131
if x.Err != nil {
108132
mockErr = x.Err
109133
}
134+
mockErr = convertKError(mockErr)
110135
return mockErr
111136
}
112137
return err

integrations/ksql/error.go

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ksql
2+
3+
import "database/sql/driver"
4+
5+
func convertKError(err error) error {
6+
if err == nil {
7+
return nil
8+
}
9+
// return the sql/driver error which is matching the parameter error string
10+
str := err.Error()
11+
switch str {
12+
case driver.ErrBadConn.Error():
13+
return driver.ErrBadConn
14+
case driver.ErrRemoveArgument.Error():
15+
return driver.ErrRemoveArgument
16+
case driver.ErrSkip.Error():
17+
return driver.ErrSkip
18+
default:
19+
return err
20+
}
21+
}

integrations/ksql/execerContext.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type Result struct {
1919
RowsAff int64
2020
RError string
2121
}
22+
2223
func (r Result) LastInsertId() (int64, error) {
2324
return r.LastInserted, errors.New(r.LError)
2425
}
@@ -38,9 +39,9 @@ func (c Conn) ExecContext(ctx context.Context, query string, args []driver.Named
3839
return execerContext.ExecContext(ctx, query, args)
3940
}
4041
var (
41-
err error
42-
kerr *keploy.KError = &keploy.KError{}
43-
result driver.Result
42+
err error
43+
kerr *keploy.KError = &keploy.KError{}
44+
result driver.Result
4445
driverResult *Result = &Result{}
4546
)
4647
kctx, er := keploy.GetState(ctx)
@@ -87,7 +88,8 @@ func (c Conn) ExecContext(ctx context.Context, query string, args []driver.Named
8788
if x.Err != nil {
8889
mockErr = x.Err
8990
}
91+
mockErr = convertKError(mockErr)
9092
return driverResult, mockErr
9193
}
9294
return result, err
93-
}
95+
}

0 commit comments

Comments
 (0)