mirror of https://github.com/hashicorp/consul
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
262 lines
4.8 KiB
262 lines
4.8 KiB
// Copyright (c) HashiCorp, Inc. |
|
// SPDX-License-Identifier: BUSL-1.1 |
|
|
|
package proxycfg |
|
|
|
import ( |
|
"testing" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
"github.com/hashicorp/consul/agent/structs" |
|
) |
|
|
|
func TestUpstreamIDFromTargetID(t *testing.T) { |
|
type testcase struct { |
|
tid string |
|
expect UpstreamID |
|
} |
|
run := func(t *testing.T, tc testcase) { |
|
tc.expect.EnterpriseMeta.Normalize() |
|
|
|
got := NewUpstreamIDFromTargetID(tc.tid) |
|
require.Equal(t, tc.expect, got) |
|
} |
|
|
|
cases := map[string]testcase{ |
|
"with subset": { |
|
tid: "v1.foo.default.default.dc2", |
|
expect: UpstreamID{ |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
}, |
|
"without subset": { |
|
tid: "foo.default.default.dc2", |
|
expect: UpstreamID{ |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
}, |
|
"peered": { |
|
tid: "foo.default.default.external.cluster-01", |
|
expect: UpstreamID{ |
|
Name: "foo", |
|
Peer: "cluster-01", |
|
}, |
|
}, |
|
} |
|
|
|
for name, tc := range cases { |
|
t.Run(name, func(t *testing.T) { |
|
run(t, tc) |
|
}) |
|
} |
|
} |
|
|
|
func TestUpstreamIDFromString(t *testing.T) { |
|
type testcase struct { |
|
id string |
|
expect UpstreamID |
|
} |
|
run := func(t *testing.T, tc testcase) { |
|
tc.expect.EnterpriseMeta.Normalize() |
|
|
|
got := UpstreamIDFromString(tc.id) |
|
require.Equal(t, tc.expect, got) |
|
} |
|
|
|
prefix := "" |
|
if structs.DefaultEnterpriseMetaInDefaultPartition().PartitionOrEmpty() != "" { |
|
prefix = "default/default/" |
|
} |
|
|
|
cases := map[string]testcase{ |
|
"prepared query": { |
|
"prepared_query:" + prefix + "foo", |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypePreparedQuery, |
|
Name: "foo", |
|
}, |
|
}, |
|
"prepared query dc": { |
|
"prepared_query:" + prefix + "foo?dc=dc2", |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypePreparedQuery, |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
}, |
|
"normal": { |
|
prefix + "foo", |
|
UpstreamID{ |
|
Name: "foo", |
|
}, |
|
}, |
|
"normal dc": { |
|
prefix + "foo?dc=dc2", |
|
UpstreamID{ |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
}, |
|
"normal with peer": { |
|
"foo?peer=payments", |
|
UpstreamID{ |
|
Name: "foo", |
|
Peer: "payments", |
|
}, |
|
}, |
|
} |
|
|
|
for name, tc := range cases { |
|
t.Run(name, func(t *testing.T) { |
|
run(t, tc) |
|
}) |
|
} |
|
} |
|
|
|
func TestUpstreamID_String(t *testing.T) { |
|
type testcase struct { |
|
u UpstreamID |
|
expect string |
|
} |
|
run := func(t *testing.T, tc testcase) { |
|
got := tc.u.String() |
|
require.Equal(t, tc.expect, got) |
|
} |
|
|
|
prefix := "" |
|
if structs.DefaultEnterpriseMetaInDefaultPartition().PartitionOrEmpty() != "" { |
|
prefix = "default/default/" |
|
} |
|
|
|
cases := map[string]testcase{ |
|
"prepared query": { |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypePreparedQuery, |
|
Name: "foo", |
|
}, |
|
"prepared_query:" + prefix + "foo", |
|
}, |
|
"prepared query dc": { |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypePreparedQuery, |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
"prepared_query:" + prefix + "foo?dc=dc2", |
|
}, |
|
"normal implicit": { |
|
UpstreamID{ |
|
Name: "foo", |
|
}, |
|
prefix + "foo", |
|
}, |
|
"normal implicit dc": { |
|
UpstreamID{ |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
prefix + "foo?dc=dc2", |
|
}, |
|
"normal explicit": { |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypeService, |
|
Name: "foo", |
|
}, |
|
prefix + "foo", |
|
}, |
|
"normal explicit dc": { |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypeService, |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
prefix + "foo?dc=dc2", |
|
}, |
|
"normal with peer": { |
|
UpstreamID{ |
|
Name: "foo", |
|
Peer: "payments", |
|
}, |
|
prefix + "foo?peer=payments", |
|
}, |
|
} |
|
|
|
for name, tc := range cases { |
|
t.Run(name, func(t *testing.T) { |
|
run(t, tc) |
|
}) |
|
} |
|
} |
|
|
|
func TestUpstreamID_EnvoyID(t *testing.T) { |
|
type testcase struct { |
|
u UpstreamID |
|
expect string |
|
} |
|
run := func(t *testing.T, tc testcase) { |
|
got := tc.u.EnvoyID() |
|
require.Equal(t, tc.expect, got) |
|
} |
|
|
|
cases := map[string]testcase{ |
|
"prepared query": { |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypePreparedQuery, |
|
Name: "foo", |
|
}, |
|
"prepared_query:foo", |
|
}, |
|
"prepared query dc": { |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypePreparedQuery, |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
"prepared_query:foo?dc=dc2", |
|
}, |
|
"normal implicit": { |
|
UpstreamID{ |
|
Name: "foo", |
|
}, |
|
"foo", |
|
}, |
|
"normal implicit dc": { |
|
UpstreamID{ |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
"foo?dc=dc2", |
|
}, |
|
"normal explicit": { |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypeService, |
|
Name: "foo", |
|
}, |
|
"foo", |
|
}, |
|
"normal explicit dc": { |
|
UpstreamID{ |
|
Type: structs.UpstreamDestTypeService, |
|
Name: "foo", |
|
Datacenter: "dc2", |
|
}, |
|
"foo?dc=dc2", |
|
}, |
|
"normal with peer": { |
|
UpstreamID{ |
|
Name: "foo", |
|
Peer: "billing", |
|
}, |
|
"foo?peer=billing", |
|
}, |
|
} |
|
|
|
for name, tc := range cases { |
|
t.Run(name, func(t *testing.T) { |
|
run(t, tc) |
|
}) |
|
} |
|
}
|
|
|