mirror of https://github.com/status-im/consul.git
catalog: service endpoints inherits protocol from service when workload doesn't have one (#18792)
This commit is contained in:
parent
02259ef964
commit
7f2a1d9812
|
@ -311,8 +311,13 @@ func workloadToEndpoint(svc *pbcatalog.Service, data *workloadData) *pbcatalog.E
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if workloadPort.Protocol != svcPort.Protocol {
|
// If workload protocol is not specified, we will default to service's protocol.
|
||||||
// workload port mismatch - ignore it
|
// This is because on some platforms (kubernetes), workload protocol is not always
|
||||||
|
// known, and so we need to inherit from the service instead.
|
||||||
|
if workloadPort.Protocol == pbcatalog.Protocol_PROTOCOL_UNSPECIFIED {
|
||||||
|
workloadPort.Protocol = svcPort.Protocol
|
||||||
|
} else if workloadPort.Protocol != svcPort.Protocol {
|
||||||
|
// Otherwise, there's workload port mismatch - ignore it.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -185,6 +185,51 @@ func TestWorkloadToEndpoint_AllAddressesFiltered(t *testing.T) {
|
||||||
require.Nil(t, workloadToEndpoint(service, data))
|
require.Nil(t, workloadToEndpoint(service, data))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestWorkloadToEndpoint_MissingWorkloadProtocol(t *testing.T) {
|
||||||
|
// This test checks that when a workload is missing its protocol,
|
||||||
|
// we will default to service's protocol.
|
||||||
|
|
||||||
|
service := &pbcatalog.Service{
|
||||||
|
Ports: []*pbcatalog.ServicePort{
|
||||||
|
{TargetPort: "test-port", Protocol: pbcatalog.Protocol_PROTOCOL_HTTP},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
workload := &pbcatalog.Workload{
|
||||||
|
Addresses: []*pbcatalog.WorkloadAddress{
|
||||||
|
{Host: "127.0.0.1"},
|
||||||
|
},
|
||||||
|
Ports: map[string]*pbcatalog.WorkloadPort{
|
||||||
|
"test-port": {Port: 8080},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
data := &workloadData{
|
||||||
|
resource: rtest.Resource(types.WorkloadType, "foo").
|
||||||
|
WithData(t, workload).
|
||||||
|
Build(),
|
||||||
|
workload: workload,
|
||||||
|
}
|
||||||
|
|
||||||
|
expected := &pbcatalog.Endpoint{
|
||||||
|
TargetRef: data.resource.Id,
|
||||||
|
Addresses: []*pbcatalog.WorkloadAddress{
|
||||||
|
{Host: "127.0.0.1", Ports: []string{"test-port"}},
|
||||||
|
},
|
||||||
|
Ports: map[string]*pbcatalog.WorkloadPort{
|
||||||
|
"test-port": {Port: 8080, Protocol: pbcatalog.Protocol_PROTOCOL_HTTP},
|
||||||
|
},
|
||||||
|
// The health is critical because we are not setting the workload's
|
||||||
|
// health status. The tests for determineWorkloadHealth will ensure
|
||||||
|
// that we can properly determine the health status and the overall
|
||||||
|
// controller tests will prove that the integration works as expected.
|
||||||
|
HealthStatus: pbcatalog.Health_HEALTH_CRITICAL,
|
||||||
|
Identity: workload.Identity,
|
||||||
|
}
|
||||||
|
|
||||||
|
prototest.AssertDeepEqual(t, expected, workloadToEndpoint(service, data))
|
||||||
|
}
|
||||||
|
|
||||||
func TestServiceUnderManagement(t *testing.T) {
|
func TestServiceUnderManagement(t *testing.T) {
|
||||||
// This test ensures that we can properly detect when a service
|
// This test ensures that we can properly detect when a service
|
||||||
// should have endpoints generated for it vs when those endpoints
|
// should have endpoints generated for it vs when those endpoints
|
||||||
|
|
Loading…
Reference in New Issue