Supported Frameworks for Go
Supported Routers
1. Chi
r := chi.NewRouter()
kchi.ChiV5(k,r)
Example
import("github.com/keploy/go-sdk/integrations/kchi")
r := chi.NewRouter()
port := "6789"
k := keploy.New(keploy.Config{
App: keploy.AppConfig{
Name: "my_app",
Port: port,
},
Server: keploy.ServerConfig{
URL: "http://localhost:6789/api",
},
})
kchi.ChiV5(k,r)
http.ListenAndServe(":" + port, r)
2. Gin
r:=gin.New()
kgin.GinV1(k, r)
Example
import("github.com/keploy/go-sdk/integrations/kgin/v1")
r:=gin.New()
port := "6789"
k := keploy.New(keploy.Config{
App: keploy.AppConfig{
Name: "my_app",
Port: port,
},
Server: keploy.ServerConfig{
URL: "http://localhost:6789/api",
},
})
kgin.GinV1(k, r)
r.Run(":" + port)
3. Echo
e := echo.New()
kecho.EchoV4(k, e)
Example
import("github.com/keploy/go-sdk/integrations/kecho/v4")
e := echo.New()
port := "6789"
k := keploy.New(keploy.Config{
App: keploy.AppConfig{
Name: "my-app",
Port: port,
},
Server: keploy.ServerConfig{
URL: "http://localhost:6789/api",
},
})
kecho.EchoV4(k, e)
e.Start(":" + port)
4. WebGo
WebGoV4
router := webgo.NewRouter(cfg, getRoutes())
kwebgo.WebGoV4(k, router)
WebGoV6
kwebgo.WebGoV6(k, router)
router.Start()
Example
import("github.com/keploy/go-sdk/integrations/kwebgo/v4")
port := "6789"
k := keploy.New(keploy.Config{
App: keploy.AppConfig{
Name: "my-app",
Port: port,
},
Server: keploy.ServerConfig{
URL: "http://localhost:6789/api",
},
})
kwebgo.WebGoV4(k
, router)
router.Start()
5. Gorilla/Mux
r := mux.NewRouter()
kmux.Mux(k, r)
Example
import(
"github.com/keploy/go-sdk/integrations/kmux"
"net/http"
)
r := mux.NewRouter()
port := "6789"
k := keploy.New(keploy.Config{
App: keploy.AppConfig{
Name: "my-app",
Port: port,
},
Server: keploy.ServerConfig{
URL: "http://localhost:6789/api",
},
})
kmux.Mux(k, r)
http.ListenAndServe(":"+port, r)
Supported Databases
1. MongoDB
import("github.com/keploy/go-sdk/integrations/kmongo")
db := client.Database("testDB")
col := kmongo.NewCollection(db.Collection("Demo-Collection"))
Following operations are supported:
- FindOne - Err and Decode method of mongo.SingleResult
- Find - Next, TryNext, Err, Close, All and Decode methods of mongo.cursor
- InsertOne
- InsertMany
- UpdateOne
- UpdateMany
- DeleteOne
- DeleteMany
- CountDocuments
- Distinct
- Aggregate - Next, TryNext, Err, Close, All and Decode methods of mongo.cursor
2. DynamoDB
import("github.com/keploy/go-sdk/integrations/kddb")
client := kddb.NewDynamoDB(dynamodb.New(sess))
Following operations are supported:
- QueryWithContext
- GetItemWithContext
- PutItemWithContext
3. SQL Driver
import(
"github.com/keploy/go-sdk/integrations/ksql"
"github.com/lib/pq"
)
func init(){
driver := ksql.Driver{Driver: pq.Driver{}}
sql.Register("keploy", &driver)
}
Its compatible with gORM. Here is an example -
pSQL_URI := fmt.Sprintf("host=%s user=%s dbname=%s sslmode=disable password=%s port=%s", "localhost", "postgres", "Book_Keeper", "8789", "5432")
// set DisableAutomaticPing to true for capturing and replaying the outputs of querries stored in requests context.
pSQL_DB, err := gorm.Open(postgres.New(postgres.Config{DriverName: "keploy", DSN: pSQL_URI}), &gorm.Config{ DisableAutomaticPing: true })
if err!=nil{
log.Fatal(err)
} else {
fmt.Println("Successfully connected to postgres")
}
r:=gin.New()
kgin.GinV1(kApp, r)
r.GET("/gin/:color/*type", func(c *gin.Context) {
// set the context of *gorm.DB with request's context of http Handler function before queries.
pSQL_DB = pSQL_DB.WithContext(r.Context())
// Find
var (
people []Book
)
x := pSQL_DB.Find(&people)
}))
4. Elasticsearch
The elastic-search client uses http client to do CRUD operations. There is a Transport field in elasticsearch.config which allows you to completely replace the default HTTP client used by the package.So, we use khttp as an interceptor and assign it to the Transport field. Here is an example of making elastic search client with keploy's http interceptor -
import (
"net/http"
"github.com/elastic/go-elasticsearch/v8"
"github.com/keploy/go-sdk/integrations/khttpclient"
)
func ConnectWithElasticsearch(ctx context.Context) *elasticsearch.Client {
// integrate http with keploy
interceptor := khttpclient.NewInterceptor(http.DefaultTransport)
newClient, err := elasticsearch.NewClient(elasticsearch.Config{
Addresses: []string{
"http://localhost:9200",
},
// use khttp as custom http client
Transport: interceptor,
})
if err != nil {
panic(err)
}
return newClient
}
Note: The heavy operations like bulk indexing will take time depending on the configuration of the machine on which the keploy is running.
5. Redis
import(
"context"
"time"
"github.com/go-redis/redis/v8"
"github.com/keploy/go-sdk/integrations/kredis"
)
type redisCache struct {
host string
db int
expires time.Duration
}
func (cache *redisCache) getClient() redis.UniversalClient {
client := redis.NewClient(&redis.Options{
Addr: cache.host,
Password: "",
DB: cache.db,
})
return kredis.NewRedisClient(client)
}
Following operations are supported:
- Get
- Set
- Del
Supported Clients
net/http
khttpclient.NewHttpClient(&http.Client{})
Example
import("github.com/keploy/go-sdk/integrations/khttpclient")
func(w http.ResponseWriter, r *http.Request){
client := khttpclient.NewHttpClient(&http.Client{})
// ensure to add request context to all outgoing http requests
client.SetCtxHttpClient(r.Context())
resp, err := client.Get("https://example.com")
}
Note: ensure to add pass request context to all external requests like http requests, db calls, etc.
gRPC
conn, err := grpc.Dial(address, grpc.WithInsecure(), kgrpc.WithClientUnaryInterceptor(k))
Example
import("github.com/keploy/go-sdk/integrations/kgrpc")
port := "6789"
k := keploy.New(keploy.Config{
App: keploy.AppConfig{
Name: "my-app",
Port: port,
},
Server: keploy.ServerConfig{
URL: "http://localhost:6789/api",
},
})
conn, err := grpc.Dial(address, grpc.WithInsecure(), kgrpc.WithClientUnaryInterceptor(k))
Note: Currently streaming is not yet supported.