committed by
GitHub
12 changed files with 592 additions and 573 deletions
@ -0,0 +1,71 @@ |
|||
{ |
|||
debug |
|||
http_port 8080 |
|||
https_port 8443 |
|||
default_sni localhost |
|||
order root first |
|||
storage file_system { |
|||
root /data |
|||
} |
|||
acme_ca https://example.com |
|||
acme_ca_root /path/to/ca.crt |
|||
email test@example.com |
|||
admin off |
|||
on_demand_tls { |
|||
ask https://example.com |
|||
interval 30s |
|||
burst 20 |
|||
} |
|||
local_certs |
|||
key_type ed25519 |
|||
} |
|||
|
|||
:80 |
|||
---------- |
|||
{ |
|||
"admin": { |
|||
"disabled": true |
|||
}, |
|||
"logging": { |
|||
"logs": { |
|||
"default": { |
|||
"level": "DEBUG" |
|||
} |
|||
} |
|||
}, |
|||
"storage": { |
|||
"module": "file_system", |
|||
"root": "/data" |
|||
}, |
|||
"apps": { |
|||
"http": { |
|||
"http_port": 8080, |
|||
"https_port": 8443, |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
"tls": { |
|||
"automation": { |
|||
"policies": [ |
|||
{ |
|||
"issuer": { |
|||
"module": "internal" |
|||
} |
|||
} |
|||
], |
|||
"on_demand": { |
|||
"rate_limit": { |
|||
"interval": 30000000000, |
|||
"burst": 20 |
|||
}, |
|||
"ask": "https://example.com" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,37 @@ |
|||
:80 { |
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
---------- |
|||
{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,59 @@ |
|||
http://a.caddy.localhost { |
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
---------- |
|||
{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
], |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
], |
|||
"automatic_https": { |
|||
"skip": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,54 @@ |
|||
localhost:80 { |
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
---------- |
|||
{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
], |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,59 @@ |
|||
http://a.caddy.localhost:81 { |
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
---------- |
|||
{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":81" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
], |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
], |
|||
"automatic_https": { |
|||
"skip": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,54 @@ |
|||
a.caddy.localhost { |
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
---------- |
|||
{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":443" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
], |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,47 @@ |
|||
:80 |
|||
|
|||
log { |
|||
output file /var/log/access.log { |
|||
roll_size 1gb |
|||
roll_keep 5 |
|||
roll_keep_for 90d |
|||
} |
|||
} |
|||
---------- |
|||
{ |
|||
"logging": { |
|||
"logs": { |
|||
"default": { |
|||
"exclude": [ |
|||
"http.log.access.log0" |
|||
] |
|||
}, |
|||
"log0": { |
|||
"writer": { |
|||
"filename": "/var/log/access.log", |
|||
"output": "file", |
|||
"roll_keep": 5, |
|||
"roll_keep_days": 90, |
|||
"roll_size_mb": 954 |
|||
}, |
|||
"include": [ |
|||
"http.log.access.log0" |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"logs": { |
|||
"default_logger_name": "log0" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,77 @@ |
|||
:80 { |
|||
@matcher { |
|||
method GET |
|||
} |
|||
respond @matcher "get" |
|||
|
|||
@matcher2 method POST |
|||
respond @matcher2 "post" |
|||
|
|||
@matcher3 not method PUT |
|||
respond @matcher3 "not put" |
|||
} |
|||
---------- |
|||
{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"method": [ |
|||
"GET" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"body": "get", |
|||
"handler": "static_response" |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"method": [ |
|||
"POST" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"body": "post", |
|||
"handler": "static_response" |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"not": [ |
|||
{ |
|||
"method": [ |
|||
"PUT" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"body": "not put", |
|||
"handler": "static_response" |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,49 @@ |
|||
:80 |
|||
|
|||
@test { |
|||
not { |
|||
header Abc "123" |
|||
header Bcd "123" |
|||
} |
|||
} |
|||
respond @test 403 |
|||
---------- |
|||
{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"not": [ |
|||
{ |
|||
"header": { |
|||
"Abc": [ |
|||
"123" |
|||
], |
|||
"Bcd": [ |
|||
"123" |
|||
] |
|||
} |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "static_response", |
|||
"status_code": 403 |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,43 @@ |
|||
localhost:80 |
|||
respond * "{header.content-type} {labels.0} {query.p} {path.0} {re.name.0}" |
|||
---------- |
|||
{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "{http.request.header.content-type} {http.request.host.labels.0} {http.request.uri.query.p} {http.request.uri.path.0} {http.regexp.name.0}", |
|||
"handler": "static_response" |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -1,587 +1,47 @@ |
|||
package integration |
|||
|
|||
import ( |
|||
"io/ioutil" |
|||
"regexp" |
|||
"strings" |
|||
"testing" |
|||
|
|||
"github.com/caddyserver/caddy/v2/caddytest" |
|||
) |
|||
|
|||
func TestHttpOnlyOnLocalhost(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
localhost:80 { |
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
`, "caddyfile", `{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
], |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
func TestCaddyfileAdaptToJSON(t *testing.T) { |
|||
// load the list of test files from the dir
|
|||
files, err := ioutil.ReadDir("./caddyfile_adapt") |
|||
if err != nil { |
|||
t.Errorf("failed to read caddyfile_adapt dir: %s", err) |
|||
} |
|||
}`) |
|||
} |
|||
|
|||
func TestHttpOnlyOnAnyAddress(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
:80 { |
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
`, "caddyfile", `{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
// prep a regexp to fix strings on windows
|
|||
winNewlines := regexp.MustCompile(`\r?\n`) |
|||
|
|||
func TestHttpsOnDomain(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
a.caddy.localhost { |
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
`, "caddyfile", `{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":443" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
], |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
] |
|||
} |
|||
} |
|||
for _, f := range files { |
|||
if f.IsDir() { |
|||
continue |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
|
|||
func TestHttpOnlyOnDomain(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
http://a.caddy.localhost {
|
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
// read the test file
|
|||
filename := f.Name() |
|||
data, err := ioutil.ReadFile("./caddyfile_adapt/" + filename) |
|||
if err != nil { |
|||
t.Errorf("failed to read %s dir: %s", filename, err) |
|||
} |
|||
} |
|||
`, "caddyfile", `{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
], |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
], |
|||
"automatic_https": { |
|||
"skip": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
|
|||
func TestHttpOnlyOnNonStandardPort(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
http://a.caddy.localhost:81 {
|
|||
respond /version 200 { |
|||
body "hello from localhost" |
|||
} |
|||
} |
|||
`, "caddyfile", `{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":81" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "hello from localhost", |
|||
"handler": "static_response", |
|||
"status_code": 200 |
|||
} |
|||
], |
|||
"match": [ |
|||
{ |
|||
"path": [ |
|||
"/version" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
], |
|||
"automatic_https": { |
|||
"skip": [ |
|||
"a.caddy.localhost" |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
|
|||
func TestMatcherSyntax(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
:80 { |
|||
@matcher { |
|||
method GET |
|||
} |
|||
respond @matcher "get" |
|||
// split the Caddyfile (first) and JSON (second) parts
|
|||
parts := strings.Split(string(data), "----------") |
|||
caddyfile, json := strings.TrimSpace(parts[0]), strings.TrimSpace(parts[1]) |
|||
|
|||
@matcher2 method POST |
|||
respond @matcher2 "post" |
|||
|
|||
@matcher3 not method PUT |
|||
respond @matcher3 "not put" |
|||
} |
|||
`, "caddyfile", `{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"method": [ |
|||
"GET" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"body": "get", |
|||
"handler": "static_response" |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"method": [ |
|||
"POST" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"body": "post", |
|||
"handler": "static_response" |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"not": [ |
|||
{ |
|||
"method": [ |
|||
"PUT" |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"body": "not put", |
|||
"handler": "static_response" |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
|
|||
func TestNotBlockMerging(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
:80 |
|||
|
|||
@test { |
|||
not { |
|||
header Abc "123" |
|||
header Bcd "123" |
|||
} |
|||
} |
|||
respond @test 403 |
|||
`, "caddyfile", `{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"not": [ |
|||
{ |
|||
"header": { |
|||
"Abc": [ |
|||
"123" |
|||
], |
|||
"Bcd": [ |
|||
"123" |
|||
] |
|||
} |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "static_response", |
|||
"status_code": 403 |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
|
|||
func TestGlobalOptions(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
{ |
|||
debug |
|||
http_port 8080 |
|||
https_port 8443 |
|||
default_sni localhost |
|||
order root first |
|||
storage file_system { |
|||
root /data |
|||
} |
|||
acme_ca https://example.com
|
|||
acme_ca_root /path/to/ca.crt |
|||
email test@example.com |
|||
admin off |
|||
on_demand_tls { |
|||
ask https://example.com
|
|||
interval 30s |
|||
burst 20 |
|||
} |
|||
local_certs |
|||
key_type ed25519 |
|||
} |
|||
|
|||
:80 |
|||
`, "caddyfile", `{ |
|||
"admin": { |
|||
"disabled": true |
|||
}, |
|||
"logging": { |
|||
"logs": { |
|||
"default": { |
|||
"level": "DEBUG" |
|||
} |
|||
} |
|||
}, |
|||
"storage": { |
|||
"module": "file_system", |
|||
"root": "/data" |
|||
}, |
|||
"apps": { |
|||
"http": { |
|||
"http_port": 8080, |
|||
"https_port": 8443, |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
"tls": { |
|||
"automation": { |
|||
"policies": [ |
|||
{ |
|||
"issuer": { |
|||
"module": "internal" |
|||
} |
|||
} |
|||
], |
|||
"on_demand": { |
|||
"rate_limit": { |
|||
"interval": 30000000000, |
|||
"burst": 20 |
|||
}, |
|||
"ask": "https://example.com" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
|
|||
func TestLogRollDays(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
:80 |
|||
|
|||
log { |
|||
output file /var/log/access.log { |
|||
roll_size 1gb |
|||
roll_keep 5 |
|||
roll_keep_for 90d |
|||
} |
|||
} |
|||
`, "caddyfile", `{ |
|||
"logging": { |
|||
"logs": { |
|||
"default": { |
|||
"exclude": [ |
|||
"http.log.access.log0" |
|||
] |
|||
}, |
|||
"log0": { |
|||
"writer": { |
|||
"filename": "/var/log/access.log", |
|||
"output": "file", |
|||
"roll_keep": 5, |
|||
"roll_keep_days": 90, |
|||
"roll_size_mb": 954 |
|||
}, |
|||
"include": [ |
|||
"http.log.access.log0" |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"logs": { |
|||
"default_logger_name": "log0" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
// replace windows newlines in the json with unix newlines
|
|||
json = winNewlines.ReplaceAllString(json, "\n") |
|||
|
|||
func TestShorthandParameterizedPlaceholders(t *testing.T) { |
|||
caddytest.AssertAdapt(t, ` |
|||
localhost:80 |
|||
respond * "{header.content-type} {labels.0} {query.p} {path.0} {re.name.0}" |
|||
`, "caddyfile", `{ |
|||
"apps": { |
|||
"http": { |
|||
"servers": { |
|||
"srv0": { |
|||
"listen": [ |
|||
":80" |
|||
], |
|||
"routes": [ |
|||
{ |
|||
"match": [ |
|||
{ |
|||
"host": [ |
|||
"localhost" |
|||
] |
|||
} |
|||
], |
|||
"handle": [ |
|||
{ |
|||
"handler": "subroute", |
|||
"routes": [ |
|||
{ |
|||
"handle": [ |
|||
{ |
|||
"body": "{http.request.header.content-type} {http.request.host.labels.0} {http.request.uri.query.p} {http.request.uri.path.0} {http.regexp.name.0}", |
|||
"handler": "static_response" |
|||
} |
|||
] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"terminal": true |
|||
} |
|||
] |
|||
} |
|||
} |
|||
// run the test
|
|||
ok := caddytest.CompareAdapt(t, caddyfile, "caddyfile", json) |
|||
if !ok { |
|||
t.Errorf("failed to adapt %s", filename) |
|||
} |
|||
} |
|||
}`) |
|||
} |
|||
|
Loading…
Reference in new issue