Skip to content

Commit d17001f

Browse files
re-TickRitik Jain
and
Ritik Jain
authored
fix: add a check in simulate to fix CI/CD failures (#85)
* 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(simulate): adds check for returned response and stored response in simulate Co-authored-by: Ritik Jain <[email protected]>
1 parent 25f9500 commit d17001f

File tree

5 files changed

+37
-17
lines changed

5 files changed

+37
-17
lines changed

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ Here is an example -
276276
func main(){
277277
// Register keploy sql driver to database/sql package.
278278
driver := ksql.Driver{Driver: pq.Driver{}}
279+
279280
sql.Register("keploy", &driver)
280281

281282
pSQL_URI := fmt.Sprintf("host=%s user=%s dbname=%s sslmode=disable password=%s port=%s", "localhost", "postgres", "Book_Keeper", "8789", "5432")
@@ -339,7 +340,7 @@ Example for gORM with GCP-Postgres driver:
339340
DSN: pSQL_URI
340341
}), &gorm.Config{
341342
DisableAutomaticPing: true
342-
})
343+
}
343344
pSQL_DB.AutoMigrate(&Person{})
344345
pSQL_DB.AutoMigrate(&Book{})
345346
r:=gin.New()

go.mod

+5-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ require (
2323
)
2424

2525
require (
26+
github.com/andybalholm/brotli v1.0.4 // indirect
2627
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d // indirect
2728
github.com/goccy/go-json v0.9.4 // indirect
2829
github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect
@@ -46,7 +47,7 @@ require (
4647
github.com/gorilla/mux v1.8.0
4748
github.com/jmespath/go-jmespath v0.4.0 // indirect
4849
github.com/json-iterator/go v1.1.9 // indirect
49-
github.com/klauspost/compress v1.13.6 // indirect
50+
github.com/klauspost/compress v1.15.0 // indirect
5051
github.com/labstack/gommon v0.3.0 // indirect
5152
github.com/leodido/go-urn v1.2.1 // indirect
5253
github.com/lestrrat-go/jwx v1.2.20
@@ -57,6 +58,7 @@ require (
5758
github.com/pkg/errors v0.9.1 // indirect
5859
github.com/ugorji/go/codec v1.1.7 // indirect
5960
github.com/valyala/bytebufferpool v1.0.0 // indirect
61+
github.com/valyala/fasthttp v1.35.0
6062
github.com/valyala/fasttemplate v1.2.1 // indirect
6163
github.com/vektah/gqlparser/v2 v2.2.0 // indirect
6264
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
@@ -66,9 +68,9 @@ require (
6668
go.uber.org/atomic v1.7.0 // indirect
6769
go.uber.org/multierr v1.6.0 // indirect
6870
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 // indirect
69-
golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect
71+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
7072
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
71-
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 // indirect
73+
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 // indirect
7274
golang.org/x/text v0.3.7 // indirect
7375
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
7476
google.golang.org/protobuf v1.25.0 // indirect

go.sum

+13-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ github.com/agnivade/levenshtein v1.1.0 h1:n6qGwyHG61v3ABce1rPVZklEYRT8NFpCMrpZdB
88
github.com/agnivade/levenshtein v1.1.0/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
99
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
1010
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
11+
github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
12+
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
1113
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
1214
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
1315
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
@@ -115,8 +117,9 @@ github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGn
115117
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
116118
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
117119
github.com/kevinmbeaulieu/eq-go v1.0.0/go.mod h1:G3S8ajA56gKBZm4UB9AOyoOS37JO3roToPzKNM8dtdM=
118-
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
119120
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
121+
github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U=
122+
github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
120123
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
121124
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
122125
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
@@ -193,9 +196,12 @@ github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLY
193196
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
194197
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
195198
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
199+
github.com/valyala/fasthttp v1.35.0 h1:wwkR8mZn2NbigFsaw2Zj5r+xkmzjbrA/lyTmiSlal/Y=
200+
github.com/valyala/fasthttp v1.35.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I=
196201
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
197202
github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4=
198203
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
204+
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
199205
github.com/vektah/gqlparser/v2 v2.2.0 h1:bAc3slekAAJW6sZTi07aGq0OrfaCjj4jxARAaC7g2EM=
200206
github.com/vektah/gqlparser/v2 v2.2.0/go.mod h1:i3mQIGIrbK2PD1RrCeMTlVbkF2FJ6WkU1KJlJlC+3F4=
201207
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
@@ -251,8 +257,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
251257
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
252258
golang.org/x/net v0.0.0-20210913180222-943fd674d43e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
253259
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
254-
golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY=
255260
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
261+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
262+
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
256263
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
257264
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
258265
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -280,10 +287,12 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
280287
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
281288
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
282289
golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
283-
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 h1:id054HUawV2/6IGm2IV8KZQjqtwAOo2CYlOToYqa0d0=
284-
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
290+
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
291+
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs=
292+
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
285293
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
286294
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
295+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
287296
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
288297
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
289298
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=

keploy/keploy.go

+16-8
Original file line numberDiff line numberDiff line change
@@ -274,21 +274,29 @@ func (k *Keploy) simulate(tc models.TestCase) (*models.HttpResp, error) {
274274
req.ProtoMajor = tc.HttpReq.ProtoMajor
275275
req.ProtoMinor = tc.HttpReq.ProtoMinor
276276

277-
_, err = k.client.Do(req)
277+
httpresp, err := k.client.Do(req)
278278
if err != nil {
279279
k.Log.Error("failed sending testcase request to app", zap.Error(err))
280280
return nil, err
281281
}
282282

283-
//defer resp.Body.Close()
283+
defer httpresp.Body.Close()
284284
resp := k.GetResp(tc.ID)
285-
k.resp.Delete(tc.ID)
285+
defer k.resp.Delete(tc.ID)
286+
287+
body, err := ioutil.ReadAll(httpresp.Body)
288+
if err != nil {
289+
k.Log.Error("failed reading simulated response from app", zap.Error(err))
290+
return nil, err
291+
}
292+
if resp.Body != string(body) {
293+
resp.Body = string(body)
294+
resp.Header = httpresp.Header
295+
}
296+
if resp.StatusCode != httpresp.StatusCode {
297+
resp.StatusCode = httpresp.StatusCode
298+
}
286299

287-
//body, err := ioutil.ReadAll(resp.Body)
288-
//if err != nil {
289-
// a.Log.Error("failed reading simulated response from app", zap.Error(err))
290-
// return nil, err
291-
//}
292300
return &resp, nil
293301
}
294302

keploy/utils.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ func CaptureTestcase(k *Keploy, r *http.Request, reqBody []byte, resp models.Htt
165165
HttpResp: resp,
166166
Deps: deps.Deps,
167167
})
168-
168+
169169
}
170170

171171
func urlParams(r *http.Request, params map[string]string) map[string]string {

0 commit comments

Comments
 (0)