diff --git a/src/pkg/cli/client/byoc/baseclient.go b/src/pkg/cli/client/byoc/baseclient.go index 61ed7f78a..e28d449b9 100644 --- a/src/pkg/cli/client/byoc/baseclient.go +++ b/src/pkg/cli/client/byoc/baseclient.go @@ -125,7 +125,7 @@ func (b *ByocBaseClient) GetProjectDomain(projectName, zone string) string { } domain := dns.Normalize(zone) if hasStack, ok := b.projectBackend.(HasStackSupport); ok { - domain = hasStack.GetStackName() + "." + domain + domain = DnsSafeLabel(hasStack.GetStackName()) + "." + domain } return domain } diff --git a/src/pkg/cli/client/byoc/baseclient_test.go b/src/pkg/cli/client/byoc/baseclient_test.go index e590ed430..8f315073c 100644 --- a/src/pkg/cli/client/byoc/baseclient_test.go +++ b/src/pkg/cli/client/byoc/baseclient_test.go @@ -172,3 +172,50 @@ func TestGetServiceInfosWithTestData(t *testing.T) { }) } } + +type TestProjectBackendWithStack struct { + ProjectBackend + stack string +} + +func (t TestProjectBackendWithStack) GetStackName() string { + return t.stack +} + +type TestProjectBackendWithoutStack struct { + ProjectBackend +} + +func TestGetProjectDomain(t *testing.T) { + tests := []struct { + projectName string + zone string + tenantName string + projectBackend ProjectBackend + expected string + }{ + {"", "test-zone", "test-tenant", TestProjectBackendWithoutStack{}, ""}, + {"", "test-zone", "test-tenant", TestProjectBackendWithStack{stack: "test-stack"}, ""}, + {"test-project", "test-zone", "test-tenant", TestProjectBackendWithoutStack{}, "test-project.test-zone"}, + {"test-project", "test-zone", "test-tenant", TestProjectBackendWithStack{stack: "test-stack"}, "test-stack.test-project.test-zone"}, + {"project-is-tenant-name", "test-zone", "project-is-tenant-name", TestProjectBackendWithoutStack{}, "test-zone"}, + {"project-is-tenant-name", "test-zone", "project-is-tenant-name", TestProjectBackendWithStack{stack: "test-stack"}, "test-stack.test-zone"}, + {"Test.Project", "tesT.zonE", "test-tenant", TestProjectBackendWithoutStack{}, "test-project.test.zone"}, + {"Test.Project", "tesT.zonE", "test-tenant", TestProjectBackendWithStack{stack: "test-stack"}, "test-stack.test-project.test.zone"}, + {"test-project", "test-zone", "test-tenant", TestProjectBackendWithStack{stack: "tEst.sTack"}, "test-stack.test-project.test-zone"}, + } + + for _, tt := range tests { + stack := "no-stack" + if hasStack, ok := tt.projectBackend.(HasStackSupport); ok { + stack = hasStack.GetStackName() + } + t.Run(fmt.Sprintf("%s-%s-%s-%s", tt.projectName, tt.zone, tt.tenantName, stack), func(t *testing.T) { + b := &ByocBaseClient{TenantName: tt.tenantName, projectBackend: tt.projectBackend} + actual := b.GetProjectDomain(tt.projectName, tt.zone) + if actual != tt.expected { + t.Errorf("expected %q, got %q", tt.expected, actual) + } + }) + } +}