@ -79,6 +79,244 @@ func TestSRVWithDial(t *testing.T) {
` , "json", ` upstream : specifying dial address is incompatible with lookup_srv : 0 : { \ "dial\": \"tcp/address.to.upstream:80\", \"lookup_srv\": \"srv.host.service.consul\" } ` )
}
func TestDialWithPlaceholderUnix ( t * testing . T ) {
if runtime . GOOS == "windows" {
t . SkipNow ( )
}
f , err := ioutil . TempFile ( "" , "*.sock" )
if err != nil {
t . Errorf ( "failed to create TempFile: %s" , err )
return
}
// a hack to get a file name within a valid path to use as socket
socketName := f . Name ( )
os . Remove ( f . Name ( ) )
server := http . Server {
Handler : http . HandlerFunc ( func ( w http . ResponseWriter , req * http . Request ) {
w . Write ( [ ] byte ( "Hello, World!" ) )
} ) ,
}
unixListener , err := net . Listen ( "unix" , socketName )
if err != nil {
t . Errorf ( "failed to listen on the socket: %s" , err )
return
}
go server . Serve ( unixListener )
t . Cleanup ( func ( ) {
server . Close ( )
} )
runtime . Gosched ( ) // Allow other goroutines to run
tester := caddytest . NewTester ( t )
tester . InitServer ( `
{
"apps" : {
"http" : {
"servers" : {
"srv0" : {
"listen" : [
":8080"
] ,
"routes" : [
{
"handle" : [
{
"handler" : "reverse_proxy" ,
"upstreams" : [
{
"dial" : "unix/{http.request.header.X-Caddy-Upstream-Dial}"
}
]
}
]
}
]
}
}
}
}
}
` , "json" )
req , err := http . NewRequest ( http . MethodGet , "http://localhost:8080" , nil )
if err != nil {
t . Fail ( )
return
}
req . Header . Set ( "X-Caddy-Upstream-Dial" , socketName )
tester . AssertResponse ( req , 200 , "Hello, World!" )
}
func TestReverseProxyWithPlaceholderDialAddress ( t * testing . T ) {
tester := caddytest . NewTester ( t )
tester . InitServer ( `
{
"apps" : {
"http" : {
"servers" : {
"srv0" : {
"listen" : [
":8080"
] ,
"routes" : [
{
"match" : [
{
"host" : [
"localhost"
]
}
] ,
"handle" : [
{
"handler" : "static_response" ,
"body" : "Hello, World!"
}
] ,
"terminal" : true
}
] ,
"automatic_https" : {
"skip" : [
"localhost"
]
}
} ,
"srv1" : {
"listen" : [
":9080"
] ,
"routes" : [
{
"match" : [
{
"host" : [
"localhost"
]
}
] ,
"handle" : [
{
"handler" : "reverse_proxy" ,
"upstreams" : [
{
"dial" : "{http.request.header.X-Caddy-Upstream-Dial}"
}
]
}
] ,
"terminal" : true
}
] ,
"automatic_https" : {
"skip" : [
"localhost"
]
}
}
}
}
}
}
` , "json" )
req , err := http . NewRequest ( http . MethodGet , "http://localhost:9080" , nil )
if err != nil {
t . Fail ( )
return
}
req . Header . Set ( "X-Caddy-Upstream-Dial" , "localhost:8080" )
tester . AssertResponse ( req , 200 , "Hello, World!" )
}
func TestReverseProxyWithPlaceholderTCPDialAddress ( t * testing . T ) {
tester := caddytest . NewTester ( t )
tester . InitServer ( `
{
"apps" : {
"http" : {
"servers" : {
"srv0" : {
"listen" : [
":8080"
] ,
"routes" : [
{
"match" : [
{
"host" : [
"localhost"
]
}
] ,
"handle" : [
{
"handler" : "static_response" ,
"body" : "Hello, World!"
}
] ,
"terminal" : true
}
] ,
"automatic_https" : {
"skip" : [
"localhost"
]
}
} ,
"srv1" : {
"listen" : [
":9080"
] ,
"routes" : [
{
"match" : [
{
"host" : [
"localhost"
]
}
] ,
"handle" : [
{
"handler" : "reverse_proxy" ,
"upstreams" : [
{
"dial" : "tcp/{http.request.header.X-Caddy-Upstream-Dial}:8080"
}
]
}
] ,
"terminal" : true
}
] ,
"automatic_https" : {
"skip" : [
"localhost"
]
}
}
}
}
}
}
` , "json" )
req , err := http . NewRequest ( http . MethodGet , "http://localhost:9080" , nil )
if err != nil {
t . Fail ( )
return
}
req . Header . Set ( "X-Caddy-Upstream-Dial" , "localhost" )
tester . AssertResponse ( req , 200 , "Hello, World!" )
}
func TestSRVWithActiveHealthcheck ( t * testing . T ) {
caddytest . AssertLoadError ( t , `
{