2017-09-15 18:56:04 +00:00
|
|
|
package configuration
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
2017-09-26 08:22:03 +00:00
|
|
|
"time"
|
2017-09-15 18:56:04 +00:00
|
|
|
|
2017-09-26 08:22:03 +00:00
|
|
|
"github.com/containous/flaeg"
|
2018-04-16 15:42:03 +00:00
|
|
|
"github.com/containous/traefik/middlewares/tracing"
|
|
|
|
"github.com/containous/traefik/middlewares/tracing/jaeger"
|
|
|
|
"github.com/containous/traefik/middlewares/tracing/zipkin"
|
2017-10-11 08:38:03 +00:00
|
|
|
"github.com/containous/traefik/provider"
|
|
|
|
"github.com/containous/traefik/provider/file"
|
2018-04-16 15:42:03 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
2017-09-15 18:56:04 +00:00
|
|
|
)
|
|
|
|
|
2017-10-11 08:38:03 +00:00
|
|
|
const defaultConfigFile = "traefik.toml"
|
|
|
|
|
|
|
|
func TestSetEffectiveConfigurationGraceTimeout(t *testing.T) {
|
2018-04-16 15:42:03 +00:00
|
|
|
testCases := []struct {
|
2017-09-26 08:22:03 +00:00
|
|
|
desc string
|
|
|
|
legacyGraceTimeout time.Duration
|
|
|
|
lifeCycleGraceTimeout time.Duration
|
|
|
|
wantGraceTimeout time.Duration
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
desc: "legacy grace timeout given only",
|
|
|
|
legacyGraceTimeout: 5 * time.Second,
|
|
|
|
wantGraceTimeout: 5 * time.Second,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "legacy and life cycle grace timeouts given",
|
|
|
|
legacyGraceTimeout: 5 * time.Second,
|
|
|
|
lifeCycleGraceTimeout: 12 * time.Second,
|
|
|
|
wantGraceTimeout: 5 * time.Second,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "legacy grace timeout omitted",
|
|
|
|
legacyGraceTimeout: 0,
|
|
|
|
lifeCycleGraceTimeout: 12 * time.Second,
|
|
|
|
wantGraceTimeout: 12 * time.Second,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
2018-04-16 15:42:03 +00:00
|
|
|
for _, test := range testCases {
|
2017-09-26 08:22:03 +00:00
|
|
|
test := test
|
|
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
|
|
t.Parallel()
|
2018-04-16 15:42:03 +00:00
|
|
|
|
2017-09-26 08:22:03 +00:00
|
|
|
gc := &GlobalConfiguration{
|
|
|
|
GraceTimeOut: flaeg.Duration(test.legacyGraceTimeout),
|
|
|
|
}
|
|
|
|
if test.lifeCycleGraceTimeout > 0 {
|
|
|
|
gc.LifeCycle = &LifeCycle{
|
|
|
|
GraceTimeOut: flaeg.Duration(test.lifeCycleGraceTimeout),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-10-11 08:38:03 +00:00
|
|
|
gc.SetEffectiveConfiguration(defaultConfigFile)
|
|
|
|
|
2018-04-16 15:42:03 +00:00
|
|
|
assert.Equal(t, test.wantGraceTimeout, time.Duration(gc.LifeCycle.GraceTimeOut))
|
2017-10-11 08:38:03 +00:00
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSetEffectiveConfigurationFileProviderFilename(t *testing.T) {
|
2018-04-16 15:42:03 +00:00
|
|
|
testCases := []struct {
|
2017-10-11 08:38:03 +00:00
|
|
|
desc string
|
|
|
|
fileProvider *file.Provider
|
|
|
|
wantFileProviderFilename string
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
desc: "no filename for file provider given",
|
|
|
|
fileProvider: &file.Provider{},
|
|
|
|
wantFileProviderFilename: defaultConfigFile,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "filename for file provider given",
|
|
|
|
fileProvider: &file.Provider{BaseProvider: provider.BaseProvider{Filename: "other.toml"}},
|
|
|
|
wantFileProviderFilename: "other.toml",
|
|
|
|
},
|
2018-03-22 15:14:04 +00:00
|
|
|
{
|
|
|
|
desc: "directory for file provider given",
|
|
|
|
fileProvider: &file.Provider{Directory: "/"},
|
|
|
|
wantFileProviderFilename: "",
|
|
|
|
},
|
2017-10-11 08:38:03 +00:00
|
|
|
}
|
|
|
|
|
2018-04-16 15:42:03 +00:00
|
|
|
for _, test := range testCases {
|
2017-10-11 08:38:03 +00:00
|
|
|
test := test
|
|
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
|
|
t.Parallel()
|
2018-04-16 15:42:03 +00:00
|
|
|
|
2017-10-11 08:38:03 +00:00
|
|
|
gc := &GlobalConfiguration{
|
|
|
|
File: test.fileProvider,
|
|
|
|
}
|
|
|
|
|
|
|
|
gc.SetEffectiveConfiguration(defaultConfigFile)
|
|
|
|
|
2018-04-16 15:42:03 +00:00
|
|
|
assert.Equal(t, test.wantFileProviderFilename, gc.File.Filename)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSetEffectiveConfigurationTracing(t *testing.T) {
|
|
|
|
testCases := []struct {
|
|
|
|
desc string
|
|
|
|
tracing *tracing.Tracing
|
|
|
|
expected *tracing.Tracing
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
desc: "no tracing configuration",
|
|
|
|
tracing: &tracing.Tracing{},
|
|
|
|
expected: &tracing.Tracing{},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "tracing bad backend name",
|
|
|
|
tracing: &tracing.Tracing{
|
|
|
|
Backend: "powpow",
|
|
|
|
},
|
|
|
|
expected: &tracing.Tracing{
|
|
|
|
Backend: "powpow",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "tracing jaeger backend name",
|
|
|
|
tracing: &tracing.Tracing{
|
|
|
|
Backend: "jaeger",
|
|
|
|
Zipkin: &zipkin.Config{
|
|
|
|
HTTPEndpoint: "http://localhost:9411/api/v1/spans",
|
|
|
|
SameSpan: false,
|
|
|
|
ID128Bit: true,
|
|
|
|
Debug: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
expected: &tracing.Tracing{
|
|
|
|
Backend: "jaeger",
|
|
|
|
Jaeger: &jaeger.Config{
|
|
|
|
SamplingServerURL: "http://localhost:5778/sampling",
|
|
|
|
SamplingType: "const",
|
|
|
|
SamplingParam: 1.0,
|
2018-04-24 17:22:03 +00:00
|
|
|
LocalAgentHostPort: "127.0.0.1:6831",
|
2018-04-16 15:42:03 +00:00
|
|
|
},
|
|
|
|
Zipkin: nil,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "tracing zipkin backend name",
|
|
|
|
tracing: &tracing.Tracing{
|
|
|
|
Backend: "zipkin",
|
|
|
|
Jaeger: &jaeger.Config{
|
|
|
|
SamplingServerURL: "http://localhost:5778/sampling",
|
|
|
|
SamplingType: "const",
|
|
|
|
SamplingParam: 1.0,
|
2018-04-24 17:22:03 +00:00
|
|
|
LocalAgentHostPort: "127.0.0.1:6831",
|
2018-04-16 15:42:03 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
expected: &tracing.Tracing{
|
|
|
|
Backend: "zipkin",
|
|
|
|
Jaeger: nil,
|
|
|
|
Zipkin: &zipkin.Config{
|
|
|
|
HTTPEndpoint: "http://localhost:9411/api/v1/spans",
|
|
|
|
SameSpan: false,
|
|
|
|
ID128Bit: true,
|
|
|
|
Debug: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
desc: "tracing zipkin backend name value override",
|
|
|
|
tracing: &tracing.Tracing{
|
|
|
|
Backend: "zipkin",
|
|
|
|
Jaeger: &jaeger.Config{
|
|
|
|
SamplingServerURL: "http://localhost:5778/sampling",
|
|
|
|
SamplingType: "const",
|
|
|
|
SamplingParam: 1.0,
|
2018-04-24 17:22:03 +00:00
|
|
|
LocalAgentHostPort: "127.0.0.1:6831",
|
2018-04-16 15:42:03 +00:00
|
|
|
},
|
|
|
|
Zipkin: &zipkin.Config{
|
|
|
|
HTTPEndpoint: "http://powpow:9411/api/v1/spans",
|
|
|
|
SameSpan: true,
|
|
|
|
ID128Bit: true,
|
|
|
|
Debug: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
expected: &tracing.Tracing{
|
|
|
|
Backend: "zipkin",
|
|
|
|
Jaeger: nil,
|
|
|
|
Zipkin: &zipkin.Config{
|
|
|
|
HTTPEndpoint: "http://powpow:9411/api/v1/spans",
|
|
|
|
SameSpan: true,
|
|
|
|
ID128Bit: true,
|
|
|
|
Debug: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, test := range testCases {
|
|
|
|
test := test
|
|
|
|
t.Run(test.desc, func(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
gc := &GlobalConfiguration{
|
|
|
|
Tracing: test.tracing,
|
2017-10-11 08:38:03 +00:00
|
|
|
}
|
2018-04-16 15:42:03 +00:00
|
|
|
|
|
|
|
gc.SetEffectiveConfiguration(defaultConfigFile)
|
|
|
|
|
|
|
|
assert.Equal(t, test.expected, gc.Tracing)
|
2017-09-26 08:22:03 +00:00
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|