Skip to content

Commit

Permalink
Add service mirror tests for federated services (#13336)
Browse files Browse the repository at this point in the history
Add tests for the cluster watcher which test services creating, joining, and leaving a federated service.

Signed-off-by: Alex Leong <[email protected]>
  • Loading branch information
adleong authored Nov 19, 2024
1 parent 7bda7f0 commit 80d28a4
Show file tree
Hide file tree
Showing 2 changed files with 487 additions and 178 deletions.
159 changes: 146 additions & 13 deletions multicluster/service-mirror/cluster_watcher_mirroring_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ func TestRemoteServiceCreatedMirroring(t *testing.T) {
),
},
expectedLocalEndpoints: []*corev1.Endpoints{
headlessMirrorEndpoints("service-one-remote", "ns2", "pod-0", "", "gateway-identity", []corev1.EndpointPort{
headlessMirrorEndpoints("service-one-remote", "ns2", "gateway-identity", []corev1.EndpointPort{
{
Name: "port1",
Port: 555,
Expand Down Expand Up @@ -245,6 +245,139 @@ func TestRemoteServiceCreatedMirroring(t *testing.T) {
},
expectedLocalEndpoints: []*corev1.Endpoints{},
},
{
description: "federated service created",
environment: createFederatedService,
expectedLocalServices: []*corev1.Service{
federatedService(
"service-one",
"ns1",
[]corev1.ServicePort{
{
Name: "port1",
Protocol: "TCP",
Port: 555,
},
{
Name: "port2",
Protocol: "TCP",
Port: 666,
},
},
"", fmt.Sprintf("%s@%s", "service-one", clusterName)),
},
expectedLocalEndpoints: []*corev1.Endpoints{},
},
{
description: "federated service joined",
environment: joinFederatedService(),
expectedLocalServices: []*corev1.Service{
federatedService(
"service-one",
"ns1",
[]corev1.ServicePort{
{
Name: "port1",
Protocol: "TCP",
Port: 555,
},
{
Name: "port2",
Protocol: "TCP",
Port: 666,
},
}, "", fmt.Sprintf("%s@%s,%s@%s", "service-one", "other", "service-one", clusterName)),
},
expectedLocalEndpoints: []*corev1.Endpoints{},
},
{
description: "federated service left",
environment: leftFederatedService,
expectedLocalServices: []*corev1.Service{
federatedService(
"service-one",
"ns1",
[]corev1.ServicePort{
{
Name: "port1",
Protocol: "TCP",
Port: 555,
},
{
Name: "port2",
Protocol: "TCP",
Port: 666,
},
}, "", fmt.Sprintf("%s@%s", "service-one", "other")),
},
expectedLocalEndpoints: []*corev1.Endpoints{},
},
{
description: "local federated service created",
environment: createLocalFederatedService,
expectedLocalServices: []*corev1.Service{
federatedService(
"service-one",
"ns1",
[]corev1.ServicePort{
{
Name: "port1",
Protocol: "TCP",
Port: 555,
},
{
Name: "port2",
Protocol: "TCP",
Port: 666,
},
}, "service-one", ""),
},
expectedLocalEndpoints: []*corev1.Endpoints{},
},
{
description: "local federated service joined",
environment: joinLocalFederatedService(),
expectedLocalServices: []*corev1.Service{
federatedService(
"service-one",
"ns1",
[]corev1.ServicePort{
{
Name: "port1",
Protocol: "TCP",
Port: 555,
},
{
Name: "port2",
Protocol: "TCP",
Port: 666,
},
}, "service-one", "service-one@other"),
},
expectedLocalEndpoints: []*corev1.Endpoints{},
},
{
description: "local federated service left",
environment: leftLocalFederatedService,
expectedLocalServices: []*corev1.Service{
federatedService(
"service-one",
"ns1",
[]corev1.ServicePort{
{
Name: "port1",
Protocol: "TCP",
Port: 555,
},
{
Name: "port2",
Protocol: "TCP",
Port: 666,
},
}, "", "service-one@other"),
},
expectedLocalEndpoints: []*corev1.Endpoints{},
},
} {
tc := tt // pin
tc.run(t)
Expand All @@ -253,9 +386,9 @@ func TestRemoteServiceCreatedMirroring(t *testing.T) {

func TestLocalNamespaceCreatedAfterServiceExport(t *testing.T) {
remoteAPI, err := k8s.NewFakeAPI(
gatewayAsYaml("existing-gateway", "existing-namespace", "222", "192.0.2.127", "mc-gateway", 888, "gateway-identity", defaultProbePort, defaultProbePath, defaultProbePeriod),
remoteServiceAsYaml("service-one", "ns1", "111", []corev1.ServicePort{}),
endpointsAsYaml("service-one", "ns1", "192.0.2.127", "gateway-identity", []corev1.EndpointPort{}),
asYaml(gateway("existing-gateway", "existing-namespace", "222", "192.0.2.127", "mc-gateway", 888, "gateway-identity", defaultProbePort, defaultProbePath, defaultProbePeriod)),
asYaml(remoteService("service-one", "ns1", "111", map[string]string{consts.DefaultExportedServiceSelector: "true"}, []corev1.ServicePort{})),
asYaml(endpoints("service-one", "ns1", "192.0.2.127", "gateway-identity", []corev1.EndpointPort{})),
)
if err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -342,15 +475,15 @@ func TestLocalNamespaceCreatedAfterServiceExport(t *testing.T) {

func TestServiceCreatedGatewayAlive(t *testing.T) {
remoteAPI, err := k8s.NewFakeAPI(
gatewayAsYaml("gateway", "gateway-ns", "1", "192.0.0.1", "gateway", 888, "gateway-identity", defaultProbePort, defaultProbePath, defaultProbePeriod),
remoteServiceAsYaml("svc", "ns", "1", []corev1.ServicePort{}),
endpointsAsYaml("svc", "ns", "192.0.0.1", "gateway-identity", []corev1.EndpointPort{}),
asYaml(gateway("gateway", "gateway-ns", "1", "192.0.0.1", "gateway", 888, "gateway-identity", defaultProbePort, defaultProbePath, defaultProbePeriod)),
asYaml(remoteService("svc", "ns", "1", map[string]string{consts.DefaultExportedServiceSelector: "true"}, []corev1.ServicePort{})),
asYaml(endpoints("svc", "ns", "192.0.0.1", "gateway-identity", []corev1.EndpointPort{})),
)
if err != nil {
t.Fatal(err)
}
localAPI, err := k8s.NewFakeAPI(
namespaceAsYaml("ns"),
asYaml(namespace("ns")),
)
if err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -490,15 +623,15 @@ func TestServiceCreatedGatewayAlive(t *testing.T) {

func TestServiceCreatedGatewayDown(t *testing.T) {
remoteAPI, err := k8s.NewFakeAPI(
gatewayAsYaml("gateway", "gateway-ns", "1", "192.0.0.1", "gateway", 888, "gateway-identity", defaultProbePort, defaultProbePath, defaultProbePeriod),
remoteServiceAsYaml("svc", "ns", "1", []corev1.ServicePort{}),
endpointsAsYaml("svc", "ns", "192.0.0.1", "gateway-identity", []corev1.EndpointPort{}),
asYaml(gateway("gateway", "gateway-ns", "1", "192.0.0.1", "gateway", 888, "gateway-identity", defaultProbePort, defaultProbePath, defaultProbePeriod)),
asYaml(remoteService("svc", "ns", "1", map[string]string{consts.DefaultExportedServiceSelector: "true"}, []corev1.ServicePort{})),
asYaml(endpoints("svc", "ns", "192.0.0.1", "gateway-identity", []corev1.EndpointPort{})),
)
if err != nil {
t.Fatal(err)
}
localAPI, err := k8s.NewFakeAPI(
namespaceAsYaml("ns"),
asYaml(namespace("ns")),
)
if err != nil {
t.Fatal(err)
Expand Down Expand Up @@ -830,7 +963,7 @@ func TestGcOrphanedServicesMirroring(t *testing.T) {

expectedLocalEndpoints: []*corev1.Endpoints{
endpoints("test-service-1-remote", "test-namespace", "", "", nil),
headlessMirrorEndpoints("test-headless-service-remote", "test-namespace", "pod-0", "", "", nil),
headlessMirrorEndpoints("test-headless-service-remote", "test-namespace", "", nil),
endpointMirrorEndpoints("test-headless-service-remote", "test-namespace", "pod-0", "", "", nil),
},
},
Expand Down
Loading

0 comments on commit 80d28a4

Please sign in to comment.