1
0
Fork 0

refactor(server): testing server

This commit is contained in:
Vojtěch Mareš 2024-05-12 22:15:23 +02:00
parent 8fd2dffcb9
commit 05deed2452
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D
3 changed files with 178 additions and 30 deletions

View file

@ -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
}