summaryrefslogtreecommitdiffhomepage
path: root/replacer_test.go
diff options
context:
space:
mode:
authorFrancis Lavoie <[email protected]>2024-04-24 16:26:18 -0400
committerGitHub <[email protected]>2024-04-24 16:26:18 -0400
commit797973944f9bf60c84350a38848613b6247a66eb (patch)
treef50da352bdfd3e64d1ab6a86e5625a350f28d604 /replacer_test.go
parent6d97d8d87beb788d19a4084d07ec9157e5705b13 (diff)
downloadcaddy-797973944f9bf60c84350a38848613b6247a66eb.tar.gz
caddy-797973944f9bf60c84350a38848613b6247a66eb.zip
replacer: Implement `file.*` global replacements (#5463)
Co-authored-by: Matt Holt <[email protected]> Co-authored-by: Mohammed Al Sahaf <[email protected]>
Diffstat (limited to 'replacer_test.go')
-rw-r--r--replacer_test.go150
1 files changed, 98 insertions, 52 deletions
diff --git a/replacer_test.go b/replacer_test.go
index d18ec8eea..cf4d321b6 100644
--- a/replacer_test.go
+++ b/replacer_test.go
@@ -240,9 +240,9 @@ func TestReplacerSet(t *testing.T) {
func TestReplacerReplaceKnown(t *testing.T) {
rep := Replacer{
mapMutex: &sync.RWMutex{},
- providers: []ReplacerFunc{
+ providers: []replacementProvider{
// split our possible vars to two functions (to test if both functions are called)
- func(key string) (val any, ok bool) {
+ ReplacerFunc(func(key string) (val any, ok bool) {
switch key {
case "test1":
return "val1", true
@@ -255,8 +255,8 @@ func TestReplacerReplaceKnown(t *testing.T) {
default:
return "NOOO", false
}
- },
- func(key string) (val any, ok bool) {
+ }),
+ ReplacerFunc(func(key string) (val any, ok bool) {
switch key {
case "1":
return "test-123", true
@@ -267,7 +267,7 @@ func TestReplacerReplaceKnown(t *testing.T) {
default:
return "NOOO", false
}
- },
+ }),
},
}
@@ -372,53 +372,99 @@ func TestReplacerMap(t *testing.T) {
}
func TestReplacerNew(t *testing.T) {
- rep := NewReplacer()
-
- if len(rep.providers) != 2 {
- t.Errorf("Expected providers length '%v' got length '%v'", 2, len(rep.providers))
- } else {
- // test if default global replacements are added as the first provider
- hostname, _ := os.Hostname()
- wd, _ := os.Getwd()
- os.Setenv("CADDY_REPLACER_TEST", "envtest")
- defer os.Setenv("CADDY_REPLACER_TEST", "")
-
- for _, tc := range []struct {
- variable string
- value string
- }{
- {
- variable: "system.hostname",
- value: hostname,
- },
- {
- variable: "system.slash",
- value: string(filepath.Separator),
- },
- {
- variable: "system.os",
- value: runtime.GOOS,
- },
- {
- variable: "system.arch",
- value: runtime.GOARCH,
- },
- {
- variable: "system.wd",
- value: wd,
- },
- {
- variable: "env.CADDY_REPLACER_TEST",
- value: "envtest",
- },
- } {
- if val, ok := rep.providers[0](tc.variable); ok {
- if val != tc.value {
- t.Errorf("Expected value '%s' for key '%s' got '%s'", tc.value, tc.variable, val)
- }
- } else {
- t.Errorf("Expected key '%s' to be recognized by first provider", tc.variable)
+ repl := NewReplacer()
+
+ if len(repl.providers) != 3 {
+ t.Errorf("Expected providers length '%v' got length '%v'", 3, len(repl.providers))
+ }
+
+ // test if default global replacements are added as the first provider
+ hostname, _ := os.Hostname()
+ wd, _ := os.Getwd()
+ os.Setenv("CADDY_REPLACER_TEST", "envtest")
+ defer os.Setenv("CADDY_REPLACER_TEST", "")
+
+ for _, tc := range []struct {
+ variable string
+ value string
+ }{
+ {
+ variable: "system.hostname",
+ value: hostname,
+ },
+ {
+ variable: "system.slash",
+ value: string(filepath.Separator),
+ },
+ {
+ variable: "system.os",
+ value: runtime.GOOS,
+ },
+ {
+ variable: "system.arch",
+ value: runtime.GOARCH,
+ },
+ {
+ variable: "system.wd",
+ value: wd,
+ },
+ {
+ variable: "env.CADDY_REPLACER_TEST",
+ value: "envtest",
+ },
+ } {
+ if val, ok := repl.providers[0].replace(tc.variable); ok {
+ if val != tc.value {
+ t.Errorf("Expected value '%s' for key '%s' got '%s'", tc.value, tc.variable, val)
+ }
+ } else {
+ t.Errorf("Expected key '%s' to be recognized by first provider", tc.variable)
+ }
+ }
+
+ // test if file provider is added as the second provider
+ for _, tc := range []struct {
+ variable string
+ value string
+ }{
+ {
+ variable: "file.caddytest/integration/testdata/foo.txt",
+ value: "foo",
+ },
+ } {
+ if val, ok := repl.providers[1].replace(tc.variable); ok {
+ if val != tc.value {
+ t.Errorf("Expected value '%s' for key '%s' got '%s'", tc.value, tc.variable, val)
+ }
+ } else {
+ t.Errorf("Expected key '%s' to be recognized by second provider", tc.variable)
+ }
+ }
+}
+
+func TestReplacerNewWithoutFile(t *testing.T) {
+ repl := NewReplacer().WithoutFile()
+
+ for _, tc := range []struct {
+ variable string
+ value string
+ notFound bool
+ }{
+ {
+ variable: "file.caddytest/integration/testdata/foo.txt",
+ notFound: true,
+ },
+ {
+ variable: "system.os",
+ value: runtime.GOOS,
+ },
+ } {
+ if val, ok := repl.Get(tc.variable); ok && !tc.notFound {
+ if val != tc.value {
+ t.Errorf("Expected value '%s' for key '%s' got '%s'", tc.value, tc.variable, val)
}
+ } else if !tc.notFound {
+ t.Errorf("Expected key '%s' to be recognized", tc.variable)
}
}
}
@@ -464,7 +510,7 @@ func BenchmarkReplacer(b *testing.B) {
func testReplacer() Replacer {
return Replacer{
- providers: make([]ReplacerFunc, 0),
+ providers: make([]replacementProvider, 0),
static: make(map[string]any),
mapMutex: &sync.RWMutex{},
}