diff --git a/cmd/kubeadm/app/cmd/init_test.go b/cmd/kubeadm/app/cmd/init_test.go index b3f12e0e014..10112726489 100644 --- a/cmd/kubeadm/app/cmd/init_test.go +++ b/cmd/kubeadm/app/cmd/init_test.go @@ -22,10 +22,16 @@ import ( "path/filepath" "testing" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" + v1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/bootstraptoken/v1" + kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" + "k8s.io/kubernetes/cmd/kubeadm/app/constants" ) var testInitConfig = fmt.Sprintf(`--- @@ -36,7 +42,7 @@ localAPIEndpoint: bootstrapTokens: - token: "abcdef.0123456789abcdef" nodeRegistration: - criSocket: /run/containerd/containerd.sock + criSocket: unix:///var/run/containerd/containerd.sock name: someName ignorePreflightErrors: - c @@ -98,9 +104,42 @@ func TestNewInitData(t *testing.T) { flags: map[string]string{ options.CfgPath: configFilePath, }, + validate: func(t *testing.T, data *initData) { + validData := &initData{ + certificatesDir: kubeadmapiv1.DefaultCertificatesDir, + kubeconfigPath: constants.GetAdminKubeConfigPath(), + kubeconfigDir: constants.KubernetesDir, + ignorePreflightErrors: sets.New("c", "d"), + cfg: &kubeadmapi.InitConfiguration{ + NodeRegistration: kubeadmapi.NodeRegistrationOptions{ + Name: "somename", + CRISocket: "unix:///var/run/containerd/containerd.sock", + IgnorePreflightErrors: []string{"c", "d"}, + ImagePullPolicy: "IfNotPresent", + }, + LocalAPIEndpoint: kubeadmapi.APIEndpoint{ + AdvertiseAddress: "1.2.3.4", + BindPort: 6443, + }, + BootstrapTokens: []v1.BootstrapToken{ + { + Token: &v1.BootstrapTokenString{ID: "abcdef", Secret: "0123456789abcdef"}, + Usages: []string{"signing", "authentication"}, + TTL: &metav1.Duration{ + Duration: constants.DefaultTokenDuration, + }, + Groups: []string{"system:bootstrappers:kubeadm:default-node-token"}, + }, + }, + }, + } + if diff := cmp.Diff(validData, data, cmp.AllowUnexported(initData{}), cmpopts.IgnoreFields(initData{}, "client", "cfg.ClusterConfiguration", "cfg.NodeRegistration.Taints")); diff != "" { + t.Fatalf("newInitData returned data (-want,+got):\n%s", diff) + } + }, }, { - name: "--cri-socket and --node-name flags override config from file", + name: "--node-name flags override config from file", flags: map[string]string{ options.CfgPath: configFilePath, options.NodeName: "anotherName", @@ -108,7 +147,7 @@ func TestNewInitData(t *testing.T) { validate: func(t *testing.T, data *initData) { // validate that node-name is overwritten if data.cfg.NodeRegistration.Name != "anotherName" { - t.Errorf("Invalid NodeRegistration.Name") + t.Error("Invalid NodeRegistration.Name") } }, }, @@ -162,9 +201,8 @@ func TestNewInitData(t *testing.T) { t.Fatalf("newInitData returned unexpected error: %v", err) } if err == nil && tc.expectError { - t.Fatalf("newInitData didn't return error when expected") + t.Fatal("newInitData didn't return error when expected") } - // exec additional validation on the returned value if tc.validate != nil { tc.validate(t, data) diff --git a/cmd/kubeadm/app/cmd/join_test.go b/cmd/kubeadm/app/cmd/join_test.go index 743e4d3aee4..4e323bb74e1 100644 --- a/cmd/kubeadm/app/cmd/join_test.go +++ b/cmd/kubeadm/app/cmd/join_test.go @@ -24,9 +24,15 @@ import ( "strings" "testing" + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog/v2" + kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig" @@ -42,7 +48,7 @@ discovery: controlPlane: certificateKey: c39a18bae4a72e71b178661f437363da218a3efb83ddb03f1cd91d9ae1da41bd nodeRegistration: - criSocket: /run/containerd/containerd.sock + criSocket: unix:///var/run/containerd/containerd.sock name: someName ignorePreflightErrors: - c @@ -104,7 +110,7 @@ func TestNewJoinData(t *testing.T) { validate: func(t *testing.T, data *joinData) { // validate that file discovery settings are set into join data if data.cfg.Discovery.File == nil || data.cfg.Discovery.File.KubeConfigPath != "https://foo" { - t.Errorf("Invalid data.cfg.Discovery.File") + t.Error("Invalid data.cfg.Discovery.File") } }, }, @@ -121,7 +127,7 @@ func TestNewJoinData(t *testing.T) { data.cfg.Discovery.BootstrapToken.APIServerEndpoint != "1.2.3.4:6443" || //only first arg should be kept as APIServerEndpoint data.cfg.Discovery.BootstrapToken.Token != "abcdef.0123456789abcdef" || data.cfg.Discovery.BootstrapToken.UnsafeSkipCAVerification != true { - t.Errorf("Invalid data.cfg.Discovery.BootstrapToken") + t.Error("Invalid data.cfg.Discovery.BootstrapToken") } }, }, @@ -137,7 +143,7 @@ func TestNewJoinData(t *testing.T) { if data.cfg.Discovery.TLSBootstrapToken != "abcdef.0123456789abcdef" || data.cfg.Discovery.BootstrapToken == nil || data.cfg.Discovery.BootstrapToken.Token != "abcdef.0123456789abcdef" { - t.Errorf("Invalid TLSBootstrapToken or BootstrapToken.Token") + t.Error("Invalid TLSBootstrapToken or BootstrapToken.Token") } }, }, @@ -155,7 +161,7 @@ func TestNewJoinData(t *testing.T) { if data.cfg.Discovery.TLSBootstrapToken != "abcdef.0123456789abcdef" || data.cfg.Discovery.BootstrapToken == nil || data.cfg.Discovery.BootstrapToken.Token != "defghi.0123456789defghi" { - t.Errorf("Invalid TLSBootstrapToken or BootstrapToken.Token") + t.Error("Invalid TLSBootstrapToken or BootstrapToken.Token") } }, }, @@ -172,7 +178,7 @@ func TestNewJoinData(t *testing.T) { if data.cfg.ControlPlane == nil || data.cfg.ControlPlane.LocalAPIEndpoint.AdvertiseAddress != "1.2.3.4" || data.cfg.ControlPlane.LocalAPIEndpoint.BindPort != 1234 { - t.Errorf("Invalid ControlPlane") + t.Error("Invalid ControlPlane") } }, }, @@ -187,7 +193,7 @@ func TestNewJoinData(t *testing.T) { validate: func(t *testing.T, data *joinData) { // validate that control plane attributes are unset in join data if data.cfg.ControlPlane != nil { - t.Errorf("Invalid ControlPlane") + t.Error("Invalid ControlPlane") } }, expectWarn: true, @@ -206,9 +212,40 @@ func TestNewJoinData(t *testing.T) { flags: map[string]string{ options.CfgPath: configFilePath, }, + validate: func(t *testing.T, data *joinData) { + validData := &joinData{ + cfg: &kubeadmapi.JoinConfiguration{ + TypeMeta: metav1.TypeMeta{Kind: "", APIVersion: ""}, + NodeRegistration: kubeadmapi.NodeRegistrationOptions{ + Name: "somename", + CRISocket: "unix:///var/run/containerd/containerd.sock", + IgnorePreflightErrors: []string{"c", "d"}, + ImagePullPolicy: "IfNotPresent", + Taints: []v1.Taint{{Key: "node-role.kubernetes.io/control-plane", Effect: "NoSchedule"}}, + }, + CACertPath: kubeadmapiv1.DefaultCACertPath, + Discovery: kubeadmapi.Discovery{ + BootstrapToken: &kubeadmapi.BootstrapTokenDiscovery{ + Token: "abcdef.0123456789abcdef", + APIServerEndpoint: "1.2.3.4:6443", + UnsafeSkipCAVerification: true, + }, + TLSBootstrapToken: "abcdef.0123456789abcdef", + Timeout: &metav1.Duration{Duration: kubeadmapiv1.DefaultDiscoveryTimeout}, + }, + ControlPlane: &kubeadmapi.JoinControlPlane{ + CertificateKey: "c39a18bae4a72e71b178661f437363da218a3efb83ddb03f1cd91d9ae1da41bd", + }, + }, + ignorePreflightErrors: sets.New("c", "d"), + } + if diff := cmp.Diff(validData, data, cmp.AllowUnexported(joinData{}), cmpopts.IgnoreFields(joinData{}, "client", "initCfg", "cfg.ControlPlane.LocalAPIEndpoint")); diff != "" { + t.Fatalf("newJoinData returned data (-want,+got):\n%s", diff) + } + }, }, { - name: "--cri-socket and --node-name flags override config from file", + name: "--node-name flags override config from file", flags: map[string]string{ options.CfgPath: configFilePath, options.NodeName: "anotherName", @@ -216,7 +253,7 @@ func TestNewJoinData(t *testing.T) { validate: func(t *testing.T, data *joinData) { // validate that node-name is overwritten if data.cfg.NodeRegistration.Name != "anotherName" { - t.Errorf("Invalid NodeRegistration.Name") + t.Error("Invalid NodeRegistration.Name") } }, }, @@ -304,7 +341,7 @@ func TestNewJoinData(t *testing.T) { t.Fatalf("newJoinData returned unexpected error: %v", err) } if err == nil && tc.expectError { - t.Fatalf("newJoinData didn't return error when expected") + t.Fatal("newJoinData didn't return error when expected") } // exec additional validation on the returned value