package file import ( "testing" "github.com/containous/traefik/pkg/config/parser" "github.com/stretchr/testify/assert" ) func Test_getRootFieldNames(t *testing.T) { testCases := []struct { desc string element interface{} expected []string }{ { desc: "simple fields", element: &Yo{}, expected: []string{"Foo", "Fii", "Fuu", "Yi"}, }, { desc: "embedded struct", element: &Yu{}, expected: []string{"Foo", "Fii", "Fuu"}, }, { desc: "embedded struct pointer", element: &Ye{}, expected: []string{"Foo", "Fii", "Fuu"}, }, } for _, test := range testCases { test := test t.Run(test.desc, func(t *testing.T) { t.Parallel() names := getRootFieldNames(test.element) assert.Equal(t, test.expected, names) }) } } func Test_decodeFileToNode_compare(t *testing.T) { nodeToml, err := decodeFileToNode("./fixtures/sample.toml", "Global", "ServersTransport", "EntryPoints", "Providers", "API", "Metrics", "Ping", "Log", "AccessLog", "Tracing", "HostResolver", "ACME") if err != nil { t.Fatal(err) } nodeYaml, err := decodeFileToNode("./fixtures/sample.yml") if err != nil { t.Fatal(err) } assert.Equal(t, nodeToml, nodeYaml) } func Test_decodeFileToNode_Toml(t *testing.T) { node, err := decodeFileToNode("./fixtures/sample.toml", "Global", "ServersTransport", "EntryPoints", "Providers", "API", "Metrics", "Ping", "Log", "AccessLog", "Tracing", "HostResolver", "ACME") if err != nil { t.Fatal(err) } expected := &parser.Node{ Name: "traefik", Children: []*parser.Node{ {Name: "ACME", Children: []*parser.Node{ {Name: "ACMELogging", Value: "true"}, {Name: "CAServer", Value: "foobar"}, {Name: "DNSChallenge", Children: []*parser.Node{ {Name: "DelayBeforeCheck", Value: "42"}, {Name: "DisablePropagationCheck", Value: "true"}, {Name: "Provider", Value: "foobar"}, {Name: "Resolvers", Value: "foobar,foobar"}, }}, {Name: "Domains", Children: []*parser.Node{ {Name: "[0]", Children: []*parser.Node{ {Name: "Main", Value: "foobar"}, {Name: "SANs", Value: "foobar,foobar"}, }}, {Name: "[1]", Children: []*parser.Node{ {Name: "Main", Value: "foobar"}, {Name: "SANs", Value: "foobar,foobar"}, }}, }}, {Name: "Email", Value: "foobar"}, {Name: "EntryPoint", Value: "foobar"}, {Name: "HTTPChallenge", Children: []*parser.Node{ {Name: "EntryPoint", Value: "foobar"}}}, {Name: "KeyType", Value: "foobar"}, {Name: "OnHostRule", Value: "true"}, {Name: "Storage", Value: "foobar"}, {Name: "TLSChallenge"}, }, }, {Name: "API", Children: []*parser.Node{ {Name: "Dashboard", Value: "true"}, {Name: "EntryPoint", Value: "foobar"}, {Name: "Middlewares", Value: "foobar,foobar"}, {Name: "Statistics", Children: []*parser.Node{ {Name: "RecentErrors", Value: "42"}}}}}, {Name: "AccessLog", Children: []*parser.Node{ {Name: "BufferingSize", Value: "42"}, {Name: "Fields", Children: []*parser.Node{ {Name: "DefaultMode", Value: "foobar"}, {Name: "Headers", Children: []*parser.Node{ {Name: "DefaultMode", Value: "foobar"}, {Name: "Names", Children: []*parser.Node{ {Name: "name0", Value: "foobar"}, {Name: "name1", Value: "foobar"}}}}}, {Name: "Names", Children: []*parser.Node{ {Name: "name0", Value: "foobar"}, {Name: "name1", Value: "foobar"}}}}}, {Name: "FilePath", Value: "foobar"}, {Name: "Filters", Children: []*parser.Node{ {Name: "MinDuration", Value: "42"}, {Name: "RetryAttempts", Value: "true"}, {Name: "StatusCodes", Value: "foobar,foobar"}}}, {Name: "Format", Value: "foobar"}}}, {Name: "EntryPoints", Children: []*parser.Node{ {Name: "EntryPoint0", Children: []*parser.Node{ {Name: "Address", Value: "foobar"}, {Name: "ForwardedHeaders", Children: []*parser.Node{ {Name: "Insecure", Value: "true"}, {Name: "TrustedIPs", Value: "foobar,foobar"}}}, {Name: "ProxyProtocol", Children: []*parser.Node{ {Name: "Insecure", Value: "true"}, {Name: "TrustedIPs", Value: "foobar,foobar"}}}, {Name: "Transport", Children: []*parser.Node{ {Name: "LifeCycle", Children: []*parser.Node{ {Name: "GraceTimeOut", Value: "42"}, {Name: "RequestAcceptGraceTimeout", Value: "42"}}}, {Name: "RespondingTimeouts", Children: []*parser.Node{ {Name: "IdleTimeout", Value: "42"}, {Name: "ReadTimeout", Value: "42"}, {Name: "WriteTimeout", Value: "42"}}}}}}}}}, {Name: "Global", Children: []*parser.Node{ {Name: "CheckNewVersion", Value: "true"}, {Name: "Debug", Value: "true"}, {Name: "SendAnonymousUsage", Value: "true"}}}, {Name: "HostResolver", Children: []*parser.Node{ {Name: "CnameFlattening", Value: "true"}, {Name: "ResolvConfig", Value: "foobar"}, {Name: "ResolvDepth", Value: "42"}}}, {Name: "Log", Children: []*parser.Node{ {Name: "FilePath", Value: "foobar"}, {Name: "Format", Value: "foobar"}, {Name: "Level", Value: "foobar"}}}, {Name: "Metrics", Children: []*parser.Node{ {Name: "Datadog", Children: []*parser.Node{ {Name: "Address", Value: "foobar"}, {Name: "PushInterval", Value: "10s"}}}, {Name: "InfluxDB", Children: []*parser.Node{ {Name: "Address", Value: "foobar"}, {Name: "Database", Value: "foobar"}, {Name: "Password", Value: "foobar"}, {Name: "Protocol", Value: "foobar"}, {Name: "PushInterval", Value: "10s"}, {Name: "RetentionPolicy", Value: "foobar"}, {Name: "Username", Value: "foobar"}}}, {Name: "Prometheus", Children: []*parser.Node{ {Name: "Buckets", Value: "42,42"}, {Name: "EntryPoint", Value: "foobar"}, {Name: "Middlewares", Value: "foobar,foobar"}}}, {Name: "StatsD", Children: []*parser.Node{ {Name: "Address", Value: "foobar"}, {Name: "PushInterval", Value: "10s"}}}}}, {Name: "Ping", Children: []*parser.Node{ {Name: "EntryPoint", Value: "foobar"}, {Name: "Middlewares", Value: "foobar,foobar"}}}, {Name: "Providers", Children: []*parser.Node{ {Name: "Docker", Children: []*parser.Node{ {Name: "Constraints", Children: []*parser.Node{ {Name: "[0]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, {Name: "[1]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, }}, {Name: "DefaultRule", Value: "foobar"}, {Name: "Endpoint", Value: "foobar"}, {Name: "ExposedByDefault", Value: "true"}, {Name: "Network", Value: "foobar"}, {Name: "SwarmMode", Value: "true"}, {Name: "SwarmModeRefreshSeconds", Value: "42"}, {Name: "TLS", Children: []*parser.Node{ {Name: "CA", Value: "foobar"}, {Name: "CAOptional", Value: "true"}, {Name: "Cert", Value: "foobar"}, {Name: "InsecureSkipVerify", Value: "true"}, {Name: "Key", Value: "foobar"}}}, {Name: "UseBindPortIP", Value: "true"}, {Name: "Watch", Value: "true"}}}, {Name: "File", Children: []*parser.Node{ {Name: "DebugLogGeneratedTemplate", Value: "true"}, {Name: "Directory", Value: "foobar"}, {Name: "Filename", Value: "foobar"}, {Name: "TraefikFile", Value: "foobar"}, {Name: "Watch", Value: "true"}}}, {Name: "Kubernetes", Children: []*parser.Node{ {Name: "CertAuthFilePath", Value: "foobar"}, {Name: "DisablePassHostHeaders", Value: "true"}, {Name: "Endpoint", Value: "foobar"}, {Name: "IngressClass", Value: "foobar"}, {Name: "IngressEndpoint", Children: []*parser.Node{ {Name: "Hostname", Value: "foobar"}, {Name: "IP", Value: "foobar"}, {Name: "PublishedService", Value: "foobar"}}}, {Name: "LabelSelector", Value: "foobar"}, {Name: "Namespaces", Value: "foobar,foobar"}, {Name: "Token", Value: "foobar"}}}, {Name: "KubernetesCRD", Children: []*parser.Node{ {Name: "CertAuthFilePath", Value: "foobar"}, {Name: "DisablePassHostHeaders", Value: "true"}, {Name: "Endpoint", Value: "foobar"}, {Name: "IngressClass", Value: "foobar"}, {Name: "LabelSelector", Value: "foobar"}, {Name: "Namespaces", Value: "foobar,foobar"}, {Name: "Token", Value: "foobar"}}}, {Name: "Marathon", Children: []*parser.Node{ {Name: "Basic", Children: []*parser.Node{ {Name: "HTTPBasicAuthUser", Value: "foobar"}, {Name: "HTTPBasicPassword", Value: "foobar"}}}, {Name: "Constraints", Children: []*parser.Node{ {Name: "[0]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, {Name: "[1]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, }}, {Name: "DCOSToken", Value: "foobar"}, {Name: "DefaultRule", Value: "foobar"}, {Name: "DialerTimeout", Value: "42"}, {Name: "Endpoint", Value: "foobar"}, {Name: "ExposedByDefault", Value: "true"}, {Name: "ForceTaskHostname", Value: "true"}, {Name: "KeepAlive", Value: "42"}, {Name: "RespectReadinessChecks", Value: "true"}, {Name: "ResponseHeaderTimeout", Value: "42"}, {Name: "TLS", Children: []*parser.Node{ {Name: "CA", Value: "foobar"}, {Name: "CAOptional", Value: "true"}, {Name: "Cert", Value: "foobar"}, {Name: "InsecureSkipVerify", Value: "true"}, {Name: "Key", Value: "foobar"}}}, {Name: "TLSHandshakeTimeout", Value: "42"}, {Name: "Trace", Value: "true"}, {Name: "Watch", Value: "true"}}}, {Name: "ProvidersThrottleDuration", Value: "42"}, {Name: "Rancher", Children: []*parser.Node{ {Name: "Constraints", Children: []*parser.Node{ {Name: "[0]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, {Name: "[1]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, }}, {Name: "DefaultRule", Value: "foobar"}, {Name: "EnableServiceHealthFilter", Value: "true"}, {Name: "ExposedByDefault", Value: "true"}, {Name: "IntervalPoll", Value: "true"}, {Name: "Prefix", Value: "foobar"}, {Name: "RefreshSeconds", Value: "42"}, {Name: "Watch", Value: "true"}}}, {Name: "Rest", Children: []*parser.Node{ {Name: "EntryPoint", Value: "foobar"}}}}}, {Name: "ServersTransport", Children: []*parser.Node{ {Name: "ForwardingTimeouts", Children: []*parser.Node{ {Name: "DialTimeout", Value: "42"}, {Name: "ResponseHeaderTimeout", Value: "42"}}}, {Name: "InsecureSkipVerify", Value: "true"}, {Name: "MaxIdleConnsPerHost", Value: "42"}, {Name: "RootCAs", Value: "foobar,foobar"}}}, {Name: "Tracing", Children: []*parser.Node{ {Name: "DataDog", Children: []*parser.Node{ {Name: "BagagePrefixHeaderName", Value: "foobar"}, {Name: "Debug", Value: "true"}, {Name: "GlobalTag", Value: "foobar"}, {Name: "LocalAgentHostPort", Value: "foobar"}, {Name: "ParentIDHeaderName", Value: "foobar"}, {Name: "PrioritySampling", Value: "true"}, {Name: "SamplingPriorityHeaderName", Value: "foobar"}, {Name: "TraceIDHeaderName", Value: "foobar"}}}, {Name: "Haystack", Children: []*parser.Node{ {Name: "GlobalTag", Value: "foobar"}, {Name: "LocalAgentHost", Value: "foobar"}, {Name: "LocalAgentPort", Value: "42"}, {Name: "ParentIDHeaderName", Value: "foobar"}, {Name: "SpanIDHeaderName", Value: "foobar"}, {Name: "TraceIDHeaderName", Value: "foobar"}}}, {Name: "Instana", Children: []*parser.Node{ {Name: "LocalAgentHost", Value: "foobar"}, {Name: "LocalAgentPort", Value: "42"}, {Name: "LogLevel", Value: "foobar"}}}, {Name: "Jaeger", Children: []*parser.Node{ {Name: "Gen128Bit", Value: "true"}, {Name: "LocalAgentHostPort", Value: "foobar"}, {Name: "Propagation", Value: "foobar"}, {Name: "SamplingParam", Value: "42"}, {Name: "SamplingServerURL", Value: "foobar"}, {Name: "SamplingType", Value: "foobar"}, {Name: "TraceContextHeaderName", Value: "foobar"}}}, {Name: "ServiceName", Value: "foobar"}, {Name: "SpanNameLimit", Value: "42"}, {Name: "Zipkin", Children: []*parser.Node{ {Name: "Debug", Value: "true"}, {Name: "HTTPEndpoint", Value: "foobar"}, {Name: "ID128Bit", Value: "true"}, {Name: "SameSpan", Value: "true"}, {Name: "SampleRate", Value: "42"}}}}}}, } assert.Equal(t, expected, node) } func Test_decodeFileToNode_Yaml(t *testing.T) { node, err := decodeFileToNode("./fixtures/sample.yml") if err != nil { t.Fatal(err) } expected := &parser.Node{ Name: "traefik", Children: []*parser.Node{ {Name: "ACME", Children: []*parser.Node{ {Name: "ACMELogging", Value: "true"}, {Name: "CAServer", Value: "foobar"}, {Name: "DNSChallenge", Children: []*parser.Node{ {Name: "DelayBeforeCheck", Value: "42"}, {Name: "DisablePropagationCheck", Value: "true"}, {Name: "Provider", Value: "foobar"}, {Name: "Resolvers", Value: "foobar,foobar"}, }}, {Name: "Domains", Children: []*parser.Node{ {Name: "[0]", Children: []*parser.Node{ {Name: "Main", Value: "foobar"}, {Name: "SANs", Value: "foobar,foobar"}, }}, {Name: "[1]", Children: []*parser.Node{ {Name: "Main", Value: "foobar"}, {Name: "SANs", Value: "foobar,foobar"}, }}, }}, {Name: "Email", Value: "foobar"}, {Name: "EntryPoint", Value: "foobar"}, {Name: "HTTPChallenge", Children: []*parser.Node{ {Name: "EntryPoint", Value: "foobar"}}}, {Name: "KeyType", Value: "foobar"}, {Name: "OnHostRule", Value: "true"}, {Name: "Storage", Value: "foobar"}, {Name: "TLSChallenge"}, }, }, {Name: "API", Children: []*parser.Node{ {Name: "Dashboard", Value: "true"}, {Name: "EntryPoint", Value: "foobar"}, {Name: "Middlewares", Value: "foobar,foobar"}, {Name: "Statistics", Children: []*parser.Node{ {Name: "RecentErrors", Value: "42"}}}}}, {Name: "AccessLog", Children: []*parser.Node{ {Name: "BufferingSize", Value: "42"}, {Name: "Fields", Children: []*parser.Node{ {Name: "DefaultMode", Value: "foobar"}, {Name: "Headers", Children: []*parser.Node{ {Name: "DefaultMode", Value: "foobar"}, {Name: "Names", Children: []*parser.Node{ {Name: "name0", Value: "foobar"}, {Name: "name1", Value: "foobar"}}}}}, {Name: "Names", Children: []*parser.Node{ {Name: "name0", Value: "foobar"}, {Name: "name1", Value: "foobar"}}}}}, {Name: "FilePath", Value: "foobar"}, {Name: "Filters", Children: []*parser.Node{ {Name: "MinDuration", Value: "42"}, {Name: "RetryAttempts", Value: "true"}, {Name: "StatusCodes", Value: "foobar,foobar"}}}, {Name: "Format", Value: "foobar"}}}, {Name: "EntryPoints", Children: []*parser.Node{ {Name: "EntryPoint0", Children: []*parser.Node{ {Name: "Address", Value: "foobar"}, {Name: "ForwardedHeaders", Children: []*parser.Node{ {Name: "Insecure", Value: "true"}, {Name: "TrustedIPs", Value: "foobar,foobar"}}}, {Name: "ProxyProtocol", Children: []*parser.Node{ {Name: "Insecure", Value: "true"}, {Name: "TrustedIPs", Value: "foobar,foobar"}}}, {Name: "Transport", Children: []*parser.Node{ {Name: "LifeCycle", Children: []*parser.Node{ {Name: "GraceTimeOut", Value: "42"}, {Name: "RequestAcceptGraceTimeout", Value: "42"}}}, {Name: "RespondingTimeouts", Children: []*parser.Node{ {Name: "IdleTimeout", Value: "42"}, {Name: "ReadTimeout", Value: "42"}, {Name: "WriteTimeout", Value: "42"}}}}}}}}}, {Name: "Global", Children: []*parser.Node{ {Name: "CheckNewVersion", Value: "true"}, {Name: "Debug", Value: "true"}, {Name: "SendAnonymousUsage", Value: "true"}}}, {Name: "HostResolver", Children: []*parser.Node{ {Name: "CnameFlattening", Value: "true"}, {Name: "ResolvConfig", Value: "foobar"}, {Name: "ResolvDepth", Value: "42"}}}, {Name: "Log", Children: []*parser.Node{ {Name: "FilePath", Value: "foobar"}, {Name: "Format", Value: "foobar"}, {Name: "Level", Value: "foobar"}}}, {Name: "Metrics", Children: []*parser.Node{ {Name: "Datadog", Children: []*parser.Node{ {Name: "Address", Value: "foobar"}, {Name: "PushInterval", Value: "10s"}}}, {Name: "InfluxDB", Children: []*parser.Node{ {Name: "Address", Value: "foobar"}, {Name: "Database", Value: "foobar"}, {Name: "Password", Value: "foobar"}, {Name: "Protocol", Value: "foobar"}, {Name: "PushInterval", Value: "10s"}, {Name: "RetentionPolicy", Value: "foobar"}, {Name: "Username", Value: "foobar"}}}, {Name: "Prometheus", Children: []*parser.Node{ {Name: "Buckets", Value: "42,42"}, {Name: "EntryPoint", Value: "foobar"}, {Name: "Middlewares", Value: "foobar,foobar"}}}, {Name: "StatsD", Children: []*parser.Node{ {Name: "Address", Value: "foobar"}, {Name: "PushInterval", Value: "10s"}}}}}, {Name: "Ping", Children: []*parser.Node{ {Name: "EntryPoint", Value: "foobar"}, {Name: "Middlewares", Value: "foobar,foobar"}}}, {Name: "Providers", Children: []*parser.Node{ {Name: "Docker", Children: []*parser.Node{ {Name: "Constraints", Children: []*parser.Node{ {Name: "[0]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, {Name: "[1]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, }}, {Name: "DefaultRule", Value: "foobar"}, {Name: "Endpoint", Value: "foobar"}, {Name: "ExposedByDefault", Value: "true"}, {Name: "Network", Value: "foobar"}, {Name: "SwarmMode", Value: "true"}, {Name: "SwarmModeRefreshSeconds", Value: "42"}, {Name: "TLS", Children: []*parser.Node{ {Name: "CA", Value: "foobar"}, {Name: "CAOptional", Value: "true"}, {Name: "Cert", Value: "foobar"}, {Name: "InsecureSkipVerify", Value: "true"}, {Name: "Key", Value: "foobar"}}}, {Name: "UseBindPortIP", Value: "true"}, {Name: "Watch", Value: "true"}}}, {Name: "File", Children: []*parser.Node{ {Name: "DebugLogGeneratedTemplate", Value: "true"}, {Name: "Directory", Value: "foobar"}, {Name: "Filename", Value: "foobar"}, {Name: "TraefikFile", Value: "foobar"}, {Name: "Watch", Value: "true"}}}, {Name: "Kubernetes", Children: []*parser.Node{ {Name: "CertAuthFilePath", Value: "foobar"}, {Name: "DisablePassHostHeaders", Value: "true"}, {Name: "Endpoint", Value: "foobar"}, {Name: "IngressClass", Value: "foobar"}, {Name: "IngressEndpoint", Children: []*parser.Node{ {Name: "Hostname", Value: "foobar"}, {Name: "IP", Value: "foobar"}, {Name: "PublishedService", Value: "foobar"}}}, {Name: "LabelSelector", Value: "foobar"}, {Name: "Namespaces", Value: "foobar,foobar"}, {Name: "Token", Value: "foobar"}}}, {Name: "KubernetesCRD", Children: []*parser.Node{ {Name: "CertAuthFilePath", Value: "foobar"}, {Name: "DisablePassHostHeaders", Value: "true"}, {Name: "Endpoint", Value: "foobar"}, {Name: "IngressClass", Value: "foobar"}, {Name: "LabelSelector", Value: "foobar"}, {Name: "Namespaces", Value: "foobar,foobar"}, {Name: "Token", Value: "foobar"}}}, {Name: "Marathon", Children: []*parser.Node{ {Name: "Basic", Children: []*parser.Node{ {Name: "HTTPBasicAuthUser", Value: "foobar"}, {Name: "HTTPBasicPassword", Value: "foobar"}}}, {Name: "Constraints", Children: []*parser.Node{ {Name: "[0]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, {Name: "[1]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, }}, {Name: "DCOSToken", Value: "foobar"}, {Name: "DefaultRule", Value: "foobar"}, {Name: "DialerTimeout", Value: "42"}, {Name: "Endpoint", Value: "foobar"}, {Name: "ExposedByDefault", Value: "true"}, {Name: "ForceTaskHostname", Value: "true"}, {Name: "KeepAlive", Value: "42"}, {Name: "RespectReadinessChecks", Value: "true"}, {Name: "ResponseHeaderTimeout", Value: "42"}, {Name: "TLS", Children: []*parser.Node{ {Name: "CA", Value: "foobar"}, {Name: "CAOptional", Value: "true"}, {Name: "Cert", Value: "foobar"}, {Name: "InsecureSkipVerify", Value: "true"}, {Name: "Key", Value: "foobar"}}}, {Name: "TLSHandshakeTimeout", Value: "42"}, {Name: "Trace", Value: "true"}, {Name: "Watch", Value: "true"}}}, {Name: "ProvidersThrottleDuration", Value: "42"}, {Name: "Rancher", Children: []*parser.Node{ {Name: "Constraints", Children: []*parser.Node{ {Name: "[0]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, {Name: "[1]", Children: []*parser.Node{ {Name: "Key", Value: "foobar"}, {Name: "MustMatch", Value: "true"}, {Name: "Value", Value: "foobar"}, }}, }}, {Name: "DefaultRule", Value: "foobar"}, {Name: "EnableServiceHealthFilter", Value: "true"}, {Name: "ExposedByDefault", Value: "true"}, {Name: "IntervalPoll", Value: "true"}, {Name: "Prefix", Value: "foobar"}, {Name: "RefreshSeconds", Value: "42"}, {Name: "Watch", Value: "true"}}}, {Name: "Rest", Children: []*parser.Node{ {Name: "EntryPoint", Value: "foobar"}}}}}, {Name: "ServersTransport", Children: []*parser.Node{ {Name: "ForwardingTimeouts", Children: []*parser.Node{ {Name: "DialTimeout", Value: "42"}, {Name: "ResponseHeaderTimeout", Value: "42"}}}, {Name: "InsecureSkipVerify", Value: "true"}, {Name: "MaxIdleConnsPerHost", Value: "42"}, {Name: "RootCAs", Value: "foobar,foobar"}}}, {Name: "Tracing", Children: []*parser.Node{ {Name: "DataDog", Children: []*parser.Node{ {Name: "BagagePrefixHeaderName", Value: "foobar"}, {Name: "Debug", Value: "true"}, {Name: "GlobalTag", Value: "foobar"}, {Name: "LocalAgentHostPort", Value: "foobar"}, {Name: "ParentIDHeaderName", Value: "foobar"}, {Name: "PrioritySampling", Value: "true"}, {Name: "SamplingPriorityHeaderName", Value: "foobar"}, {Name: "TraceIDHeaderName", Value: "foobar"}}}, {Name: "Haystack", Children: []*parser.Node{ {Name: "GlobalTag", Value: "foobar"}, {Name: "LocalAgentHost", Value: "foobar"}, {Name: "LocalAgentPort", Value: "42"}, {Name: "ParentIDHeaderName", Value: "foobar"}, {Name: "SpanIDHeaderName", Value: "foobar"}, {Name: "TraceIDHeaderName", Value: "foobar"}}}, {Name: "Instana", Children: []*parser.Node{ {Name: "LocalAgentHost", Value: "foobar"}, {Name: "LocalAgentPort", Value: "42"}, {Name: "LogLevel", Value: "foobar"}}}, {Name: "Jaeger", Children: []*parser.Node{ {Name: "Gen128Bit", Value: "true"}, {Name: "LocalAgentHostPort", Value: "foobar"}, {Name: "Propagation", Value: "foobar"}, {Name: "SamplingParam", Value: "42"}, {Name: "SamplingServerURL", Value: "foobar"}, {Name: "SamplingType", Value: "foobar"}, {Name: "TraceContextHeaderName", Value: "foobar"}}}, {Name: "ServiceName", Value: "foobar"}, {Name: "SpanNameLimit", Value: "42"}, {Name: "Zipkin", Children: []*parser.Node{ {Name: "Debug", Value: "true"}, {Name: "HTTPEndpoint", Value: "foobar"}, {Name: "ID128Bit", Value: "true"}, {Name: "SameSpan", Value: "true"}, {Name: "SampleRate", Value: "42"}}}}}}, } assert.Equal(t, expected, node) }