plugin/auto: Fix panic caused by config invalid reload value (#4986)
Automatically submitted.
This commit is contained in:
parent
e799a0f5c7
commit
71bb575b71
3 changed files with 67 additions and 3 deletions
|
@ -1,6 +1,7 @@
|
|||
package auto
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
|
@ -44,7 +45,9 @@ func setup(c *caddy.Controller) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if a.loader.ReloadInterval == 0 {
|
||||
return nil
|
||||
}
|
||||
go func() {
|
||||
ticker := time.NewTicker(a.loader.ReloadInterval)
|
||||
for {
|
||||
|
@ -131,7 +134,14 @@ func autoParse(c *caddy.Controller) (Auto, error) {
|
|||
}
|
||||
|
||||
case "reload":
|
||||
d, err := time.ParseDuration(c.RemainingArgs()[0])
|
||||
t := c.RemainingArgs()
|
||||
if len(t) < 1 {
|
||||
return a, errors.New("reload duration value is expected")
|
||||
}
|
||||
d, err := time.ParseDuration(t[0])
|
||||
if d < 0 {
|
||||
err = errors.New("invalid duration")
|
||||
}
|
||||
if err != nil {
|
||||
return a, plugin.Error("file", err)
|
||||
}
|
||||
|
|
|
@ -126,3 +126,52 @@ func TestAutoParse(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetupReload(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
config string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "reload valid",
|
||||
config: `auto {
|
||||
directory .
|
||||
reload 5s
|
||||
}`,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "reload disable",
|
||||
config: `auto {
|
||||
directory .
|
||||
reload 0
|
||||
}`,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "reload invalid",
|
||||
config: `auto {
|
||||
directory .
|
||||
reload -1s
|
||||
}`,
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "reload invalid",
|
||||
config: `auto {
|
||||
directory .
|
||||
reload
|
||||
}`,
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
ctr := caddy.NewTestController("dns", tt.config)
|
||||
if err := setup(ctr); (err != nil) != tt.wantErr {
|
||||
t.Errorf("Error: setup() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package file
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
@ -108,7 +109,11 @@ func fileParse(c *caddy.Controller) (Zones, error) {
|
|||
for c.NextBlock() {
|
||||
switch c.Val() {
|
||||
case "reload":
|
||||
d, err := time.ParseDuration(c.RemainingArgs()[0])
|
||||
t := c.RemainingArgs()
|
||||
if len(t) < 1 {
|
||||
return Zones{}, errors.New("reload duration value is expected")
|
||||
}
|
||||
d, err := time.ParseDuration(t[0])
|
||||
if err != nil {
|
||||
return Zones{}, plugin.Error("file", err)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue