Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.
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.
 
 
 
 
 
 

131 lines
2.7 KiB

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package pbcommon
import (
"testing"
"github.com/hashicorp/consul/agent/structs"
"github.com/stretchr/testify/assert"
"google.golang.org/protobuf/types/known/structpb"
)
func TestEnvoyExtensionsToStructs(t *testing.T) {
input := []*EnvoyExtension{
{
Name: "ext1",
Required: true,
Arguments: &structpb.Struct{
Fields: map[string]*structpb.Value{
"field1": {Kind: &structpb.Value_StringValue{StringValue: "value1"}},
"field2": {Kind: &structpb.Value_NumberValue{NumberValue: 3.14}},
},
},
},
{
Name: "ext2",
Required: false,
Arguments: &structpb.Struct{
Fields: map[string]*structpb.Value{
"field3": {Kind: &structpb.Value_StringValue{StringValue: "value2"}},
"field4": {Kind: &structpb.Value_NumberValue{NumberValue: 2.718}},
},
},
},
}
expected := []structs.EnvoyExtension{
{
Name: "ext1",
Required: true,
Arguments: map[string]interface{}{
"field1": "value1",
"field2": 3.14,
},
},
{
Name: "ext2",
Required: false,
Arguments: map[string]interface{}{
"field3": "value2",
"field4": 2.718,
},
},
}
result := EnvoyExtensionsToStructs(input)
assert.Equal(t, expected, result)
}
func TestEnvoyExtensionsFromStructs(t *testing.T) {
input := []structs.EnvoyExtension{
{
Name: "ext1",
Required: true,
Arguments: map[string]interface{}{
"field1": "value1",
"field2": 3.14,
},
},
{
Name: "ext2",
Required: false,
Arguments: map[string]interface{}{
"field3": "value2",
"field4": 2.718,
},
},
}
expected := []*EnvoyExtension{
{
Name: "ext1",
Required: true,
Arguments: &structpb.Struct{
Fields: map[string]*structpb.Value{
"field1": {Kind: &structpb.Value_StringValue{StringValue: "value1"}},
"field2": {Kind: &structpb.Value_NumberValue{NumberValue: 3.14}},
},
},
},
{
Name: "ext2",
Required: false,
Arguments: &structpb.Struct{
Fields: map[string]*structpb.Value{
"field3": {Kind: &structpb.Value_StringValue{StringValue: "value2"}},
"field4": {Kind: &structpb.Value_NumberValue{NumberValue: 2.718}},
},
},
},
}
result := EnvoyExtensionsFromStructs(input)
assert.Equal(t, expected, result)
}
func TestSliceToPBListValue(t *testing.T) {
s := []interface{}{1, 2, 3}
expected, _ := structpb.NewList(s)
tests := []struct {
input []interface{}
expected *structpb.ListValue
}{
{
[]interface{}{1, 2, 3},
expected,
},
{
[]interface{}{},
nil,
},
{
nil,
nil,
},
}
for _, tc := range tests {
result := SliceToPBListValue(tc.input)
assert.Equal(t, tc.expected, result)
}
}