summaryrefslogtreecommitdiff
path: root/caddytest
diff options
context:
space:
mode:
authorSteffen Brüheim <ueffel@gmail.com>2021-03-30 02:47:19 +0200
committerGitHub <noreply@github.com>2021-03-29 18:47:19 -0600
commitf35a7fa466ffb06c38dcb3216e30c13aa8e14ce5 (patch)
tree5fb5b40ad787a6db69cc1bec543fe6eed234748f /caddytest
parent75f797debdd6c4294497edba9889c6251a8542e7 (diff)
encode,staticfiles: Content negotiation, precompressed files (#4045)
* encode: implement prefer setting * encode: minimum_length configurable via caddyfile * encode: configurable content-types which to encode * file_server: support precompressed files * encode: use ReponseMatcher for conditional encoding of content * linting error & documentation of encode.PrecompressedOrder * encode: allow just one response matcher also change the namespace of the encoders back, I accidently changed to precompressed >.> default matchers include a * to match to any charset, that may be appended * rounding of the PR * added integration tests for new caddyfile directives * improved various doc strings (punctuation and typos) * added json tag for file_server precompress order and encode matcher * file_server: add vary header, remove accept-ranges when serving precompressed files * encode: move Suffix implementation to precompressed modules
Diffstat (limited to 'caddytest')
-rw-r--r--caddytest/integration/caddyfile_adapt/encode_options.txt66
-rw-r--r--caddytest/integration/caddyfile_adapt/file_server_precompressed.txt41
-rw-r--r--caddytest/integration/caddyfile_adapt_test.go7
3 files changed, 114 insertions, 0 deletions
diff --git a/caddytest/integration/caddyfile_adapt/encode_options.txt b/caddytest/integration/caddyfile_adapt/encode_options.txt
new file mode 100644
index 0000000..a43c7e0
--- /dev/null
+++ b/caddytest/integration/caddyfile_adapt/encode_options.txt
@@ -0,0 +1,66 @@
+:80
+
+encode gzip zstd {
+ minimum_length 256
+ prefer zstd gzip
+ match {
+ status 2xx 4xx 500
+ header Content-Type text/*
+ header Content-Type application/json*
+ header Content-Type application/javascript*
+ header Content-Type application/xhtml+xml*
+ header Content-Type application/atom+xml*
+ header Content-Type application/rss+xml*
+ header Content-Type image/svg+xml*
+ }
+}
+----------
+{
+ "apps": {
+ "http": {
+ "servers": {
+ "srv0": {
+ "listen": [
+ ":80"
+ ],
+ "routes": [
+ {
+ "handle": [
+ {
+ "encodings": {
+ "gzip": {},
+ "zstd": {}
+ },
+ "handler": "encode",
+ "match": {
+ "headers": {
+ "Content-Type": [
+ "text/*",
+ "application/json*",
+ "application/javascript*",
+ "application/xhtml+xml*",
+ "application/atom+xml*",
+ "application/rss+xml*",
+ "image/svg+xml*"
+ ]
+ },
+ "status_code": [
+ 2,
+ 4,
+ 500
+ ]
+ },
+ "minimum_length": 256,
+ "prefer": [
+ "zstd",
+ "gzip"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ }
+}
diff --git a/caddytest/integration/caddyfile_adapt/file_server_precompressed.txt b/caddytest/integration/caddyfile_adapt/file_server_precompressed.txt
new file mode 100644
index 0000000..ac7d7ed
--- /dev/null
+++ b/caddytest/integration/caddyfile_adapt/file_server_precompressed.txt
@@ -0,0 +1,41 @@
+:80
+
+file_server {
+ precompressed zstd br gzip
+}
+----------
+{
+ "apps": {
+ "http": {
+ "servers": {
+ "srv0": {
+ "listen": [
+ ":80"
+ ],
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "file_server",
+ "hide": [
+ "./Caddyfile"
+ ],
+ "precompressed": {
+ "br": {},
+ "gzip": {},
+ "zstd": {}
+ },
+ "precompressed_order": [
+ "zstd",
+ "br",
+ "gzip"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ }
+}
diff --git a/caddytest/integration/caddyfile_adapt_test.go b/caddytest/integration/caddyfile_adapt_test.go
index 8794fe9..e109899 100644
--- a/caddytest/integration/caddyfile_adapt_test.go
+++ b/caddytest/integration/caddyfile_adapt_test.go
@@ -1,7 +1,10 @@
package integration
import (
+ jsonMod "encoding/json"
+ "fmt"
"io/ioutil"
+ "path/filepath"
"regexp"
"strings"
"testing"
@@ -39,6 +42,10 @@ func TestCaddyfileAdaptToJSON(t *testing.T) {
// replace windows newlines in the json with unix newlines
json = winNewlines.ReplaceAllString(json, "\n")
+ // replace os-specific default path for file_server's hide field
+ replacePath, _ := jsonMod.Marshal(fmt.Sprint(".", string(filepath.Separator), "Caddyfile"))
+ json = strings.ReplaceAll(json, `"./Caddyfile"`, string(replacePath))
+
// run the test
ok := caddytest.CompareAdapt(t, filename, caddyfile, "caddyfile", json)
if !ok {