From 8e783fb37b8328e52b917296fafbd6110d644e24 Mon Sep 17 00:00:00 2001 From: Daniel Nephin Date: Fri, 20 Nov 2020 18:29:57 -0500 Subject: [PATCH] config: move testing shims to BuilderOpts And remove the devMode field from builder. This change helps make the Builder state more explicit by moving inputs to the BuilderOps struct, leaving only fields that can change during Builder.Build on the Builder struct. --- agent/config/builder.go | 24 +++++++----------------- agent/config/builder_test.go | 6 +++--- agent/config/flags.go | 10 ++++++++++ agent/config/runtime_test.go | 10 ++++------ 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/agent/config/builder.go b/agent/config/builder.go index 9ca6092ab..2eff8fbd8 100644 --- a/agent/config/builder.go +++ b/agent/config/builder.go @@ -92,8 +92,7 @@ func Load(opts BuilderOpts, extraHead Source, overrides ...Source) (*RuntimeConf // since not all pre-conditions have to be satisfied when performing // syntactical tests. type Builder struct { - // devMode stores the value of the -dev flag, and enables development mode. - devMode *bool + opts BuilderOpts // Head, Sources, and Tail are used to manage the order of the // config sources, as described in the comments above. @@ -105,15 +104,6 @@ type Builder struct { // parsing the configuration. Warnings []string - // hostname is a shim for testing, allowing tests to specify a replacement - // for os.Hostname. - hostname func() (string, error) - - // getPrivateIPv4 and getPublicIPv6 are shims for testing, allowing tests to - // specify a replacement for ipaddr.GetPrivateIPv4 and ipaddr.GetPublicIPv6. - getPrivateIPv4 func() ([]*net.IPAddr, error) - getPublicIPv6 func() ([]*net.IPAddr, error) - // err contains the first error that occurred during // building the runtime configuration. err error @@ -135,8 +125,8 @@ func NewBuilder(opts BuilderOpts) (*Builder, error) { } b := &Builder{ - devMode: opts.DevMode, - Head: []Source{DefaultSource(), DefaultEnterpriseSource()}, + opts: opts, + Head: []Source{DefaultSource(), DefaultEnterpriseSource()}, } if b.boolVal(opts.DevMode) { @@ -467,14 +457,14 @@ func (b *Builder) Build() (rt RuntimeConfig, err error) { switch { case ipaddr.IsAnyV4(advertiseAddr): addrtyp = "private IPv4" - detect = b.getPrivateIPv4 + detect = b.opts.getPrivateIPv4 if detect == nil { detect = ipaddr.GetPrivateIPv4 } case ipaddr.IsAnyV6(advertiseAddr): addrtyp = "public IPv6" - detect = b.getPublicIPv6 + detect = b.opts.getPublicIPv6 if detect == nil { detect = ipaddr.GetPublicIPv6 } @@ -994,7 +984,7 @@ func (b *Builder) Build() (rt RuntimeConfig, err error) { DataDir: dataDir, Datacenter: datacenter, DefaultQueryTime: b.durationVal("default_query_time", c.DefaultQueryTime), - DevMode: b.boolVal(b.devMode), + DevMode: b.boolVal(b.opts.DevMode), DisableAnonymousSignature: b.boolVal(c.DisableAnonymousSignature), DisableCoordinates: b.boolVal(c.DisableCoordinates), DisableHostNodeID: b.boolVal(c.DisableHostNodeID), @@ -1900,7 +1890,7 @@ func (b *Builder) tlsCipherSuites(name string, v *string) []uint16 { func (b *Builder) nodeName(v *string) string { nodeName := b.stringVal(v) if nodeName == "" { - fn := b.hostname + fn := b.opts.hostname if fn == nil { fn = os.Hostname } diff --git a/agent/config/builder_test.go b/agent/config/builder_test.go index 9be12a4d3..430a959e8 100644 --- a/agent/config/builder_test.go +++ b/agent/config/builder_test.go @@ -172,13 +172,13 @@ func TestBuilder_BuildAndValidate_NodeName(t *testing.T) { } func patchBuilderShims(b *Builder) { - b.hostname = func() (string, error) { + b.opts.hostname = func() (string, error) { return "thehostname", nil } - b.getPrivateIPv4 = func() ([]*net.IPAddr, error) { + b.opts.getPrivateIPv4 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("10.0.0.1")}, nil } - b.getPublicIPv6 = func() ([]*net.IPAddr, error) { + b.opts.getPublicIPv6 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("dead:beef::1")}, nil } } diff --git a/agent/config/flags.go b/agent/config/flags.go index 77dc2abb3..155e24334 100644 --- a/agent/config/flags.go +++ b/agent/config/flags.go @@ -3,6 +3,7 @@ package config import ( "flag" "fmt" + "net" "time" ) @@ -26,6 +27,15 @@ type BuilderOpts struct { // HCL contains an arbitrary config in hcl format. HCL []string + + // hostname is a shim for testing, allowing tests to specify a replacement + // for os.Hostname. + hostname func() (string, error) + + // getPrivateIPv4 and getPublicIPv6 are shims for testing, allowing tests to + // specify a replacement for ipaddr.GetPrivateIPv4 and ipaddr.GetPublicIPv6. + getPrivateIPv4 func() ([]*net.IPAddr, error) + getPublicIPv6 func() ([]*net.IPAddr, error) } // AddFlags adds the command line flags for the agent. diff --git a/agent/config/runtime_test.go b/agent/config/runtime_test.go index 092e75b6a..12307d641 100644 --- a/agent/config/runtime_test.go +++ b/agent/config/runtime_test.go @@ -4886,13 +4886,13 @@ func testConfig(t *testing.T, tests []configTest, dataDir string) { patchBuilderShims(b) if tt.hostname != nil { - b.hostname = tt.hostname + b.opts.hostname = tt.hostname } if tt.privatev4 != nil { - b.getPrivateIPv4 = tt.privatev4 + b.opts.getPrivateIPv4 = tt.privatev4 } if tt.publicv6 != nil { - b.getPublicIPv6 = tt.publicv6 + b.opts.getPublicIPv6 = tt.publicv6 } // read the source fragements @@ -4937,9 +4937,7 @@ func testConfig(t *testing.T, tests []configTest, dataDir string) { if err != nil { t.Fatal(err) } - x.hostname = b.hostname - x.getPrivateIPv4 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("10.0.0.1")}, nil } - x.getPublicIPv6 = func() ([]*net.IPAddr, error) { return []*net.IPAddr{ipAddr("dead:beef::1")}, nil } + patchBuilderShims(x) expected, err := x.Build() if err != nil { t.Fatalf("build default failed: %s", err)