Всем добрый день.
Есть проект на go в котором используется gin-gonic. Для handler-в требуется написать тесты.
Всю структуру не буду описывать, т.к. думаю она не нужна, но проблема в том что роутер создается и сразу же запускает сервер.
пакет роутера router:
type Router struct {
serverPort *config.HTTPServerConfiguration
handler handler.Handler
}
func New(httpPort *config.HTTPServerConfiguration, event handler.Handler) *Router {
return &Router{
serverPort: httpPort,
handler: event,
}
}
func (r *Router) RunServer(ctx context.Context) {
engine := gin.Default()
r.assignRoutes(engine)
srv := &http.Server{
Addr: r.serverPort.HTTPPort,
Handler: engine,
}
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %s\n", err)
}
}()
<-ctx.Done()
log.Println("shutting down gracefully, press Ctrl+C again to force")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatal("Server forced to shutdown: ", err)
}
log.Println("Server exiting")
}
func (r *Router) assignRoutes(engine *gin.Engine) {
engine.GET("/bucket", r.handler.ProductsInBucket)
engine.GET("/outofbucket", r.handler.ProductsOutFromBucket)
engine.GET("/description", r.handler.ProductsDescription)
engine.GET("/descriptionandbucket", r.handler.ProductsBucketAndDescription)
}
Handler-ы находятся в другом пакете.
И вот вопросом в том, требуется ли мне дополнительная функция, которая бы возвращала
*gin.Engine
, чтобы я мог в тестововм файле запускать спокойно сервер, или мне надо решать тут вопрос по-другому?
Заранее спасибо за ответы.
П.С.: если надо какая-то дополнительная информацию прошу сообщить.