// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package catalogv2beta1
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestServiceIsMeshEnabled ( t * testing . T ) {
cases := map [ string ] struct {
service * Service
exp bool
} {
"nil" : { service : nil , exp : false } ,
"no ports" : {
service : & Service { } ,
exp : false ,
} ,
"no mesh ports" : {
service : & Service {
Ports : [ ] * ServicePort {
{
TargetPort : "foo" ,
Protocol : Protocol_PROTOCOL_HTTP ,
} ,
{
TargetPort : "bar" ,
Protocol : Protocol_PROTOCOL_TCP ,
} ,
} ,
} ,
exp : false ,
} ,
"with mesh ports" : {
service : & Service {
Ports : [ ] * ServicePort {
{
TargetPort : "foo" ,
Protocol : Protocol_PROTOCOL_HTTP ,
} ,
{
TargetPort : "bar" ,
Protocol : Protocol_PROTOCOL_TCP ,
} ,
{
TargetPort : "baz" ,
Protocol : Protocol_PROTOCOL_MESH ,
} ,
} ,
} ,
exp : true ,
} ,
}
for name , c := range cases {
t . Run ( name , func ( t * testing . T ) {
require . Equal ( t , c . exp , c . service . IsMeshEnabled ( ) )
} )
}
}
func TestFindPort ( t * testing . T ) {
cases := map [ string ] struct {
service * Service
port string
expById * ServicePort
expByTargetPort * ServicePort
} {
"nil" : { service : nil , port : "foo" , expById : nil , expByTargetPort : nil } ,
"no ports" : {
service : & Service { } ,
port : "foo" ,
expById : nil ,
expByTargetPort : nil ,
} ,
"non-existing port" : {
service : & Service {
Ports : [ ] * ServicePort {
{
TargetPort : "foo" ,
Protocol : Protocol_PROTOCOL_HTTP ,
} ,
{
TargetPort : "bar" ,
Protocol : Protocol_PROTOCOL_TCP ,
} ,
} ,
} ,
port : "not-found" ,
expById : nil ,
expByTargetPort : nil ,
} ,
"existing port" : {
service : & Service {
Ports : [ ] * ServicePort {
{
TargetPort : "foo" ,
Protocol : Protocol_PROTOCOL_HTTP ,
} ,
{
TargetPort : "bar" ,
Protocol : Protocol_PROTOCOL_TCP ,
} ,
{
TargetPort : "baz" ,
Protocol : Protocol_PROTOCOL_MESH ,
} ,
} ,
} ,
port : "bar" ,
expById : & ServicePort {
TargetPort : "bar" ,
Protocol : Protocol_PROTOCOL_TCP ,
} ,
expByTargetPort : & ServicePort {
TargetPort : "bar" ,
Protocol : Protocol_PROTOCOL_TCP ,
} ,
} ,
"existing port by virtual port" : {
service : & Service {
Ports : [ ] * ServicePort {
{
TargetPort : "foo" ,
VirtualPort : 8080 ,
Protocol : Protocol_PROTOCOL_HTTP ,
} ,
{
TargetPort : "bar" ,
VirtualPort : 8081 ,
Protocol : Protocol_PROTOCOL_TCP ,
} ,
{
TargetPort : "baz" ,
VirtualPort : 8081 ,
Protocol : Protocol_PROTOCOL_MESH ,
} ,
} ,
} ,
port : "8081" ,
expById : & ServicePort {
TargetPort : "bar" ,
VirtualPort : 8081 ,
Protocol : Protocol_PROTOCOL_TCP ,
} ,
expByTargetPort : nil ,
} ,
}
for name , c := range cases {
t . Run ( name , func ( t * testing . T ) {
require . Equal ( t , c . expById , c . service . FindPortByID ( c . port ) )
require . Equal ( t , c . expByTargetPort , c . service . FindTargetPort ( c . port ) )
} )
}
}
func TestMatchesPortId ( t * testing . T ) {
testPort := & ServicePort { VirtualPort : 8080 , TargetPort : "http" }
cases := map [ string ] struct {
port * ServicePort
id string
expected bool
} {
"nil" : { port : nil , id : "foo" , expected : false } ,
"empty" : { port : testPort , id : "" , expected : false } ,
"non-existing virtual port" : {
port : testPort ,
id : "9090" ,
expected : false ,
} ,
"non-existing target port" : {
port : testPort ,
id : "other-port" ,
expected : false ,
} ,
"existing virtual port" : {
port : testPort ,
id : "8080" ,
expected : true ,
} ,
"existing target port" : {
port : testPort ,
id : "http" ,
expected : true ,
} ,
"virtual and target mismatch" : {
port : & ServicePort { VirtualPort : 8080 , TargetPort : "9090" } ,
id : "9090" ,
expected : false ,
} ,
"virtual and target match" : {
port : & ServicePort { VirtualPort : 9090 , TargetPort : "9090" } ,
id : "9090" ,
expected : true ,
} ,
}
for name , c := range cases {
t . Run ( name , func ( t * testing . T ) {
require . Equal ( t , c . expected , c . port . MatchesPortId ( c . id ) )
} )
}
}