Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
2021-06-19 16:00:47 +03:00
parent 29add63cc6
commit 05720a433e
6 changed files with 300 additions and 38 deletions

View File

@@ -1,49 +1,46 @@
package flag
import (
"flag"
"context"
"os"
"reflect"
"strconv"
"testing"
"time"
rutil "github.com/unistack-org/micro/v3/util/reflect"
"github.com/unistack-org/micro/v3/config"
)
func TestLoad(t *testing.T) {
os.Args = append(os.Args, "-broker", "5566:33")
type config struct {
Broker string `flag:"name=broker,desc='description with, comma',default='127.0.0.1:9092'"`
Verbose bool `flag:"name=verbose,desc='verbose output',default='false value'"`
os.Args = append(os.Args, "-verbose")
os.Args = append(os.Args, "-wait", "5s")
os.Args = append(os.Args, "-addr", "33,44")
os.Args = append(os.Args, "-time", time.RFC822)
type Config struct {
Broker string `flag:"name=broker,desc='description with, comma',default='127.0.0.1:9092'"`
Verbose bool `flag:"name=verbose,desc='verbose output',default='false'"`
Addr []string `flag:"name=addr,desc='addrs',default='127.0.0.1:9092'"`
Wait time.Duration `flag:"name=wait,desc='wait time',default='2s'"`
Time time.Time `flag:"name=time,desc='some time',default='02 Jan 06 15:04 MST'"`
}
cfg := &config{}
ctx := context.Background()
cfg := &Config{}
fields, err := rutil.StructFields(cfg)
if err != nil {
c := NewConfig(config.Struct(cfg), TimeFormat(time.RFC822))
if err := c.Init(); err != nil {
t.Fatal(err)
}
for _, sf := range fields {
tf, ok := sf.Field.Tag.Lookup("flag")
if !ok {
continue
}
fn, fv, fd := getFlagOpts(tf)
switch sf.Value.Kind() {
case reflect.String:
v := sf.Value.Addr().Interface().(*string)
flag.StringVar(v, fn, fv, fd)
case reflect.Bool:
v := sf.Value.Addr().Interface().(*bool)
i, _ := strconv.ParseBool(fv)
flag.BoolVar(v, fn, i, fd)
}
if err := c.Load(ctx); err != nil {
t.Fatal(err)
}
flag.Parse()
if cfg.Broker != "5566:33" {
t.Fatalf("failed to parse flags broker value invalid: %#+v", cfg)
}
if tf := cfg.Time.Format(time.RFC822); tf != "02 Jan 06 14:32 MSK" {
t.Fatalf("parse time error: %v", cfg.Time)
}
t.Logf("cfg %#+v", cfg)
}