From bde3823b76b457a933e684cd096ca84fc6378997 Mon Sep 17 00:00:00 2001 From: Francis Lavoie Date: Thu, 14 May 2020 17:53:28 -0400 Subject: caddytest: Refactor Caddyfile adapt tests to separate files (#3398) --- caddytest/integration/caddyfile_adapt_test.go | 594 ++------------------------ 1 file changed, 27 insertions(+), 567 deletions(-) (limited to 'caddytest/integration/caddyfile_adapt_test.go') diff --git a/caddytest/integration/caddyfile_adapt_test.go b/caddytest/integration/caddyfile_adapt_test.go index 280e22e..bfe22ad 100644 --- a/caddytest/integration/caddyfile_adapt_test.go +++ b/caddytest/integration/caddyfile_adapt_test.go @@ -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) } } -}`) } -- cgit v1.2.3