Skip to content

Commit

Permalink
adds a check for running in test mode without db connection (#71)
Browse files Browse the repository at this point in the history
* 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]>
  • Loading branch information
re-Tick and Ritik Jain authored Mar 18, 2022
1 parent 1e33d41 commit 3ed54ad
Show file tree
Hide file tree
Showing 9 changed files with 117 additions and 29 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,7 @@ func main(){
body, err := io.ReadAll(resp.Body)
fmt.Println("BODY : ", body)
})

r.HandleFunc("/mux/httpDo", func(w http.ResponseWriter, r *http.Request){
putBody, _ := json.Marshal(map[string]interface{}{
"name": "Ash",
Expand Down
10 changes: 5 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/bnkamalesh/webgo/v6 v6.2.2
github.com/creasty/defaults v1.5.2
github.com/gin-gonic/gin v1.7.7
github.com/go-playground/validator/v10 v10.4.1
github.com/go-playground/validator/v10 v10.10.1
github.com/labstack/echo/v4 v4.6.1
go.mongodb.org/mongo-driver v1.8.1
go.uber.org/zap v1.19.1
Expand All @@ -25,8 +25,8 @@ require (
github.com/agnivade/levenshtein v1.1.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-chi/render v1.0.1 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/go-playground/locales v0.14.0 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect
github.com/go-stack/stack v1.8.0 // indirect
github.com/golang/protobuf v1.4.3 // indirect
github.com/golang/snappy v0.0.1 // indirect
Expand All @@ -36,7 +36,7 @@ require (
github.com/json-iterator/go v1.1.9 // indirect
github.com/klauspost/compress v1.13.6 // indirect
github.com/labstack/gommon v0.3.0 // indirect
github.com/leodido/go-urn v1.2.0 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/mattn/go-colorable v0.1.8 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
Expand All @@ -52,7 +52,7 @@ require (
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 // indirect
golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect
Expand Down
21 changes: 21 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creasty/defaults v1.5.2 h1:/VfB6uxpyp6h0fr7SPp7n8WJBoV8jfxQXPCnkVSjyls=
github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down Expand Up @@ -57,10 +58,16 @@ github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBY
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig=
github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM=
Expand Down Expand Up @@ -110,15 +117,20 @@ github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQ
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/labstack/echo/v4 v4.6.1 h1:OMVsrnNFzYlGSdaiYGHbgWQnr+JM7NG+B9suCPie14M=
github.com/labstack/echo/v4 v4.6.1/go.mod h1:RnjgMWNDB9g/HucVWhQYNQP9PvbYf6adqftqryo7s9k=
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/logrusorgru/aurora/v3 v3.0.0/go.mod h1:vsR12bk5grlLvLXAYrBsb5Oc/N+LxAlxggSjiwMnCUc=
github.com/matryer/moq v0.2.3/go.mod h1:9RtPYjTnH1bSBIkpvtHkFN7nbWAnO7oRpdJkEIn6UtE=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
Expand All @@ -136,13 +148,16 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
Expand Down Expand Up @@ -200,6 +215,8 @@ golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWP
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ=
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
Expand All @@ -219,6 +236,7 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY=
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
Expand Down Expand Up @@ -246,6 +264,7 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Expand Down Expand Up @@ -303,6 +322,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Expand Down
4 changes: 4 additions & 0 deletions integrations/ksql/connBeginTx.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,12 @@ func (t Tx) Commit() error {
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return mockErr
}
return err
}

// Rollback mocks the outputs of Rollback method present driver's Tx interface.
func (t Tx) Rollback() error {
if keploy.GetModeFromContext(t.ctx) == keploy.MODE_OFF {
Expand Down Expand Up @@ -96,6 +98,7 @@ func (t Tx) Rollback() error {
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return mockErr
}
return err
Expand Down Expand Up @@ -149,6 +152,7 @@ func (c Conn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, er
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return drTx, mockErr
}
return drTx, err
Expand Down
10 changes: 7 additions & 3 deletions integrations/ksql/connPrepareContext.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ type Stmt struct {
driver.Stmt
ctx context.Context
query string
log *zap.Logger
log *zap.Logger
}

func (s Stmt) Exec(args []driver.Value) (driver.Result, error) {
Expand Down Expand Up @@ -67,6 +67,7 @@ func (s Stmt) Exec(args []driver.Value) (driver.Result, error) {
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return drResult, mockErr
}
return result, err
Expand All @@ -78,7 +79,7 @@ func (s Stmt) Query(args []driver.Value) (driver.Rows, error) {
var (
err error
kerr *keploy.KError = &keploy.KError{}
drRows *Rows = &Rows{
drRows *Rows = &Rows{
ctx: s.ctx,
query: s.query,
}
Expand Down Expand Up @@ -115,6 +116,7 @@ func (s Stmt) Query(args []driver.Value) (driver.Rows, error) {
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return drRows, mockErr
}
return drRows, err
Expand Down Expand Up @@ -188,6 +190,7 @@ func (s Stmt) Close() error {
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return mockErr
}
return err
Expand All @@ -205,7 +208,7 @@ func (c Conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, er
var (
err error
kerr *keploy.KError = &keploy.KError{}
drStmt *Stmt = &Stmt{
drStmt *Stmt = &Stmt{
log: c.log,
ctx: ctx,
query: query,
Expand Down Expand Up @@ -242,6 +245,7 @@ func (c Conn) PrepareContext(ctx context.Context, query string) (driver.Stmt, er
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return drStmt, mockErr
}
return drStmt, err
Expand Down
35 changes: 30 additions & 5 deletions integrations/ksql/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@ import (
// Driver wraps the sql driver to overrides Open method of driver.Driver.
type Driver struct {
driver.Driver
// Mode string
}

// Open returns wrapped driver.Conn in order to mock outputs of sql Querries.
// Open returns wrapped driver.Conn in order to mock outputs of sql Querries.
//
// dsn is a string in driver specific format used as connection URI.
func (ksql *Driver) Open(dsn string) (driver.Conn, error) {
Expand All @@ -28,32 +29,55 @@ func (ksql *Driver) Open(dsn string) (driver.Conn, error) {
err error
)
conn, err := ksql.Driver.Open(dsn)

// if ksql.Mode == "test" {
if keploy.GetMode() == keploy.MODE_TEST {
err = nil
conn = Conn{}
}
if err != nil {
return nil, err
}
logger, _ := zap.NewProduction()
defer func() {
_ = logger.Sync() // flushes buffer, if any
}()
res = Conn{conn: conn, log: logger}
res = Conn{conn: conn, log: logger} // mode: ksql.Mode

return res, err
}

// Conn is used to override driver.Conn interface methods to mock the outputs of the querries.
// Conn is used to override driver.Conn interface methods to mock the outputs of the querries.
type Conn struct {
// mode string
conn driver.Conn
log *zap.Logger
log *zap.Logger
}

func (c Conn) Begin() (driver.Tx, error) {
// if c.mode == "test" {
if keploy.GetMode() == keploy.MODE_TEST {

return Tx{}, nil
}
return c.conn.Begin()
}

func (c Conn) Close() error {
// if c.mode == "test" {
if keploy.GetMode() == keploy.MODE_TEST {

return nil
}
return c.conn.Close()
}

func (c Conn) Prepare(query string) (driver.Stmt, error) {
// if c.mode == "test" {
if keploy.GetMode() == keploy.MODE_TEST {

return Stmt{}, nil
}
return c.conn.Prepare(query)
}

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

// Ping is the mocked method of sql/driver's Ping.
// Ping is the mocked method of sql/driver's Ping.
func (c Conn) Ping(ctx context.Context) error {
pc, ok := c.conn.(driver.Pinger)
if !ok {
Expand Down Expand Up @@ -107,6 +131,7 @@ func (c Conn) Ping(ctx context.Context) error {
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return mockErr
}
return err
Expand Down
21 changes: 21 additions & 0 deletions integrations/ksql/error.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ksql

import "database/sql/driver"

func convertKError(err error) error {
if err == nil {
return nil
}
// return the sql/driver error which is matching the parameter error string
str := err.Error()
switch str {
case driver.ErrBadConn.Error():
return driver.ErrBadConn
case driver.ErrRemoveArgument.Error():
return driver.ErrRemoveArgument
case driver.ErrSkip.Error():
return driver.ErrSkip
default:
return err
}
}
10 changes: 6 additions & 4 deletions integrations/ksql/execerContext.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ type Result struct {
RowsAff int64
RError string
}

func (r Result) LastInsertId() (int64, error) {
return r.LastInserted, errors.New(r.LError)
}
Expand All @@ -38,9 +39,9 @@ func (c Conn) ExecContext(ctx context.Context, query string, args []driver.Named
return execerContext.ExecContext(ctx, query, args)
}
var (
err error
kerr *keploy.KError = &keploy.KError{}
result driver.Result
err error
kerr *keploy.KError = &keploy.KError{}
result driver.Result
driverResult *Result = &Result{}
)
kctx, er := keploy.GetState(ctx)
Expand Down Expand Up @@ -87,7 +88,8 @@ func (c Conn) ExecContext(ctx context.Context, query string, args []driver.Named
if x.Err != nil {
mockErr = x.Err
}
mockErr = convertKError(mockErr)
return driverResult, mockErr
}
return result, err
}
}
Loading

0 comments on commit 3ed54ad

Please sign in to comment.