2017-08-18 16:34:04 +03:00
package integration
import (
2019-01-16 17:00:09 +03:00
"fmt"
2017-08-18 16:34:04 +03:00
"net/http"
"os"
"time"
"github.com/go-check/check"
2020-09-16 16:46:04 +03:00
"github.com/traefik/traefik/v2/integration/try"
2017-08-18 16:34:04 +03:00
checker "github.com/vdemeester/shakers"
)
type TimeoutSuite struct { BaseSuite }
func ( s * TimeoutSuite ) SetUpSuite ( c * check . C ) {
s . createComposeProject ( c , "timeout" )
s . composeProject . Start ( c )
}
func ( s * TimeoutSuite ) TestForwardingTimeouts ( c * check . C ) {
httpTimeoutEndpoint := s . composeProject . Container ( c , "timeoutEndpoint" ) . NetworkSettings . IPAddress
file := s . adaptFile ( c , "fixtures/timeout/forwarding_timeouts.toml" , struct {
TimeoutEndpoint string
} { httpTimeoutEndpoint } )
defer os . Remove ( file )
2017-09-13 11:34:04 +03:00
cmd , display := s . traefikCmd ( withConfigFile ( file ) )
defer display ( c )
2017-08-18 16:34:04 +03:00
err := cmd . Start ( )
c . Assert ( err , checker . IsNil )
2020-10-09 10:32:03 +03:00
defer s . killCmd ( cmd )
2017-08-18 16:34:04 +03:00
2019-05-16 11:58:06 +03:00
err = try . GetRequest ( "http://127.0.0.1:8080/api/rawdata" , 60 * time . Second , try . BodyContains ( "Path(`/dialTimeout`)" ) )
2017-08-18 16:34:04 +03:00
c . Assert ( err , checker . IsNil )
// This simulates a DialTimeout when connecting to the backend server.
response , err := http . Get ( "http://127.0.0.1:8000/dialTimeout" )
c . Assert ( err , checker . IsNil )
c . Assert ( response . StatusCode , checker . Equals , http . StatusGatewayTimeout )
2019-01-16 17:00:09 +03:00
// Check that timeout service is available
statusURL := fmt . Sprintf ( "http://%s:9000/statusTest?status=200" , httpTimeoutEndpoint )
c . Assert ( try . GetRequest ( statusURL , 60 * time . Second , try . StatusCodeIs ( http . StatusOK ) ) , checker . IsNil )
2017-08-18 16:34:04 +03:00
// This simulates a ResponseHeaderTimeout.
response , err = http . Get ( "http://127.0.0.1:8000/responseHeaderTimeout?sleep=1000" )
c . Assert ( err , checker . IsNil )
c . Assert ( response . StatusCode , checker . Equals , http . StatusGatewayTimeout )
}