Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: restrict the membercluster name length to 63 #946

Open
wants to merge 22 commits into
base: main
Choose a base branch
from

Conversation

jamyct
Copy link
Contributor

@jamyct jamyct commented Nov 7, 2024

Description of your changes

restrict the membercluster name length to 63

Fixes #

I have:

  • Run make reviewable to ensure this PR is ready for review.

How has this code been tested

Special notes for your reviewer

@jamyct jamyct changed the title restrict the membercluster name length to 63 feat: restrict the membercluster name length to 63 Nov 8, 2024
@jamyct
Copy link
Contributor Author

jamyct commented Nov 15, 2024

Manual test for name length restriction:

image

Manual test for regex (as per RFC 1123 Label Names):

image

Copyright (c) Microsoft Corporation.
Licensed under the MIT license.
*/
package e2e
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please move this to integration test

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hi ryan, will the e2e tests be better here? The invalid MC is rejected by the CRD definition, while "The controller-runtime/pkg/envtest Go library helps write integration tests for your controllers by setting up and starting an instance of etcd and the Kubernetes API server, without kubelet, controller-manager or other components."

The ITs is better to test the controller behavior itself.

Comment on lines +8 to +21
"errors"
"fmt"

"k8s.io/apimachinery/pkg/types"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"

"reflect"

clusterv1beta1 "go.goms.io/fleet/apis/cluster/v1beta1"
rbacv1 "k8s.io/api/rbac/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please group the imports correctly

},
},
}
Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed())
Expect(hubClient.Create(ctx, memberClusterName)).Should(Succeed())

plese use hubClient instead and the imerpsonateHubClient is used for other test purpose.

Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed())
Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed())
Expect(impersonateHubClient.Delete(ctx, memberClusterName)).Should(Succeed())
ensureMemberClusterAndRelatedResourcesDeletion(name)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This func will delete mc. Please remove line 66.

},
}
Expect(impersonateHubClient.Create(ctx, memberClusterName)).Should(Succeed())
Expect(impersonateHubClient.Get(ctx, types.NamespacedName{Name: memberClusterName.Name}, memberClusterName)).Should(Succeed())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you don't need to validate the get, since the reject should fail the create request.

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

var _ = Describe("Resource validation tests for Member Cluster", func() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you split the tests into two, one is to allow create and the other one is to deny to improve the readability.

err := hubClient.Create(ctx, memberClusterName)
var statusErr *k8serrors.StatusError
Expect(errors.As(err, &statusErr)).To(BeTrue(), fmt.Sprintf("Create API call produced error %s. Error type wanted is %s.", reflect.TypeOf(err), reflect.TypeOf(&k8serrors.StatusError{})))
Expect(statusErr.Status().Message).Should(ContainSubstring("a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')"))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no need to compare the full error strings and it's not reliable cause the package may change the error message.

Checking if have "a lowercase RFC 1123 subdomain" should be fine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants