84 lines
2 KiB
Go
84 lines
2 KiB
Go
package integration
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/stretchr/testify/suite"
|
|
"github.com/traefik/traefik/v3/integration/try"
|
|
"github.com/traefik/traefik/v3/pkg/config/dynamic"
|
|
)
|
|
|
|
type HTTPSuite struct{ BaseSuite }
|
|
|
|
func TestHTTPSuite(t *testing.T) {
|
|
suite.Run(t, new(HTTPSuite))
|
|
}
|
|
|
|
func (s *HTTPSuite) TestSimpleConfiguration() {
|
|
s.traefikCmd(withConfigFile("fixtures/http/simple.toml"))
|
|
|
|
// Expect a 404 as we configured nothing.
|
|
err := try.GetRequest("http://127.0.0.1:8000/", time.Second, try.StatusCodeIs(http.StatusNotFound))
|
|
require.NoError(s.T(), err)
|
|
|
|
// Provide a configuration, fetched by Traefik provider.
|
|
configuration := &dynamic.Configuration{
|
|
HTTP: &dynamic.HTTPConfiguration{
|
|
Routers: map[string]*dynamic.Router{
|
|
"routerHTTP": {
|
|
EntryPoints: []string{"web"},
|
|
Middlewares: []string{},
|
|
Service: "serviceHTTP",
|
|
Rule: "PathPrefix(`/`)",
|
|
},
|
|
},
|
|
Services: map[string]*dynamic.Service{
|
|
"serviceHTTP": {
|
|
LoadBalancer: &dynamic.ServersLoadBalancer{
|
|
PassHostHeader: pointer(true),
|
|
Servers: []dynamic.Server{
|
|
{
|
|
URL: "http://bacon:80",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
configData, err := json.Marshal(configuration)
|
|
require.NoError(s.T(), err)
|
|
|
|
server := startTestServerWithResponse(configData)
|
|
defer server.Close()
|
|
|
|
// Expect configuration to be applied.
|
|
err = try.GetRequest("http://127.0.0.1:9090/api/rawdata", 3*time.Second, try.BodyContains("routerHTTP@http", "serviceHTTP@http", "http://bacon:80"))
|
|
require.NoError(s.T(), err)
|
|
}
|
|
|
|
func startTestServerWithResponse(response []byte) (ts *httptest.Server) {
|
|
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, _ = w.Write(response)
|
|
})
|
|
listener, err := net.Listen("tcp", "127.0.0.1:9000")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
ts = &httptest.Server{
|
|
Listener: listener,
|
|
Config: &http.Server{Handler: handler},
|
|
}
|
|
ts.Start()
|
|
return ts
|
|
}
|
|
|
|
func pointer[T any](v T) *T { return &v }
|