refactor(server): testing server
This commit is contained in:
parent
8fd2dffcb9
commit
05deed2452
3 changed files with 178 additions and 30 deletions
|
|
@ -27,8 +27,41 @@ func NewServer(apiHandlers *APIHandlers, port int, logger *zap.Logger) *Server {
|
|||
}
|
||||
|
||||
func (s *Server) Run(ctx context.Context) {
|
||||
sugared := s.logger.Sugar()
|
||||
middlewares := make([]fiber.Handler, 0)
|
||||
|
||||
loggingMiddleware := fiberzap.New(fiberzap.Config{
|
||||
Logger: s.logger,
|
||||
})
|
||||
middlewares = append(middlewares, loggingMiddleware)
|
||||
|
||||
app := setupServer(s.apiHandlers, middlewares, s.logger, false)
|
||||
|
||||
go func() {
|
||||
fiberErr := app.Listen(fmt.Sprintf(":%d", s.port))
|
||||
if fiberErr != nil {
|
||||
panic(fiberErr)
|
||||
}
|
||||
}()
|
||||
|
||||
s.logger.Info("HTTP server is now running", zap.Int("port", s.port))
|
||||
|
||||
<-ctx.Done()
|
||||
shutdownBegan := time.Now()
|
||||
|
||||
s.logger.Info("Shutting HTTP server down gracefully...")
|
||||
err := app.ShutdownWithTimeout(10 * time.Second)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
s.logger.Info("HTTP server shut down gracefully.", zap.Duration("duration", time.Since(shutdownBegan)))
|
||||
}
|
||||
|
||||
func NewTestingServer(apiHandlers *APIHandlers) *fiber.App {
|
||||
return setupServer(apiHandlers, nil, zap.NewNop(), true)
|
||||
}
|
||||
|
||||
func setupServer(apiHandlers *APIHandlers, middlewares []fiber.Handler, logger *zap.Logger, testing bool) *fiber.App {
|
||||
config := fiber.Config{
|
||||
DisableStartupMessage: true,
|
||||
|
||||
|
|
@ -39,9 +72,9 @@ func (s *Server) Run(ctx context.Context) {
|
|||
|
||||
app := fiber.New(config)
|
||||
|
||||
app.Use(fiberzap.New(fiberzap.Config{
|
||||
Logger: s.logger,
|
||||
}))
|
||||
for _, mw := range middlewares {
|
||||
app.Use(mw)
|
||||
}
|
||||
|
||||
swaggerConfig := swagger.Config{
|
||||
BasePath: "/",
|
||||
|
|
@ -49,42 +82,32 @@ func (s *Server) Run(ctx context.Context) {
|
|||
Path: "/swagger",
|
||||
Title: "Swagger API Docs",
|
||||
}
|
||||
|
||||
if testing {
|
||||
swaggerConfig = swagger.Config{
|
||||
BasePath: "/",
|
||||
FilePath: "../../api/v1/openapi.yaml",
|
||||
Path: "/swagger",
|
||||
Title: "Swagger API Docs",
|
||||
}
|
||||
}
|
||||
|
||||
app.Use(swagger.New(swaggerConfig))
|
||||
|
||||
swagger, err := GetSwagger()
|
||||
serverSwaggerSpec, err := GetSwagger()
|
||||
if err != nil {
|
||||
sugared.Fatal("Error getting swagger", zap.Error(err))
|
||||
logger.Fatal("Error getting swagger", zap.Error(err))
|
||||
}
|
||||
|
||||
// See: https://github.com/deepmap/oapi-codegen/blob/master/examples/petstore-expanded/fiber/petstore.go#L41
|
||||
// Clear out the servers array in the swagger spec, that skips validating
|
||||
// that server names match. We don't know how this thing will be run.
|
||||
swagger.Servers = nil
|
||||
serverSwaggerSpec.Servers = nil
|
||||
|
||||
app.Use(middleware.OapiRequestValidator(swagger))
|
||||
app.Use(middleware.OapiRequestValidator(serverSwaggerSpec))
|
||||
|
||||
handlers := NewStrictHandler(s.apiHandlers, nil)
|
||||
handlers := NewStrictHandler(apiHandlers, nil)
|
||||
RegisterHandlers(app, handlers)
|
||||
|
||||
go func() {
|
||||
err := app.Listen(fmt.Sprintf(":%d", s.port))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}()
|
||||
|
||||
sugared.Infow("HTTP server is now running", "port", s.port)
|
||||
|
||||
<-ctx.Done()
|
||||
shutdownBegan := time.Now()
|
||||
|
||||
sugared.Infoln("Shutting HTTP server down gracefully...")
|
||||
err = app.ShutdownWithTimeout(10 * time.Second)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Cleanup code here
|
||||
|
||||
sugared.Infow("HTTP server shut down gracefully.", "took", time.Since(shutdownBegan))
|
||||
return app
|
||||
}
|
||||
|
|
|
|||
Reference in a new issue