make environment variable interpolation preprocessor optional (#1715)
This commit is contained in:
parent
97ae2979ad
commit
90dca65f55
@ -66,7 +66,7 @@ func (j *jsonReader) Values(ch *source.ChangeSet) (reader.Values, error) {
|
|||||||
if ch.Format != "json" {
|
if ch.Format != "json" {
|
||||||
return nil, errors.New("unsupported format")
|
return nil, errors.New("unsupported format")
|
||||||
}
|
}
|
||||||
return newValues(ch)
|
return newValues(ch, j.opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *jsonReader) String() string {
|
func (j *jsonReader) String() string {
|
||||||
|
@ -3,6 +3,7 @@ package json
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/micro/go-micro/v2/config/reader"
|
||||||
"github.com/micro/go-micro/v2/config/source"
|
"github.com/micro/go-micro/v2/config/source"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -23,7 +24,46 @@ func TestReader(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
r := NewReader()
|
values := newTestValues(t, data)
|
||||||
|
|
||||||
|
for _, test := range testData {
|
||||||
|
if v := values.Get(test.path...).String(""); v != test.value {
|
||||||
|
t.Fatalf("Expected %s got %s for path %v", test.value, v, test.path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDisableReplaceEnvVars(t *testing.T) {
|
||||||
|
data := []byte(`{"foo": "bar", "baz": {"bar": "test/${test}"}}`)
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
path []string
|
||||||
|
value string
|
||||||
|
opts []reader.Option
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
[]string{"baz", "bar"},
|
||||||
|
"test/",
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
[]string{"baz", "bar"},
|
||||||
|
"test/${test}",
|
||||||
|
[]reader.Option{reader.WithDisableReplaceEnvVars()},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
values := newTestValues(t, data, test.opts...)
|
||||||
|
|
||||||
|
if v := values.Get(test.path...).String(""); v != test.value {
|
||||||
|
t.Fatalf("Expected %s got %s for path %v", test.value, v, test.path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTestValues(t *testing.T, data []byte, opts ...reader.Option) reader.Values {
|
||||||
|
r := NewReader(opts...)
|
||||||
|
|
||||||
c, err := r.Merge(&source.ChangeSet{Data: data}, &source.ChangeSet{})
|
c, err := r.Merge(&source.ChangeSet{Data: data}, &source.ChangeSet{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -35,9 +75,5 @@ func TestReader(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range testData {
|
return values
|
||||||
if v := values.Get(test.path...).String(""); v != test.value {
|
|
||||||
t.Fatalf("Expected %s got %s for path %v", test.value, v, test.path)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,14 @@ type jsonValue struct {
|
|||||||
*simple.Json
|
*simple.Json
|
||||||
}
|
}
|
||||||
|
|
||||||
func newValues(ch *source.ChangeSet) (reader.Values, error) {
|
func newValues(ch *source.ChangeSet, opts reader.Options) (reader.Values, error) {
|
||||||
sj := simple.New()
|
sj := simple.New()
|
||||||
data, _ := reader.ReplaceEnvVars(ch.Data)
|
data := ch.Data
|
||||||
|
|
||||||
|
if !opts.DisableReplaceEnvVars {
|
||||||
|
data, _ = reader.ReplaceEnvVars(ch.Data)
|
||||||
|
}
|
||||||
|
|
||||||
if err := sj.UnmarshalJSON(data); err != nil {
|
if err := sj.UnmarshalJSON(data); err != nil {
|
||||||
sj.SetPath(nil, string(ch.Data))
|
sj.SetPath(nil, string(ch.Data))
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/micro/go-micro/v2/config/reader"
|
||||||
"github.com/micro/go-micro/v2/config/source"
|
"github.com/micro/go-micro/v2/config/source"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -32,7 +33,7 @@ func TestValues(t *testing.T) {
|
|||||||
for idx, test := range testData {
|
for idx, test := range testData {
|
||||||
values, err := newValues(&source.ChangeSet{
|
values, err := newValues(&source.ChangeSet{
|
||||||
Data: test.csdata,
|
Data: test.csdata,
|
||||||
})
|
}, reader.Options{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -69,7 +70,7 @@ func TestStructArray(t *testing.T) {
|
|||||||
for idx, test := range testData {
|
for idx, test := range testData {
|
||||||
values, err := newValues(&source.ChangeSet{
|
values, err := newValues(&source.ChangeSet{
|
||||||
Data: test.csdata,
|
Data: test.csdata,
|
||||||
})
|
}, reader.Options{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Options struct {
|
type Options struct {
|
||||||
Encoding map[string]encoder.Encoder
|
Encoding map[string]encoder.Encoder
|
||||||
|
DisableReplaceEnvVars bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type Option func(o *Options)
|
type Option func(o *Options)
|
||||||
@ -40,3 +41,10 @@ func WithEncoder(e encoder.Encoder) Option {
|
|||||||
o.Encoding[e.String()] = e
|
o.Encoding[e.String()] = e
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithDisableReplaceEnvVars disables the environment variable interpolation preprocessor
|
||||||
|
func WithDisableReplaceEnvVars() Option {
|
||||||
|
return func(o *Options) {
|
||||||
|
o.DisableReplaceEnvVars = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user