Merge pull request #617 from jangie/fix-nil-client-tls
fix for nil clientTLS causing issue
This commit is contained in:
commit
f1c3d820f7
2 changed files with 26 additions and 1 deletions
|
@ -11,6 +11,7 @@ import (
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/BurntSushi/toml"
|
"github.com/BurntSushi/toml"
|
||||||
|
log "github.com/Sirupsen/logrus"
|
||||||
"github.com/containous/traefik/autogen"
|
"github.com/containous/traefik/autogen"
|
||||||
"github.com/containous/traefik/safe"
|
"github.com/containous/traefik/safe"
|
||||||
"github.com/containous/traefik/types"
|
"github.com/containous/traefik/types"
|
||||||
|
@ -109,6 +110,10 @@ type ClientTLS struct {
|
||||||
// CreateTLSConfig creates a TLS config from ClientTLS structures
|
// CreateTLSConfig creates a TLS config from ClientTLS structures
|
||||||
func (clientTLS *ClientTLS) CreateTLSConfig() (*tls.Config, error) {
|
func (clientTLS *ClientTLS) CreateTLSConfig() (*tls.Config, error) {
|
||||||
var err error
|
var err error
|
||||||
|
if clientTLS == nil {
|
||||||
|
log.Warnf("clientTLS is nil")
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
caPool := x509.NewCertPool()
|
caPool := x509.NewCertPool()
|
||||||
if clientTLS.CA != "" {
|
if clientTLS.CA != "" {
|
||||||
var ca []byte
|
var ca []byte
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
|
|
||||||
type myProvider struct {
|
type myProvider struct {
|
||||||
BaseProvider
|
BaseProvider
|
||||||
|
TLS *ClientTLS
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *myProvider) Foo() string {
|
func (p *myProvider) Foo() string {
|
||||||
|
@ -54,6 +55,7 @@ func TestConfigurationErrors(t *testing.T) {
|
||||||
BaseProvider{
|
BaseProvider{
|
||||||
Filename: "/non/existent/template.tmpl",
|
Filename: "/non/existent/template.tmpl",
|
||||||
},
|
},
|
||||||
|
nil,
|
||||||
},
|
},
|
||||||
expectedError: "open /non/existent/template.tmpl: no such file or directory",
|
expectedError: "open /non/existent/template.tmpl: no such file or directory",
|
||||||
},
|
},
|
||||||
|
@ -67,6 +69,7 @@ func TestConfigurationErrors(t *testing.T) {
|
||||||
BaseProvider{
|
BaseProvider{
|
||||||
Filename: templateErrorFile.Name(),
|
Filename: templateErrorFile.Name(),
|
||||||
},
|
},
|
||||||
|
nil,
|
||||||
},
|
},
|
||||||
expectedError: `function "Bar" not defined`,
|
expectedError: `function "Bar" not defined`,
|
||||||
},
|
},
|
||||||
|
@ -75,6 +78,7 @@ func TestConfigurationErrors(t *testing.T) {
|
||||||
BaseProvider{
|
BaseProvider{
|
||||||
Filename: templateInvalidTOMLFile.Name(),
|
Filename: templateInvalidTOMLFile.Name(),
|
||||||
},
|
},
|
||||||
|
nil,
|
||||||
},
|
},
|
||||||
expectedError: "Near line 1 (last key parsed 'Hello'): Expected key separator '=', but got '<' instead",
|
expectedError: "Near line 1 (last key parsed 'Hello'): Expected key separator '=', but got '<' instead",
|
||||||
funcMap: template.FuncMap{
|
funcMap: template.FuncMap{
|
||||||
|
@ -130,6 +134,7 @@ func TestGetConfiguration(t *testing.T) {
|
||||||
BaseProvider{
|
BaseProvider{
|
||||||
Filename: templateFile.Name(),
|
Filename: templateFile.Name(),
|
||||||
},
|
},
|
||||||
|
nil,
|
||||||
}
|
}
|
||||||
configuration, err := provider.getConfiguration(templateFile.Name(), nil, nil)
|
configuration, err := provider.getConfiguration(templateFile.Name(), nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -191,6 +196,7 @@ func TestGetConfigurationReturnsCorrectMaxConnConfiguration(t *testing.T) {
|
||||||
BaseProvider{
|
BaseProvider{
|
||||||
Filename: templateFile.Name(),
|
Filename: templateFile.Name(),
|
||||||
},
|
},
|
||||||
|
nil,
|
||||||
}
|
}
|
||||||
configuration, err := provider.getConfiguration(templateFile.Name(), nil, nil)
|
configuration, err := provider.getConfiguration(templateFile.Name(), nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -209,6 +215,19 @@ func TestGetConfigurationReturnsCorrectMaxConnConfiguration(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNilClientTLS(t *testing.T) {
|
||||||
|
provider := &myProvider{
|
||||||
|
BaseProvider{
|
||||||
|
Filename: "",
|
||||||
|
},
|
||||||
|
nil,
|
||||||
|
}
|
||||||
|
_, err := provider.TLS.CreateTLSConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("CreateTLSConfig should assume that consumer does not want a TLS configuration if input is nil")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestMatchingConstraints(t *testing.T) {
|
func TestMatchingConstraints(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
constraints []types.Constraint
|
constraints []types.Constraint
|
||||||
|
@ -298,10 +317,11 @@ func TestMatchingConstraints(t *testing.T) {
|
||||||
BaseProvider{
|
BaseProvider{
|
||||||
Constraints: c.constraints,
|
Constraints: c.constraints,
|
||||||
},
|
},
|
||||||
|
nil,
|
||||||
}
|
}
|
||||||
actual, _ := provider.MatchConstraints(c.tags)
|
actual, _ := provider.MatchConstraints(c.tags)
|
||||||
if actual != c.expected {
|
if actual != c.expected {
|
||||||
t.Fatalf("test #%v: expected %q, got %q, for %q", i, c.expected, actual, c.constraints)
|
t.Fatalf("test #%v: expected %t, got %t, for %#v", i, c.expected, actual, c.constraints)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue