github.imxd.top/hashicorp/consul@v1.4.5/agent/config/merge_test.go (about) 1 package config 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/pascaldekloe/goe/verify" 8 ) 9 10 func TestMerge(t *testing.T) { 11 tests := []struct { 12 desc string 13 cfgs []Config 14 want Config 15 }{ 16 { 17 "top level fields", 18 []Config{ 19 {AdvertiseAddrLAN: pString("a")}, 20 {AdvertiseAddrLAN: pString("b")}, 21 {RaftProtocol: pInt(1)}, 22 {RaftProtocol: pInt(2)}, 23 {ServerMode: pBool(false)}, 24 {ServerMode: pBool(true)}, 25 {StartJoinAddrsLAN: []string{"a"}}, 26 {StartJoinAddrsLAN: []string{"b"}}, 27 {NodeMeta: map[string]string{"a": "b"}}, 28 {NodeMeta: map[string]string{"c": "d"}}, 29 {NodeMeta: map[string]string{"c": "e"}}, 30 {Ports: Ports{DNS: pInt(1)}}, 31 {Ports: Ports{DNS: pInt(2), HTTP: pInt(3)}}, 32 }, 33 Config{ 34 AdvertiseAddrLAN: pString("b"), 35 RaftProtocol: pInt(2), 36 ServerMode: pBool(true), 37 StartJoinAddrsLAN: []string{"a", "b"}, 38 NodeMeta: map[string]string{ 39 "a": "b", 40 "c": "e", 41 }, 42 Ports: Ports{DNS: pInt(2), HTTP: pInt(3)}, 43 }, 44 }, 45 } 46 47 for _, tt := range tests { 48 t.Run(tt.desc, func(t *testing.T) { 49 got, want := Merge(tt.cfgs...), tt.want 50 if !verify.Values(t, "", got, want) { 51 t.FailNow() 52 } 53 }) 54 } 55 } 56 57 func pBool(v bool) *bool { return &v } 58 func pInt(v int) *int { return &v } 59 func pString(v string) *string { return &v } 60 func pDuration(v time.Duration) *string { s := v.String(); return &s } 61 func pFloat64(v float64) *float64 { return &v }