2020-07-15 17:56:03 +03:00
package integration
import (
"encoding/json"
"net"
"net/http"
"net/http/httptest"
"time"
"github.com/go-check/check"
2020-09-16 16:46:04 +03:00
"github.com/traefik/traefik/v2/integration/try"
"github.com/traefik/traefik/v2/pkg/config/dynamic"
2020-07-15 17:56:03 +03:00
checker "github.com/vdemeester/shakers"
)
type HTTPSuite struct { BaseSuite }
func ( s * HTTPSuite ) TestSimpleConfiguration ( c * check . C ) {
cmd , display := s . traefikCmd ( withConfigFile ( "fixtures/http/simple.toml" ) )
defer display ( c )
err := cmd . Start ( )
c . Assert ( err , checker . IsNil )
2020-10-09 10:32:03 +03:00
defer s . killCmd ( cmd )
2020-07-15 17:56:03 +03:00
// Expect a 404 as we configured nothing.
err = try . GetRequest ( "http://127.0.0.1:8000/" , time . Second , try . StatusCodeIs ( http . StatusNotFound ) )
c . Assert ( err , checker . IsNil )
// 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 : boolRef ( true ) ,
Servers : [ ] dynamic . Server {
{
URL : "http://bacon:80" ,
} ,
} ,
} ,
} ,
} ,
} ,
}
configData , err := json . Marshal ( configuration )
c . Assert ( err , checker . IsNil )
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" ) )
c . Assert ( err , checker . IsNil )
}
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 boolRef ( b bool ) * bool {
return & b
}