108 lines
2.1 KiB
Go
108 lines
2.1 KiB
Go
package server
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/stretchr/testify/mock"
|
|
"github.com/stretchr/testify/suite"
|
|
"go.uber.org/zap"
|
|
"net/http"
|
|
"penahub.gitlab.yandexcloud.net/backend/templategen_feedback/internal/config"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
type HttpTestSuite struct {
|
|
srv *HTTP
|
|
suite.Suite
|
|
}
|
|
|
|
type MockController struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (m *MockController) Register() (method, path, name string, handler fiber.Handler) {
|
|
return "GET", "/callme", "testCallMe", m.Handler
|
|
}
|
|
|
|
func (m *MockController) Handler(c *fiber.Ctx) error {
|
|
return c.SendStatus(fiber.StatusOK)
|
|
}
|
|
|
|
func (suite *HttpTestSuite) SetupSuite() {
|
|
cfg, err := config.NewConfig("test.env")
|
|
|
|
suite.NoError(err)
|
|
logger := zap.NewNop()
|
|
|
|
srv := NewHTTP(cfg, logger)
|
|
srv.fiber.Config()
|
|
suite.srv = srv
|
|
}
|
|
|
|
func (suite *HttpTestSuite) TearDownSuite() {
|
|
err := suite.srv.Stop()
|
|
suite.NoError(err)
|
|
}
|
|
|
|
func (suite *HttpTestSuite) TestHttp_Register() {
|
|
controller := new(MockController)
|
|
suite.srv.Register(controller)
|
|
|
|
got := suite.srv.fiber.GetRoute("testCallMe")
|
|
|
|
suite.Equal("/callme", got.Path)
|
|
}
|
|
|
|
func (suite *HttpTestSuite) TestHttp_StartAndStop() {
|
|
gotStart := false
|
|
gotStop := false
|
|
|
|
suite.srv.fiber.Hooks().OnListen(func() error {
|
|
gotStart = true
|
|
return nil
|
|
})
|
|
|
|
suite.srv.fiber.Hooks().OnShutdown(func() error {
|
|
gotStop = true
|
|
return nil
|
|
})
|
|
|
|
go func() {
|
|
err := suite.srv.Start()
|
|
suite.NoError(err)
|
|
}()
|
|
|
|
time.Sleep(500 * time.Millisecond)
|
|
|
|
suite.True(gotStart)
|
|
|
|
err := suite.srv.fiber.Shutdown()
|
|
|
|
if suite.NoError(err) {
|
|
time.Sleep(500 * time.Millisecond)
|
|
suite.True(gotStop)
|
|
}
|
|
}
|
|
|
|
func (suite *HttpTestSuite) TestHttp_Limiter() {
|
|
controller := new(MockController)
|
|
suite.srv.Register(controller)
|
|
|
|
req, err := http.NewRequest("GET", "/callme", nil)
|
|
suite.NoError(err)
|
|
|
|
gotOne, err := suite.srv.fiber.Test(req)
|
|
suite.NoError(err)
|
|
|
|
suite.Equal(fiber.StatusOK, gotOne.StatusCode)
|
|
|
|
gotTwo, err := suite.srv.fiber.Test(req)
|
|
suite.NoError(err)
|
|
|
|
suite.Equal(fiber.StatusTooManyRequests, gotTwo.StatusCode)
|
|
}
|
|
|
|
func TestHttpTestSuite(t *testing.T) {
|
|
suite.Run(t, new(HttpTestSuite))
|
|
}
|