config: fix panic on multiple Close() (#1374)
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
40ff6ddfcf
commit
cbb958def5
@ -44,7 +44,7 @@ func (c *config) Init(opts ...Option) error {
|
|||||||
Loader: memory.NewLoader(),
|
Loader: memory.NewLoader(),
|
||||||
Reader: json.NewReader(),
|
Reader: json.NewReader(),
|
||||||
}
|
}
|
||||||
|
c.exit = make(chan bool)
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
o(&c.opts)
|
o(&c.opts)
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package file
|
package file_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -6,8 +6,37 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/micro/go-micro/v2/config"
|
||||||
|
"github.com/micro/go-micro/v2/config/source/file"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestConfig(t *testing.T) {
|
||||||
|
data := []byte(`{"foo": "bar"}`)
|
||||||
|
path := filepath.Join(os.TempDir(), fmt.Sprintf("file.%d", time.Now().UnixNano()))
|
||||||
|
fh, err := os.Create(path)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
fh.Close()
|
||||||
|
os.Remove(path)
|
||||||
|
}()
|
||||||
|
_, err = fh.Write(data)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
conf, err := config.NewConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
conf.Load(file.NewSource(file.WithPath(path)))
|
||||||
|
// simulate multiple close
|
||||||
|
go conf.Close()
|
||||||
|
go conf.Close()
|
||||||
|
}
|
||||||
|
|
||||||
func TestFile(t *testing.T) {
|
func TestFile(t *testing.T) {
|
||||||
data := []byte(`{"foo": "bar"}`)
|
data := []byte(`{"foo": "bar"}`)
|
||||||
path := filepath.Join(os.TempDir(), fmt.Sprintf("file.%d", time.Now().UnixNano()))
|
path := filepath.Join(os.TempDir(), fmt.Sprintf("file.%d", time.Now().UnixNano()))
|
||||||
@ -25,7 +54,7 @@ func TestFile(t *testing.T) {
|
|||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
f := NewSource(WithPath(path))
|
f := file.NewSource(file.WithPath(path))
|
||||||
c, err := f.Read()
|
c, err := f.Read()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user