127 lines
2.2 KiB
Go
127 lines
2.2 KiB
Go
package proxy
|
|
|
|
import (
|
|
"flag"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/consul/connect/proxy"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFlagUpstreams_impl(t *testing.T) {
|
|
var _ flag.Value = new(FlagUpstreams)
|
|
}
|
|
|
|
func TestFlagUpstreams(t *testing.T) {
|
|
cases := []struct {
|
|
Name string
|
|
Input []string
|
|
Expected map[string]proxy.UpstreamConfig
|
|
Error string
|
|
}{
|
|
{
|
|
"bad format",
|
|
[]string{"foo"},
|
|
nil,
|
|
"should be name:addr",
|
|
},
|
|
|
|
{
|
|
"port not int",
|
|
[]string{"db:hello"},
|
|
nil,
|
|
"invalid syntax",
|
|
},
|
|
|
|
{
|
|
"4 parts",
|
|
[]string{"db:127.0.0.1:8181:foo"},
|
|
nil,
|
|
"invalid syntax",
|
|
},
|
|
|
|
{
|
|
"single value",
|
|
[]string{"db:8181"},
|
|
map[string]proxy.UpstreamConfig{
|
|
"db": {
|
|
LocalBindPort: 8181,
|
|
DestinationName: "db",
|
|
DestinationType: "service",
|
|
},
|
|
},
|
|
"",
|
|
},
|
|
|
|
{
|
|
"single value prepared query",
|
|
[]string{"db.query:8181"},
|
|
map[string]proxy.UpstreamConfig{
|
|
"db": {
|
|
LocalBindPort: 8181,
|
|
DestinationName: "db",
|
|
DestinationType: "prepared_query",
|
|
},
|
|
},
|
|
"",
|
|
},
|
|
|
|
{
|
|
"invalid type",
|
|
[]string{"db.bad:8181"},
|
|
nil,
|
|
"Upstream type",
|
|
},
|
|
|
|
{
|
|
"address specified",
|
|
[]string{"db:127.0.0.55:8181"},
|
|
map[string]proxy.UpstreamConfig{
|
|
"db": {
|
|
LocalBindAddress: "127.0.0.55",
|
|
LocalBindPort: 8181,
|
|
DestinationName: "db",
|
|
DestinationType: "service",
|
|
},
|
|
},
|
|
"",
|
|
},
|
|
|
|
{
|
|
"repeat value, overwrite",
|
|
[]string{"db:8181", "db:8282"},
|
|
map[string]proxy.UpstreamConfig{
|
|
"db": {
|
|
LocalBindPort: 8282,
|
|
DestinationName: "db",
|
|
DestinationType: "service",
|
|
},
|
|
},
|
|
"",
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.Name, func(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
var actual map[string]proxy.UpstreamConfig
|
|
f := (*FlagUpstreams)(&actual)
|
|
|
|
var err error
|
|
for _, input := range tc.Input {
|
|
err = f.Set(input)
|
|
// Note we only test the last error. This could make some
|
|
// test failures confusing but it shouldn't be too bad.
|
|
}
|
|
if tc.Error != "" {
|
|
require.Error(err)
|
|
require.Contains(err.Error(), tc.Error)
|
|
return
|
|
}
|
|
|
|
require.Equal(tc.Expected, actual)
|
|
})
|
|
}
|
|
}
|