web/server_test.go
Rama master · réplica de lectura del repositorio original.
package web
import (
"context"
"fmt"
"io"
"net/http"
"testing"
"time"
"github.com/labstack/echo/v4"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestServers_ok(t *testing.T) {
major := echo.New()
major.HideBanner = true
major.HidePort = true
major.GET("/ping", func(e echo.Context) error {
return e.Blob(http.StatusOK, "application/text", []byte("pong major"))
})
servers := NewServers()
defer servers.Shutdown(context.Background())
err := servers.Start(major, "major", "localhost:")
require.NoError(t, err)
res, err := http.Get(fmt.Sprintf("http://%s/ping", servers.GetAddr("major")))
require.NoError(t, err)
defer res.Body.Close()
raw, err := io.ReadAll(res.Body)
require.NoError(t, err)
assert.Equal(t, "pong major", string(raw))
}
func TestServers_handle_ipv4_ipv6_on_localhost(t *testing.T) {
major := echo.New()
major.HideBanner = true
major.HidePort = true
major.GET("/ping", func(e echo.Context) error {
return e.Blob(http.StatusOK, "application/text", []byte("pong major"))
})
servers := NewServers()
defer servers.Shutdown(context.Background())
err := servers.Start(major, "major", "localhost:38423")
require.NoError(t, err)
// Need some time to start the goroutines.
time.Sleep(50 * time.Millisecond)
// Call the host on IPv4
res, err := http.Get("http://127.0.0.1:38423/ping")
require.NoError(t, err)
raw, err := io.ReadAll(res.Body)
require.NoError(t, err)
assert.Equal(t, "pong major", string(raw))
// Call the host on IPv6
res, err = http.Get("http://[::1]:38423/ping")
require.NoError(t, err)
defer res.Body.Close()
raw, err = io.ReadAll(res.Body)
require.NoError(t, err)
assert.Equal(t, "pong major", string(raw))
}
func TestServers_with_a_missing_port(t *testing.T) {
major := echo.New()
major.HideBanner = true
major.HidePort = true
major.GET("/ping", func(e echo.Context) error {
return e.Blob(http.StatusOK, "application/text", []byte("pong major"))
})
servers := NewServers()
defer servers.Shutdown(context.Background())
err := servers.Start(major, "major", "localhost")
assert.EqualError(t, err, "address localhost: missing port in address")
}
func TestServers_with_an_invalid_host(t *testing.T) {
major := echo.New()
major.HideBanner = true
major.HidePort = true
major.GET("/ping", func(e echo.Context) error {
return e.Blob(http.StatusOK, "application/text", []byte("pong major"))
})
servers := NewServers()
defer servers.Shutdown(context.Background())
err := servers.Start(major, "major", "[[localhost:32")
assert.EqualError(t, err, "address [[localhost:32: missing ']' in address")
}
func TestServers_with_an_missing_argument(t *testing.T) {
major := echo.New()
major.HideBanner = true
major.HidePort = true
major.GET("/ping", func(e echo.Context) error {
return e.Blob(http.StatusOK, "application/text", []byte("pong major"))
})
servers := NewServers()
defer servers.Shutdown(context.Background())
err := servers.Start(major, "", "localhost:432")
assert.ErrorIs(t, err, ErrMissingArgument)
err = servers.Start(major, "major", "")
assert.ErrorIs(t, err, ErrMissingArgument)
}