Ctrl K
ComunidadGuías…

web/server_test.go

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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)
}