mcfg: made SourceCLI and SourceEnv be pointers

This commit is contained in:
Brian Picciano 2019-04-04 10:57:37 -04:00
parent 7752b569c3
commit a596306d9e
8 changed files with 28 additions and 22 deletions

6
m/m.go
View File

@ -28,7 +28,7 @@ func ProcessContext() context.Context {
ctx := context.Background()
// embed confuration source which should be used into the context.
ctx = context.WithValue(ctx, cfgSrcKey(0), mcfg.Source(mcfg.SourceCLI{}))
ctx = context.WithValue(ctx, cfgSrcKey(0), mcfg.Source(new(mcfg.SourceCLI)))
// set up log level handling
logger := mlog.NewLogger()
@ -57,8 +57,8 @@ func ServiceContext() context.Context {
// services expect to use many different configuration sources
ctx = context.WithValue(ctx, cfgSrcKey(0), mcfg.Source(mcfg.Sources{
mcfg.SourceEnv{},
mcfg.SourceCLI{},
new(mcfg.SourceEnv),
new(mcfg.SourceCLI),
}))
// TODO set up the debug endpoint.

View File

@ -53,7 +53,7 @@ const (
)
// Parse implements the method for the Source interface
func (cli SourceCLI) Parse(params []Param) ([]ParamValue, error) {
func (cli *SourceCLI) Parse(params []Param) ([]ParamValue, error) {
args := cli.Args
if cli.Args == nil {
args = os.Args[1:]
@ -137,7 +137,7 @@ func (cli SourceCLI) Parse(params []Param) ([]ParamValue, error) {
return pvs, nil
}
func (cli SourceCLI) cliParams(params []Param) (map[string]Param, error) {
func (cli *SourceCLI) cliParams(params []Param) (map[string]Param, error) {
m := map[string]Param{}
for _, p := range params {
key := strings.Join(append(mctx.Path(p.Context), p.Name), cliKeyJoin)
@ -146,7 +146,7 @@ func (cli SourceCLI) cliParams(params []Param) (map[string]Param, error) {
return m, nil
}
func (cli SourceCLI) printHelp(w io.Writer, pM map[string]Param) {
func (cli *SourceCLI) printHelp(w io.Writer, pM map[string]Param) {
type pEntry struct {
arg string
Param

View File

@ -26,7 +26,7 @@ func TestSourceCLIHelp(t *T) {
buf := new(bytes.Buffer)
pM, err := src.cliParams(collectParams(ctx))
require.NoError(t, err)
SourceCLI{}.printHelp(buf, pM)
new(SourceCLI).printHelp(buf, pM)
exp := `
--baz2 (Required)
@ -49,7 +49,7 @@ func TestSourceCLIHelp(t *T) {
func TestSourceCLI(t *T) {
type state struct {
srcCommonState
SourceCLI
*SourceCLI
}
type params struct {
@ -61,7 +61,9 @@ func TestSourceCLI(t *T) {
Init: func() mchk.State {
var s state
s.srcCommonState = newSrcCommonState()
s.SourceCLI.Args = make([]string, 0, 16)
s.SourceCLI = &SourceCLI{
Args: make([]string, 0, 16),
}
return s
},
Next: func(ss mchk.State) mchk.Action {
@ -111,9 +113,11 @@ func TestSourceCLITailCallback(t *T) {
ctx, _ = WithBool(ctx, "bar", "")
var tail []string
src := SourceCLI{TailCallback: func(gotTail []string) {
src := &SourceCLI{
TailCallback: func(gotTail []string) {
tail = gotTail
}}
},
}
type testCase struct {
args []string

View File

@ -32,7 +32,7 @@ type SourceEnv struct {
Prefix string
}
func (env SourceEnv) expectedName(path []string, name string) string {
func (env *SourceEnv) expectedName(path []string, name string) string {
out := strings.Join(append(path, name), "_")
if env.Prefix != "" {
out = env.Prefix + "_" + out
@ -43,7 +43,7 @@ func (env SourceEnv) expectedName(path []string, name string) string {
}
// Parse implements the method for the Source interface
func (env SourceEnv) Parse(params []Param) ([]ParamValue, error) {
func (env *SourceEnv) Parse(params []Param) ([]ParamValue, error) {
kvs := env.Env
if kvs == nil {
kvs = os.Environ()

View File

@ -11,7 +11,7 @@ import (
func TestSourceEnv(t *T) {
type state struct {
srcCommonState
SourceEnv
*SourceEnv
}
type params struct {
@ -22,7 +22,9 @@ func TestSourceEnv(t *T) {
Init: func() mchk.State {
var s state
s.srcCommonState = newSrcCommonState()
s.SourceEnv.Env = make([]string, 0, 16)
s.SourceEnv = &SourceEnv{
Env: make([]string, 0, 16),
}
return s
},
Next: func(ss mchk.State) mchk.Action {

View File

@ -17,7 +17,7 @@ func TestPopulate(t *T) {
ctxChild, c := WithInt(ctxChild, "c", 0, "")
ctx = mctx.WithChild(ctx, ctxChild)
err := Populate(ctx, SourceCLI{
err := Populate(ctx, &SourceCLI{
Args: []string{"--a=1", "--foo-b=2"},
})
assert.NoError(t, err)
@ -34,12 +34,12 @@ func TestPopulate(t *T) {
ctxChild, c := WithRequiredInt(ctxChild, "c", "")
ctx = mctx.WithChild(ctx, ctxChild)
err := Populate(ctx, SourceCLI{
err := Populate(ctx, &SourceCLI{
Args: []string{"--a=1", "--foo-b=2"},
})
assert.Error(t, err)
err = Populate(ctx, SourceCLI{
err = Populate(ctx, &SourceCLI{
Args: []string{"--a=1", "--foo-b=2", "--foo-c=3"},
})
assert.NoError(t, err)

View File

@ -160,8 +160,8 @@ func TestSources(t *T) {
ctx, c := WithRequiredInt(ctx, "c", "")
err := Populate(ctx, Sources{
SourceCLI{Args: []string{"--a=1", "--b=666"}},
SourceEnv{Env: []string{"B=2", "C=3"}},
&SourceCLI{Args: []string{"--a=1", "--b=666"}},
&SourceEnv{Env: []string{"B=2", "C=3"}},
})
massert.Require(t,
massert.Nil(err),

View File

@ -50,7 +50,7 @@ func Run(ctx context.Context, t *testing.T, body func()) {
env = append(env, tup[0]+"="+tup[1])
}
if err := mcfg.Populate(ctx, mcfg.SourceEnv{Env: env}); err != nil {
if err := mcfg.Populate(ctx, &mcfg.SourceEnv{Env: env}); err != nil {
t.Fatal(err)
} else if err := mrun.Start(ctx); err != nil {
t.Fatal(err)