mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-27 14:13:48 +03:00
4b1a9b6cc1
* caddy adapt for listen_protocols * adapt listen_socket * allow multiple listen sockets for port ranges and readd socket fd listen logic * readd logic to start servers according to listener protocols * gofmt * adapt caddytest * gosec * fmt and rename listen to listenWithSocket * fmt and rename listen to listenWithSocket * more consistent error msg * non unix listenReusableWithSocketFile * remove unused func * doc comment typo * nonosec * commit * doc comments * more doc comments * comment was misleading, cardinality did not change * addressesWithProtocols * update test * fd/ and fdgram/ * rm addr * actually write... * i guess we doin' "skip": now * wrong var in placeholder * wrong var in placeholder II * update param name in comment * dont save nil file pointers * windows * key -> parsedKey * osx * multiple default_bind with protocols * check for h1 and h2 listener netw
280 lines
4.9 KiB
Go
280 lines
4.9 KiB
Go
package caddycmd
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseEnvFile(t *testing.T) {
|
|
for i, tc := range []struct {
|
|
input string
|
|
expect map[string]string
|
|
shouldErr bool
|
|
}{
|
|
{
|
|
input: `KEY=value`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
INVALID KEY=asdf
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
shouldErr: true,
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
SIMPLE_QUOTED="quoted value"
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
"SIMPLE_QUOTED": "quoted value",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
NEWLINES="foo
|
|
bar"
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
"NEWLINES": "foo\n\tbar",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
ESCAPED="\"escaped quotes\"
|
|
here"
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
"ESCAPED": "\"escaped quotes\"\nhere",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
export KEY=value
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
=value
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
shouldErr: true,
|
|
},
|
|
{
|
|
input: `
|
|
EMPTY=
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"EMPTY": "",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
EMPTY=""
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"EMPTY": "",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
#OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
COMMENT=foo bar # some comment here
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
"COMMENT": "foo bar",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
WHITESPACE= foo
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
shouldErr: true,
|
|
},
|
|
{
|
|
input: `
|
|
KEY=value
|
|
WHITESPACE=" foo bar "
|
|
OTHER_KEY=Some Value
|
|
`,
|
|
expect: map[string]string{
|
|
"KEY": "value",
|
|
"WHITESPACE": " foo bar ",
|
|
"OTHER_KEY": "Some Value",
|
|
},
|
|
},
|
|
} {
|
|
actual, err := parseEnvFile(strings.NewReader(tc.input))
|
|
if err != nil && !tc.shouldErr {
|
|
t.Errorf("Test %d: Got error but shouldn't have: %v", i, err)
|
|
}
|
|
if err == nil && tc.shouldErr {
|
|
t.Errorf("Test %d: Did not get error but should have", i)
|
|
}
|
|
if tc.shouldErr {
|
|
continue
|
|
}
|
|
if !reflect.DeepEqual(tc.expect, actual) {
|
|
t.Errorf("Test %d: Expected %v but got %v", i, tc.expect, actual)
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_isCaddyfile(t *testing.T) {
|
|
type args struct {
|
|
configFile string
|
|
adapterName string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
args args
|
|
want bool
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "bare Caddyfile without adapter",
|
|
args: args{
|
|
configFile: "Caddyfile",
|
|
adapterName: "",
|
|
},
|
|
want: true,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "local Caddyfile without adapter",
|
|
args: args{
|
|
configFile: "./Caddyfile",
|
|
adapterName: "",
|
|
},
|
|
want: true,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "local caddyfile with adapter",
|
|
args: args{
|
|
configFile: "./Caddyfile",
|
|
adapterName: "caddyfile",
|
|
},
|
|
want: true,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "ends with .caddyfile with adapter",
|
|
args: args{
|
|
configFile: "./conf.caddyfile",
|
|
adapterName: "caddyfile",
|
|
},
|
|
want: true,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "ends with .caddyfile without adapter",
|
|
args: args{
|
|
configFile: "./conf.caddyfile",
|
|
adapterName: "",
|
|
},
|
|
want: true,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "config is Caddyfile.yaml with adapter",
|
|
args: args{
|
|
configFile: "./Caddyfile.yaml",
|
|
adapterName: "yaml",
|
|
},
|
|
want: false,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
|
|
name: "json is not caddyfile but not error",
|
|
args: args{
|
|
configFile: "./Caddyfile.json",
|
|
adapterName: "",
|
|
},
|
|
want: false,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
|
|
name: "prefix of Caddyfile and ./ with any extension is Caddyfile",
|
|
args: args{
|
|
configFile: "./Caddyfile.prd",
|
|
adapterName: "",
|
|
},
|
|
want: true,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
|
|
name: "prefix of Caddyfile without ./ with any extension is Caddyfile",
|
|
args: args{
|
|
configFile: "Caddyfile.prd",
|
|
adapterName: "",
|
|
},
|
|
want: true,
|
|
wantErr: false,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := isCaddyfile(tt.args.configFile, tt.args.adapterName)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("isCaddyfile() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if got != tt.want {
|
|
t.Errorf("isCaddyfile() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|