Skip to content

Commit 02f4a27

Browse files
committed
add unit tests to demonstrate the issue with super long names in kcp
On-behalf-of: @SAP christoph.mewes@sap.com
1 parent 305247e commit 02f4a27

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

test/e2e/sync/primary_test.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
syncagentv1alpha1 "github.com/kcp-dev/api-syncagent/sdk/apis/syncagent/v1alpha1"
3333
"github.com/kcp-dev/api-syncagent/test/utils"
3434

35+
corev1 "k8s.io/api/core/v1"
3536
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3637
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
3738
"k8s.io/apimachinery/pkg/runtime"
@@ -449,3 +450,96 @@ spec:
449450
t.Fatal("Expected no ignored object to be found on the service cluster, but did.")
450451
}
451452
}
453+
454+
func TestSyncingOverlyLongNames(t *testing.T) {
455+
const (
456+
apiExportName = "kcp.example.com"
457+
orgWorkspace = "sync-long-names"
458+
)
459+
460+
ctx := context.Background()
461+
ctrlruntime.SetLogger(logr.Discard())
462+
463+
// setup a test environment in kcp
464+
orgKubconfig := utils.CreateOrganization(t, ctx, orgWorkspace, apiExportName)
465+
466+
// start a service cluster
467+
envtestKubeconfig, envtestClient, _ := utils.RunEnvtest(t, []string{
468+
"test/crds/crontab.yaml",
469+
})
470+
471+
// publish Crontabs and Backups
472+
t.Logf("Publishing CRDs…")
473+
prCrontabs := &syncagentv1alpha1.PublishedResource{
474+
ObjectMeta: metav1.ObjectMeta{
475+
Name: "publish-crontabs",
476+
},
477+
Spec: syncagentv1alpha1.PublishedResourceSpec{
478+
Resource: syncagentv1alpha1.SourceResourceDescriptor{
479+
APIGroup: "example.com",
480+
Version: "v1",
481+
Kind: "CronTab",
482+
},
483+
// These rules make finding the local object easier, but should not be used in production.
484+
Naming: &syncagentv1alpha1.ResourceNaming{
485+
Name: "$remoteName",
486+
Namespace: "synced-$remoteNamespace",
487+
},
488+
},
489+
}
490+
491+
if err := envtestClient.Create(ctx, prCrontabs); err != nil {
492+
t.Fatalf("Failed to create PublishedResource: %v", err)
493+
}
494+
495+
// start the agent in the background to update the APIExport with the CronTabs API
496+
utils.RunAgent(ctx, t, "bob", orgKubconfig, envtestKubeconfig, apiExportName)
497+
498+
// wait until the API is available
499+
teamCtx := kontext.WithCluster(ctx, logicalcluster.Name(fmt.Sprintf("root:%s:team-1", orgWorkspace)))
500+
kcpClient := utils.GetKcpAdminClusterClient(t)
501+
utils.WaitForBoundAPI(t, teamCtx, kcpClient, schema.GroupVersionResource{
502+
Group: apiExportName,
503+
Version: "v1",
504+
Resource: "crontabs",
505+
})
506+
507+
// create a namespace and CronTab with extremely long names
508+
namespace := &corev1.Namespace{}
509+
namespace.Name = strings.Repeat("yadda", 3) // 250 chars in total
510+
511+
if err := kcpClient.Create(teamCtx, namespace); err != nil {
512+
t.Fatalf("Failed to create namespace in kcp: %v", err)
513+
}
514+
515+
t.Log("Creating CronTab in kcp…")
516+
ignoredCrontab := yamlToUnstructured(t, `
517+
apiVersion: kcp.example.com/v1
518+
kind: CronTab
519+
metadata:
520+
name: TBD
521+
spec:
522+
image: ubuntu:latest
523+
`)
524+
ignoredCrontab.SetNamespace(namespace.Name)
525+
ignoredCrontab.SetName(strings.Repeat("yotta", 50))
526+
527+
if err := kcpClient.Create(teamCtx, ignoredCrontab); err != nil {
528+
t.Fatalf("Failed to create CronTab in kcp: %v", err)
529+
}
530+
531+
// wait for the agent to sync the object down into the service cluster
532+
533+
t.Logf("Wait for CronTab to be synced…")
534+
copy := &unstructured.Unstructured{}
535+
copy.SetAPIVersion("example.com/v1")
536+
copy.SetKind("CronTab")
537+
538+
err := wait.PollUntilContextTimeout(ctx, 500*time.Millisecond, 30*time.Second, false, func(ctx context.Context) (done bool, err error) {
539+
copyKey := types.NamespacedName{Namespace: "synced-default", Name: "included"}
540+
return envtestClient.Get(ctx, copyKey, copy) == nil, nil
541+
})
542+
if err != nil {
543+
t.Fatalf("Failed to wait for object to be synced down: %v", err)
544+
}
545+
}

0 commit comments

Comments
 (0)