Add basic smoke test to make sure an APIGateway runs (#16217)
This commit is contained in:
parent
28122f9be3
commit
3f276a470d
|
@ -1575,7 +1575,7 @@ func (s *NodeService) ValidateForAgent() error {
|
||||||
// Gateway validation
|
// Gateway validation
|
||||||
if s.IsGateway() {
|
if s.IsGateway() {
|
||||||
// Non-ingress gateways must have a port
|
// Non-ingress gateways must have a port
|
||||||
if s.Port == 0 && s.Kind != ServiceKindIngressGateway {
|
if s.Port == 0 && s.Kind != ServiceKindIngressGateway && s.Kind != ServiceKindAPIGateway {
|
||||||
result = multierror.Append(result, fmt.Errorf("Port must be non-zero for a %s", s.Kind))
|
result = multierror.Append(result, fmt.Errorf("Port must be non-zero for a %s", s.Kind))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,38 @@ func ConfigEntryToStructs(s *ConfigEntry) structs.ConfigEntry {
|
||||||
pbcommon.RaftIndexToStructs(s.RaftIndex, &target.RaftIndex)
|
pbcommon.RaftIndexToStructs(s.RaftIndex, &target.RaftIndex)
|
||||||
pbcommon.EnterpriseMetaToStructs(s.EnterpriseMeta, &target.EnterpriseMeta)
|
pbcommon.EnterpriseMetaToStructs(s.EnterpriseMeta, &target.EnterpriseMeta)
|
||||||
return &target
|
return &target
|
||||||
|
case Kind_KindAPIGateway:
|
||||||
|
var target structs.APIGatewayConfigEntry
|
||||||
|
target.Name = s.Name
|
||||||
|
|
||||||
|
APIGatewayToStructs(s.GetAPIGateway(), &target)
|
||||||
|
pbcommon.RaftIndexToStructs(s.RaftIndex, &target.RaftIndex)
|
||||||
|
pbcommon.EnterpriseMetaToStructs(s.EnterpriseMeta, &target.EnterpriseMeta)
|
||||||
|
return &target
|
||||||
|
case Kind_KindBoundAPIGateway:
|
||||||
|
var target structs.BoundAPIGatewayConfigEntry
|
||||||
|
target.Name = s.Name
|
||||||
|
|
||||||
|
BoundAPIGatewayToStructs(s.GetBoundAPIGateway(), &target)
|
||||||
|
pbcommon.RaftIndexToStructs(s.RaftIndex, &target.RaftIndex)
|
||||||
|
pbcommon.EnterpriseMetaToStructs(s.EnterpriseMeta, &target.EnterpriseMeta)
|
||||||
|
return &target
|
||||||
|
case Kind_KindTCPRoute:
|
||||||
|
var target structs.TCPRouteConfigEntry
|
||||||
|
target.Name = s.Name
|
||||||
|
|
||||||
|
TCPRouteToStructs(s.GetTCPRoute(), &target)
|
||||||
|
pbcommon.RaftIndexToStructs(s.RaftIndex, &target.RaftIndex)
|
||||||
|
pbcommon.EnterpriseMetaToStructs(s.EnterpriseMeta, &target.EnterpriseMeta)
|
||||||
|
return &target
|
||||||
|
case Kind_KindHTTPRoute:
|
||||||
|
var target structs.HTTPRouteConfigEntry
|
||||||
|
target.Name = s.Name
|
||||||
|
|
||||||
|
HTTPRouteToStructs(s.GetHTTPRoute(), &target)
|
||||||
|
pbcommon.RaftIndexToStructs(s.RaftIndex, &target.RaftIndex)
|
||||||
|
pbcommon.EnterpriseMetaToStructs(s.EnterpriseMeta, &target.EnterpriseMeta)
|
||||||
|
return &target
|
||||||
case Kind_KindServiceDefaults:
|
case Kind_KindServiceDefaults:
|
||||||
var target structs.ServiceConfigEntry
|
var target structs.ServiceConfigEntry
|
||||||
target.Name = s.Name
|
target.Name = s.Name
|
||||||
|
@ -113,6 +145,38 @@ func ConfigEntryFromStructs(s structs.ConfigEntry) *ConfigEntry {
|
||||||
configEntry.Entry = &ConfigEntry_ServiceDefaults{
|
configEntry.Entry = &ConfigEntry_ServiceDefaults{
|
||||||
ServiceDefaults: &serviceDefaults,
|
ServiceDefaults: &serviceDefaults,
|
||||||
}
|
}
|
||||||
|
case *structs.APIGatewayConfigEntry:
|
||||||
|
var apiGateway APIGateway
|
||||||
|
APIGatewayFromStructs(v, &apiGateway)
|
||||||
|
|
||||||
|
configEntry.Kind = Kind_KindAPIGateway
|
||||||
|
configEntry.Entry = &ConfigEntry_APIGateway{
|
||||||
|
APIGateway: &apiGateway,
|
||||||
|
}
|
||||||
|
case *structs.BoundAPIGatewayConfigEntry:
|
||||||
|
var apiGateway BoundAPIGateway
|
||||||
|
BoundAPIGatewayFromStructs(v, &apiGateway)
|
||||||
|
|
||||||
|
configEntry.Kind = Kind_KindBoundAPIGateway
|
||||||
|
configEntry.Entry = &ConfigEntry_BoundAPIGateway{
|
||||||
|
BoundAPIGateway: &apiGateway,
|
||||||
|
}
|
||||||
|
case *structs.TCPRouteConfigEntry:
|
||||||
|
var route TCPRoute
|
||||||
|
TCPRouteFromStructs(v, &route)
|
||||||
|
|
||||||
|
configEntry.Kind = Kind_KindTCPRoute
|
||||||
|
configEntry.Entry = &ConfigEntry_TCPRoute{
|
||||||
|
TCPRoute: &route,
|
||||||
|
}
|
||||||
|
case *structs.HTTPRouteConfigEntry:
|
||||||
|
var route HTTPRoute
|
||||||
|
HTTPRouteFromStructs(v, &route)
|
||||||
|
|
||||||
|
configEntry.Kind = Kind_KindHTTPRoute
|
||||||
|
configEntry.Entry = &ConfigEntry_HTTPRoute{
|
||||||
|
HTTPRoute: &route,
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("unable to convert %T to proto", s))
|
panic(fmt.Sprintf("unable to convert %T to proto", s))
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -33,6 +33,10 @@ message ConfigEntry {
|
||||||
IngressGateway IngressGateway = 7;
|
IngressGateway IngressGateway = 7;
|
||||||
ServiceIntentions ServiceIntentions = 8;
|
ServiceIntentions ServiceIntentions = 8;
|
||||||
ServiceDefaults ServiceDefaults = 9;
|
ServiceDefaults ServiceDefaults = 9;
|
||||||
|
APIGateway APIGateway = 10;
|
||||||
|
BoundAPIGateway BoundAPIGateway = 11;
|
||||||
|
TCPRoute TCPRoute = 12;
|
||||||
|
HTTPRoute HTTPRoute = 13;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
snapshot_envoy_admin localhost:20000 api-gateway primary || true
|
|
@ -0,0 +1,4 @@
|
||||||
|
services {
|
||||||
|
name = "api-gateway"
|
||||||
|
kind = "api-gateway"
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
upsert_config_entry primary '
|
||||||
|
kind = "api-gateway"
|
||||||
|
name = "api-gateway"
|
||||||
|
listeners = [
|
||||||
|
{
|
||||||
|
port = 9999
|
||||||
|
protocol = "tcp"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
'
|
||||||
|
|
||||||
|
upsert_config_entry primary '
|
||||||
|
kind = "tcp-route"
|
||||||
|
name = "api-gateway-route"
|
||||||
|
services = [
|
||||||
|
{
|
||||||
|
name = "s1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
parents = [
|
||||||
|
{
|
||||||
|
name = "api-gateway"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
'
|
||||||
|
|
||||||
|
register_services primary
|
||||||
|
|
||||||
|
gen_envoy_bootstrap api-gateway 20000 primary true
|
||||||
|
gen_envoy_bootstrap s1 19000
|
||||||
|
gen_envoy_bootstrap s2 19001
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export REQUIRED_SERVICES="$DEFAULT_REQUIRED_SERVICES api-gateway-primary"
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/usr/bin/env bats
|
||||||
|
|
||||||
|
load helpers
|
||||||
|
|
||||||
|
@test "api gateway proxy admin is up on :20000" {
|
||||||
|
retry_default curl -f -s localhost:20000/stats -o /dev/null
|
||||||
|
}
|
|
@ -803,6 +803,10 @@ function run_container_ingress-gateway-primary {
|
||||||
common_run_container_gateway ingress-gateway primary
|
common_run_container_gateway ingress-gateway primary
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function run_container_api-gateway-primary {
|
||||||
|
common_run_container_gateway api-gateway primary
|
||||||
|
}
|
||||||
|
|
||||||
function run_container_terminating-gateway-primary {
|
function run_container_terminating-gateway-primary {
|
||||||
common_run_container_gateway terminating-gateway primary
|
common_run_container_gateway terminating-gateway primary
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue