// 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 )
}
}