mirror of
https://github.com/status-im/consul.git
synced 2025-01-09 21:35:52 +00:00
34a32d4ce5
The peer name will eventually show up elsewhere in the resource. For now though this rips it out of where we don’t want it to be.
174 lines
3.8 KiB
Go
174 lines
3.8 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package meshv2beta1
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/protobuf/encoding/protojson"
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
"github.com/hashicorp/consul/proto-public/pbresource"
|
|
)
|
|
|
|
type routeWithAddons interface {
|
|
proto.Message
|
|
GetUnderlyingBackendRefs() []*BackendReference
|
|
}
|
|
|
|
func TestXRoute_GetUnderlyingBackendRefs(t *testing.T) {
|
|
type testcase struct {
|
|
route routeWithAddons
|
|
expect []*BackendReference
|
|
}
|
|
|
|
run := func(t *testing.T, tc testcase) {
|
|
got := tc.route.GetUnderlyingBackendRefs()
|
|
require.ElementsMatch(t, stringifyList(tc.expect), stringifyList(got))
|
|
}
|
|
|
|
cases := map[string]testcase{
|
|
"http: nil": {
|
|
route: (*HTTPRoute)(nil),
|
|
},
|
|
"grpc: nil": {
|
|
route: (*GRPCRoute)(nil),
|
|
},
|
|
"tcp: nil": {
|
|
route: (*TCPRoute)(nil),
|
|
},
|
|
"http: kitchen sink": {
|
|
route: &HTTPRoute{
|
|
Rules: []*HTTPRouteRule{
|
|
{BackendRefs: []*HTTPBackendRef{
|
|
{BackendRef: newBackendRef("aa")},
|
|
}},
|
|
{BackendRefs: []*HTTPBackendRef{
|
|
{BackendRef: newBackendRef("bb")},
|
|
}},
|
|
{BackendRefs: []*HTTPBackendRef{
|
|
{BackendRef: newBackendRef("cc")},
|
|
{BackendRef: newBackendRef("dd")},
|
|
}},
|
|
{BackendRefs: []*HTTPBackendRef{
|
|
{BackendRef: newBackendRef("ee")},
|
|
{BackendRef: newBackendRef("ff")},
|
|
}},
|
|
},
|
|
},
|
|
expect: []*BackendReference{
|
|
newBackendRef("aa"),
|
|
newBackendRef("bb"),
|
|
newBackendRef("cc"),
|
|
newBackendRef("dd"),
|
|
newBackendRef("ee"),
|
|
newBackendRef("ff"),
|
|
},
|
|
},
|
|
"grpc: kitchen sink": {
|
|
route: &GRPCRoute{
|
|
Rules: []*GRPCRouteRule{
|
|
{BackendRefs: []*GRPCBackendRef{
|
|
{BackendRef: newBackendRef("aa")},
|
|
}},
|
|
{BackendRefs: []*GRPCBackendRef{
|
|
{BackendRef: newBackendRef("bb")},
|
|
}},
|
|
{BackendRefs: []*GRPCBackendRef{
|
|
{BackendRef: newBackendRef("cc")},
|
|
{BackendRef: newBackendRef("dd")},
|
|
}},
|
|
{BackendRefs: []*GRPCBackendRef{
|
|
{BackendRef: newBackendRef("ee")},
|
|
{BackendRef: newBackendRef("ff")},
|
|
}},
|
|
},
|
|
},
|
|
expect: []*BackendReference{
|
|
newBackendRef("aa"),
|
|
newBackendRef("bb"),
|
|
newBackendRef("cc"),
|
|
newBackendRef("dd"),
|
|
newBackendRef("ee"),
|
|
newBackendRef("ff"),
|
|
},
|
|
},
|
|
"tcp: kitchen sink": {
|
|
route: &TCPRoute{
|
|
Rules: []*TCPRouteRule{
|
|
{BackendRefs: []*TCPBackendRef{
|
|
{BackendRef: newBackendRef("aa")},
|
|
}},
|
|
{BackendRefs: []*TCPBackendRef{
|
|
{BackendRef: newBackendRef("bb")},
|
|
}},
|
|
{BackendRefs: []*TCPBackendRef{
|
|
{BackendRef: newBackendRef("cc")},
|
|
{BackendRef: newBackendRef("dd")},
|
|
}},
|
|
{BackendRefs: []*TCPBackendRef{
|
|
{BackendRef: newBackendRef("ee")},
|
|
{BackendRef: newBackendRef("ff")},
|
|
}},
|
|
},
|
|
},
|
|
expect: []*BackendReference{
|
|
newBackendRef("aa"),
|
|
newBackendRef("bb"),
|
|
newBackendRef("cc"),
|
|
newBackendRef("dd"),
|
|
newBackendRef("ee"),
|
|
newBackendRef("ff"),
|
|
},
|
|
},
|
|
}
|
|
|
|
for name, tc := range cases {
|
|
t.Run(name, func(t *testing.T) {
|
|
run(t, tc)
|
|
})
|
|
}
|
|
}
|
|
|
|
func protoToString[V proto.Message](pb V) string {
|
|
m := protojson.MarshalOptions{
|
|
Indent: " ",
|
|
}
|
|
gotJSON, err := m.Marshal(pb)
|
|
if err != nil {
|
|
return "<ERR: " + err.Error() + ">"
|
|
}
|
|
return string(gotJSON)
|
|
}
|
|
|
|
func newRouteRef(name string) *pbresource.Reference {
|
|
return &pbresource.Reference{
|
|
Type: &pbresource.Type{
|
|
Group: "fake",
|
|
GroupVersion: "v1alpha1",
|
|
Kind: "fake",
|
|
},
|
|
Tenancy: &pbresource.Tenancy{
|
|
Partition: "default",
|
|
Namespace: "default",
|
|
},
|
|
Name: name,
|
|
}
|
|
}
|
|
|
|
func newBackendRef(name string) *BackendReference {
|
|
return &BackendReference{
|
|
Ref: newRouteRef(name),
|
|
}
|
|
}
|
|
|
|
func stringifyList[V proto.Message](list []V) []string {
|
|
out := make([]string, 0, len(list))
|
|
for _, item := range list {
|
|
out = append(out, protoToString(item))
|
|
}
|
|
return out
|
|
}
|