mirror of
				https://github.com/traefik/traefik.git
				synced 2025-10-31 08:21:27 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.0 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 }
 |