From 68d7b7952767c93e75b3bbd03531588769fcbd06 Mon Sep 17 00:00:00 2001 From: sivchari Date: Fri, 6 Mar 2026 17:42:24 +0900 Subject: [PATCH] kubeadm: Use go:embed for readability Migrate test fixtures to use go:embed for improved readability and maintainability across kubeadm test files. Signed-off-by: sivchari --- .../cmd/phases/reset/removeetcdmember_test.go | 33 +--- .../etcd-pod-without-data-volume.yaml | 9 ++ .../cmd/phases/reset/testdata/etcd-pod.yaml | 13 ++ .../app/cmd/testdata/token-config.yaml | 19 +++ cmd/kubeadm/app/cmd/token_test.go | 28 +--- cmd/kubeadm/app/cmd/upgrade/common_test.go | 22 +-- .../cmd/upgrade/testdata/config-token.yaml | 19 +++ .../app/discovery/token/testdata/ca-cert.pem | 17 ++ .../token/testdata/expected-kubeconfig.yaml | 14 ++ cmd/kubeadm/app/discovery/token/token_test.go | 47 ++---- cmd/kubeadm/app/util/config/cluster_test.go | 152 ++++-------------- .../testdata/kubelet-with-embedded-cert.yaml | 17 ++ .../kubelet-with-invalid-context.yaml | 17 ++ .../testdata/kubelet-with-invalid-user.yaml | 17 ++ .../testdata/kubelet-with-linked-cert.yaml | 17 ++ .../config/testdata/kubelet-without-cert.yaml | 16 ++ .../app/util/config/testdata/mynode.pem | 18 +++ .../app/util/kubeconfig/kubeconfig_test.go | 41 +---- .../app/util/kubeconfig/testdata/user1.yaml | 16 ++ .../app/util/kubeconfig/testdata/user2.yaml | 16 ++ cmd/kubeadm/app/util/marshal_test.go | 45 +++--- .../app/util/pubkeypin/pubkeypin_test.go | 54 +------ .../app/util/pubkeypin/testdata/test-cert.pem | 20 +++ .../util/pubkeypin/testdata/test-cert2.pem | 24 +++ .../testdata/invalid-with-default-fields.yaml | 13 ++ .../testdata/valid-pod-different-order.yaml | 12 ++ .../util/staticpod/testdata/valid-pod.yaml | 12 ++ .../util/staticpod/testdata/valid-pod2.yaml | 12 ++ cmd/kubeadm/app/util/staticpod/utils_test.go | 72 ++------- cmd/kubeadm/app/util/testdata/bar.yaml | 3 + cmd/kubeadm/app/util/testdata/baz.yaml | 4 + cmd/kubeadm/app/util/testdata/foo.yaml | 3 + .../app/util/testdata/noapiversion.yaml | 3 + cmd/kubeadm/app/util/testdata/nokind.yaml | 3 + 34 files changed, 434 insertions(+), 394 deletions(-) create mode 100644 cmd/kubeadm/app/cmd/phases/reset/testdata/etcd-pod-without-data-volume.yaml create mode 100644 cmd/kubeadm/app/cmd/phases/reset/testdata/etcd-pod.yaml create mode 100644 cmd/kubeadm/app/cmd/testdata/token-config.yaml create mode 100644 cmd/kubeadm/app/cmd/upgrade/testdata/config-token.yaml create mode 100644 cmd/kubeadm/app/discovery/token/testdata/ca-cert.pem create mode 100644 cmd/kubeadm/app/discovery/token/testdata/expected-kubeconfig.yaml create mode 100644 cmd/kubeadm/app/util/config/testdata/kubelet-with-embedded-cert.yaml create mode 100644 cmd/kubeadm/app/util/config/testdata/kubelet-with-invalid-context.yaml create mode 100644 cmd/kubeadm/app/util/config/testdata/kubelet-with-invalid-user.yaml create mode 100644 cmd/kubeadm/app/util/config/testdata/kubelet-with-linked-cert.yaml create mode 100644 cmd/kubeadm/app/util/config/testdata/kubelet-without-cert.yaml create mode 100644 cmd/kubeadm/app/util/config/testdata/mynode.pem create mode 100644 cmd/kubeadm/app/util/kubeconfig/testdata/user1.yaml create mode 100644 cmd/kubeadm/app/util/kubeconfig/testdata/user2.yaml create mode 100644 cmd/kubeadm/app/util/pubkeypin/testdata/test-cert.pem create mode 100644 cmd/kubeadm/app/util/pubkeypin/testdata/test-cert2.pem create mode 100644 cmd/kubeadm/app/util/staticpod/testdata/invalid-with-default-fields.yaml create mode 100644 cmd/kubeadm/app/util/staticpod/testdata/valid-pod-different-order.yaml create mode 100644 cmd/kubeadm/app/util/staticpod/testdata/valid-pod.yaml create mode 100644 cmd/kubeadm/app/util/staticpod/testdata/valid-pod2.yaml create mode 100644 cmd/kubeadm/app/util/testdata/bar.yaml create mode 100644 cmd/kubeadm/app/util/testdata/baz.yaml create mode 100644 cmd/kubeadm/app/util/testdata/foo.yaml create mode 100644 cmd/kubeadm/app/util/testdata/noapiversion.yaml create mode 100644 cmd/kubeadm/app/util/testdata/nokind.yaml diff --git a/cmd/kubeadm/app/cmd/phases/reset/removeetcdmember_test.go b/cmd/kubeadm/app/cmd/phases/reset/removeetcdmember_test.go index 49202f12b7e..de6efdd8f0c 100644 --- a/cmd/kubeadm/app/cmd/phases/reset/removeetcdmember_test.go +++ b/cmd/kubeadm/app/cmd/phases/reset/removeetcdmember_test.go @@ -17,6 +17,7 @@ limitations under the License. package phases import ( + _ "embed" "os" "path/filepath" "testing" @@ -26,34 +27,16 @@ import ( kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" ) -const ( - etcdPod = `apiVersion: v1 -kind: Pod -metadata: -spec: - volumes: - - hostPath: - path: /path/to/etcd - type: DirectoryOrCreate - name: etcd-data - - hostPath: - path: /etc/kubernetes/pki/etcd - type: DirectoryOrCreate - name: etcd-certs` +var ( + //go:embed testdata/etcd-pod.yaml + etcdPod string - etcdPodWithoutDataVolume = `apiVersion: v1 -kind: Pod -metadata: -spec: - volumes: - - hostPath: - path: /etc/kubernetes/pki/etcd - type: DirectoryOrCreate - name: etcd-certs` - - etcdPodInvalid = `invalid pod` + //go:embed testdata/etcd-pod-without-data-volume.yaml + etcdPodWithoutDataVolume string ) +const etcdPodInvalid = `invalid pod` + func TestGetEtcdDataDir(t *testing.T) { tests := map[string]struct { dataDir string diff --git a/cmd/kubeadm/app/cmd/phases/reset/testdata/etcd-pod-without-data-volume.yaml b/cmd/kubeadm/app/cmd/phases/reset/testdata/etcd-pod-without-data-volume.yaml new file mode 100644 index 00000000000..fe6d8d721b2 --- /dev/null +++ b/cmd/kubeadm/app/cmd/phases/reset/testdata/etcd-pod-without-data-volume.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Pod +metadata: +spec: + volumes: + - hostPath: + path: /etc/kubernetes/pki/etcd + type: DirectoryOrCreate + name: etcd-certs diff --git a/cmd/kubeadm/app/cmd/phases/reset/testdata/etcd-pod.yaml b/cmd/kubeadm/app/cmd/phases/reset/testdata/etcd-pod.yaml new file mode 100644 index 00000000000..f3d13aea88d --- /dev/null +++ b/cmd/kubeadm/app/cmd/phases/reset/testdata/etcd-pod.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: +spec: + volumes: + - hostPath: + path: /path/to/etcd + type: DirectoryOrCreate + name: etcd-data + - hostPath: + path: /etc/kubernetes/pki/etcd + type: DirectoryOrCreate + name: etcd-certs diff --git a/cmd/kubeadm/app/cmd/testdata/token-config.yaml b/cmd/kubeadm/app/cmd/testdata/token-config.yaml new file mode 100644 index 00000000000..b5abda9b836 --- /dev/null +++ b/cmd/kubeadm/app/cmd/testdata/token-config.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: + server: localhost:8000 + name: prod +contexts: +- context: + cluster: prod + namespace: default + user: default-service-account + name: default +current-context: default +kind: Config +users: +- name: kubernetes-admin + user: + client-certificate-data: + client-key-data: diff --git a/cmd/kubeadm/app/cmd/token_test.go b/cmd/kubeadm/app/cmd/token_test.go index b3f0a12fc09..4218648adc3 100644 --- a/cmd/kubeadm/app/cmd/token_test.go +++ b/cmd/kubeadm/app/cmd/token_test.go @@ -18,6 +18,7 @@ package cmd import ( "bytes" + _ "embed" "os" "path/filepath" "regexp" @@ -38,29 +39,10 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/util/output" ) -const ( - tokenExpectedRegex = "^\\S{6}\\.\\S{16}\n$" - testConfigToken = `apiVersion: v1 -clusters: -- cluster: - certificate-authority-data: - server: localhost:8000 - name: prod -contexts: -- context: - cluster: prod - namespace: default - user: default-service-account - name: default -current-context: default -kind: Config -users: -- name: kubernetes-admin - user: - client-certificate-data: - client-key-data: -` -) +//go:embed testdata/token-config.yaml +var testConfigToken string + +const tokenExpectedRegex = "^\\S{6}\\.\\S{16}\n$" func TestRunGenerateToken(t *testing.T) { var buf bytes.Buffer diff --git a/cmd/kubeadm/app/cmd/upgrade/common_test.go b/cmd/kubeadm/app/cmd/upgrade/common_test.go index ae9c7a2dc7f..24f3047e6ad 100644 --- a/cmd/kubeadm/app/cmd/upgrade/common_test.go +++ b/cmd/kubeadm/app/cmd/upgrade/common_test.go @@ -18,6 +18,7 @@ package upgrade import ( "bytes" + _ "embed" "fmt" "os" "path/filepath" @@ -32,25 +33,8 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/util/output" ) -const testConfigToken = `apiVersion: v1 -clusters: -- cluster: - certificate-authority-data: - server: localhost:8000 - name: prod -contexts: -- context: - cluster: prod - namespace: default - user: default-service-account - name: default -current-context: default -kind: Config -users: -- name: kubernetes-admin - user: - client-certificate-data: -` +//go:embed testdata/config-token.yaml +var testConfigToken string func TestEnforceRequirements(t *testing.T) { tmpDir := t.TempDir() diff --git a/cmd/kubeadm/app/cmd/upgrade/testdata/config-token.yaml b/cmd/kubeadm/app/cmd/upgrade/testdata/config-token.yaml new file mode 100644 index 00000000000..74a571a335d --- /dev/null +++ b/cmd/kubeadm/app/cmd/upgrade/testdata/config-token.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: + server: localhost:8000 + name: prod +contexts: +- context: + cluster: prod + namespace: default + user: default-service-account + name: default +current-context: default +kind: Config +preferences: {} +users: +- name: kubernetes-admin + user: + client-certificate-data: diff --git a/cmd/kubeadm/app/discovery/token/testdata/ca-cert.pem b/cmd/kubeadm/app/discovery/token/testdata/ca-cert.pem new file mode 100644 index 00000000000..edf1c46be71 --- /dev/null +++ b/cmd/kubeadm/app/discovery/token/testdata/ca-cert.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICyDCCAbCgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl +cm5ldGVzMB4XDTE5MTEyMDAwNDk0MloXDTI5MTExNzAwNDk0MlowFTETMBEGA1UE +AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMqQ +ctECzA8yFSuVYupOUYgrTmfQeKe/9BaDWagaq7ow9+I2IvsfWFvlrD8QQr8sea6q +xjq7TV67Vb4RxBaoYDA+yI5vIcujWUxULun64lu3Q6iC1sj2UnmUpIdgazRXXEkZ +vxA6EbAnoxA0+lBOn1CZWl23IQ4s70o2hZ7wIp/vevB88RRRjqtvgc5elsjsbmDF +LS7L1Zuye8c6gS93bR+VjVmSIfr1IEq0748tIIyXjAVCWPVCvuP41MlfPc/JVpZD +uD2+pO6ZYREcdAnOf2eD4/eLOMKko4L1dSFy9JKM5PLnOC0Zk0AYOd1vS8DTAfxj +XPEIY8OBYFhlsxf4TE8CAwEAAaMjMCEwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAH/OYq8zyl1+zSTmuow3yI/15PL1 +dl8hB7IKnZNWmC/LTdm/+noh3Sb1IdRv6HkKg/GUn0UMuRUngLhju3EO4ozJPQcX +quaxzgmTKNWJ6ErDvRvWhGX0ZcbdBfZv+dowyRqzd5nlJ49hC+NrtFFQq6P05BYn +7SemguqeXmXwIj2Sa+1DeR6lRm9o8shAYjnyThUFqaMn18kI3SANJ5vk/3DFrPEO +CKC9EzFku2kuxg2dM12PbRGZQ2o0K6HEZgrrIKTPOy3ocb8r9M0aSFhjOV/NqGA4 +SaupXSW6XfvIi/UHoIbU3pNcsnUJGnQfQvip95XKk/gqcUr+m50vxgumxtA= +-----END CERTIFICATE----- diff --git a/cmd/kubeadm/app/discovery/token/testdata/expected-kubeconfig.yaml b/cmd/kubeadm/app/discovery/token/testdata/expected-kubeconfig.yaml new file mode 100644 index 00000000000..5edfbe8dd76 --- /dev/null +++ b/cmd/kubeadm/app/discovery/token/testdata/expected-kubeconfig.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNU1URXlNREF3TkRrME1sb1hEVEk1TVRFeE56QXdORGswTWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTXFRCmN0RUN6QTh5RlN1Vll1cE9VWWdyVG1mUWVLZS85QmFEV2FnYXE3b3c5K0kySXZzZldGdmxyRDhRUXI4c2VhNnEKeGpxN1RWNjdWYjRSeEJhb1lEQSt5STV2SWN1aldVeFVMdW42NGx1M1E2aUMxc2oyVW5tVXBJZGdhelJYWEVrWgp2eEE2RWJBbm94QTArbEJPbjFDWldsMjNJUTRzNzBvMmhaN3dJcC92ZXZCODhSUlJqcXR2Z2M1ZWxzanNibURGCkxTN0wxWnV5ZThjNmdTOTNiUitWalZtU0lmcjFJRXEwNzQ4dElJeVhqQVZDV1BWQ3Z1UDQxTWxmUGMvSlZwWkQKdUQyK3BPNlpZUkVjZEFuT2YyZUQ0L2VMT01La280TDFkU0Z5OUpLTTVQTG5PQzBaazBBWU9kMXZTOERUQWZ4agpYUEVJWThPQllGaGxzeGY0VEU4Q0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIL09ZcTh6eWwxK3pTVG11b3czeUkvMTVQTDEKZGw4aEI3SUtuWk5XbUMvTFRkbS8rbm9oM1NiMUlkUnY2SGtLZy9HVW4wVU11UlVuZ0xoanUzRU80b3pKUFFjWApxdWF4emdtVEtOV0o2RXJEdlJ2V2hHWDBaY2JkQmZaditkb3d5UnF6ZDVubEo0OWhDK05ydEZGUXE2UDA1QlluCjdTZW1ndXFlWG1Yd0lqMlNhKzFEZVI2bFJtOW84c2hBWWpueVRoVUZxYU1uMThrSTNTQU5KNXZrLzNERnJQRU8KQ0tDOUV6Rmt1Mmt1eGcyZE0xMlBiUkdaUTJvMEs2SEVaZ3JySUtUUE95M29jYjhyOU0wYVNGaGpPVi9OcUdBNApTYXVwWFNXNlhmdklpL1VIb0liVTNwTmNzblVKR25RZlF2aXA5NVhLay9ncWNVcittNTB2eGd1bXh0QT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + server: https://127.0.0.1 + name: somecluster +contexts: +- context: + cluster: somecluster + user: token-bootstrap-client + name: token-bootstrap-client@somecluster +current-context: token-bootstrap-client@somecluster +kind: Config +users: null diff --git a/cmd/kubeadm/app/discovery/token/token_test.go b/cmd/kubeadm/app/discovery/token/token_test.go index a823af66ccd..82a30b001ea 100644 --- a/cmd/kubeadm/app/discovery/token/token_test.go +++ b/cmd/kubeadm/app/discovery/token/token_test.go @@ -17,6 +17,7 @@ limitations under the License. package token import ( + _ "embed" "testing" "time" @@ -34,44 +35,16 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient" ) +var ( + //go:embed testdata/ca-cert.pem + caCert string + + //go:embed testdata/expected-kubeconfig.yaml + expectedKubeconfig string +) + func TestRetrieveValidatedConfigInfo(t *testing.T) { - const ( - caCert = `-----BEGIN CERTIFICATE----- -MIICyDCCAbCgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl -cm5ldGVzMB4XDTE5MTEyMDAwNDk0MloXDTI5MTExNzAwNDk0MlowFTETMBEGA1UE -AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMqQ -ctECzA8yFSuVYupOUYgrTmfQeKe/9BaDWagaq7ow9+I2IvsfWFvlrD8QQr8sea6q -xjq7TV67Vb4RxBaoYDA+yI5vIcujWUxULun64lu3Q6iC1sj2UnmUpIdgazRXXEkZ -vxA6EbAnoxA0+lBOn1CZWl23IQ4s70o2hZ7wIp/vevB88RRRjqtvgc5elsjsbmDF -LS7L1Zuye8c6gS93bR+VjVmSIfr1IEq0748tIIyXjAVCWPVCvuP41MlfPc/JVpZD -uD2+pO6ZYREcdAnOf2eD4/eLOMKko4L1dSFy9JKM5PLnOC0Zk0AYOd1vS8DTAfxj -XPEIY8OBYFhlsxf4TE8CAwEAAaMjMCEwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAH/OYq8zyl1+zSTmuow3yI/15PL1 -dl8hB7IKnZNWmC/LTdm/+noh3Sb1IdRv6HkKg/GUn0UMuRUngLhju3EO4ozJPQcX -quaxzgmTKNWJ6ErDvRvWhGX0ZcbdBfZv+dowyRqzd5nlJ49hC+NrtFFQq6P05BYn -7SemguqeXmXwIj2Sa+1DeR6lRm9o8shAYjnyThUFqaMn18kI3SANJ5vk/3DFrPEO -CKC9EzFku2kuxg2dM12PbRGZQ2o0K6HEZgrrIKTPOy3ocb8r9M0aSFhjOV/NqGA4 -SaupXSW6XfvIi/UHoIbU3pNcsnUJGnQfQvip95XKk/gqcUr+m50vxgumxtA= ------END CERTIFICATE-----` - - caCertHash = "sha256:98be2e6d4d8a89aa308fb15de0c07e2531ce549c68dec1687cdd5c06f0826658" - - expectedKubeconfig = `apiVersion: v1 -clusters: -- cluster: - certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNU1URXlNREF3TkRrME1sb1hEVEk1TVRFeE56QXdORGswTWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTXFRCmN0RUN6QTh5RlN1Vll1cE9VWWdyVG1mUWVLZS85QmFEV2FnYXE3b3c5K0kySXZzZldGdmxyRDhRUXI4c2VhNnEKeGpxN1RWNjdWYjRSeEJhb1lEQSt5STV2SWN1aldVeFVMdW42NGx1M1E2aUMxc2oyVW5tVXBJZGdhelJYWEVrWgp2eEE2RWJBbm94QTArbEJPbjFDWldsMjNJUTRzNzBvMmhaN3dJcC92ZXZCODhSUlJqcXR2Z2M1ZWxzanNibURGCkxTN0wxWnV5ZThjNmdTOTNiUitWalZtU0lmcjFJRXEwNzQ4dElJeVhqQVZDV1BWQ3Z1UDQxTWxmUGMvSlZwWkQKdUQyK3BPNlpZUkVjZEFuT2YyZUQ0L2VMT01La280TDFkU0Z5OUpLTTVQTG5PQzBaazBBWU9kMXZTOERUQWZ4agpYUEVJWThPQllGaGxzeGY0VEU4Q0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIL09ZcTh6eWwxK3pTVG11b3czeUkvMTVQTDEKZGw4aEI3SUtuWk5XbUMvTFRkbS8rbm9oM1NiMUlkUnY2SGtLZy9HVW4wVU11UlVuZ0xoanUzRU80b3pKUFFjWApxdWF4emdtVEtOV0o2RXJEdlJ2V2hHWDBaY2JkQmZaditkb3d5UnF6ZDVubEo0OWhDK05ydEZGUXE2UDA1QlluCjdTZW1ndXFlWG1Yd0lqMlNhKzFEZVI2bFJtOW84c2hBWWpueVRoVUZxYU1uMThrSTNTQU5KNXZrLzNERnJQRU8KQ0tDOUV6Rmt1Mmt1eGcyZE0xMlBiUkdaUTJvMEs2SEVaZ3JySUtUUE95M29jYjhyOU0wYVNGaGpPVi9OcUdBNApTYXVwWFNXNlhmdklpL1VIb0liVTNwTmNzblVKR25RZlF2aXA5NVhLay9ncWNVcittNTB2eGd1bXh0QT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ== - server: https://127.0.0.1 - name: somecluster -contexts: -- context: - cluster: somecluster - user: token-bootstrap-client - name: token-bootstrap-client@somecluster -current-context: token-bootstrap-client@somecluster -kind: Config -users: null -` - ) + const caCertHash = "sha256:98be2e6d4d8a89aa308fb15de0c07e2531ce549c68dec1687cdd5c06f0826658" tests := []struct { name string diff --git a/cmd/kubeadm/app/util/config/cluster_test.go b/cmd/kubeadm/app/util/config/cluster_test.go index 94aa9917c93..14732859228 100644 --- a/cmd/kubeadm/app/util/config/cluster_test.go +++ b/cmd/kubeadm/app/util/config/cluster_test.go @@ -18,6 +18,7 @@ package config import ( "context" + _ "embed" "fmt" "os" "path/filepath" @@ -75,120 +76,25 @@ kind: KubeletConfiguration `), } -var kubeletConfFiles = map[string][]byte{ - "withoutX509Cert": []byte(` -apiVersion: v1 -clusters: -- cluster: - server: https://10.0.2.15:6443 - name: kubernetes -contexts: -- context: - cluster: kubernetes - user: system:node:mynode - name: system:node:mynode@kubernetes -current-context: system:node:mynode@kubernetes -kind: Config -users: -- name: system:node:mynode - user: -`), - "configWithEmbeddedCert": []byte(` -apiVersion: v1 -clusters: -- cluster: - server: https://10.0.2.15:6443 - name: kubernetes -contexts: -- context: - cluster: kubernetes - user: system:node:mynode - name: system:node:mynode@kubernetes -current-context: system:node:mynode@kubernetes -kind: Config -users: -- name: system:node:mynode - user: - client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJQWl3VURhYk5vZ1F3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T0RBNU1ERXhOVE14TWpaYUZ3MHhPVEE1TURFeE5qQXhOVGxhTURReApGVEFUQmdOVkJBb1RESE41YzNSbGJUcHViMlJsY3pFYk1Ca0dBMVVFQXhNU2MzbHpkR1Z0T201dlpHVTZiWGx1CmIyUmxNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWs2UXUzeStyNEZYUzZ4VkoKWU1vNE9kSkt3R1d1MHY4TEJIUnhhOUhvVHo1RXZLQnB1OVJoemt5dStUaFczb0xta2ZTRmNJcitHa0M5MW0zOApFelRmVE5JY2dsL0V5YkpmR1QvdGdUazZYd1kxY1UrUUdmSEFNNTBCVzFXTFVHc25CSllJZjA5eENnZTVoTkxLCnREeUJOWWNQZzg1bUJpOU9CNFJ2UlgyQVFRMjJwZ0xrQUpJWklOU0FEdUFrODN2b051SXM2YVY2bHBkR2Vva3YKdDlpTFdNR3p3a3ZTZUZQTlNGeWZ3Q055eENjb1FDQUNtSnJRS3NoeUE2bWNzdVhORWVXdlRQdVVFSWZPVFl4dwpxdkszRVBOK0xUYlA2anhUMWtTcFJUOSt4Z29uSlFhU0RsbUNBd20zRGJkSVppWUt3R2ppMkxKL0kvYWc0cTlzCjNLb0J2UUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFLcVVrU21jdW85OG5EK015b005VFdEV0pyTndySXpQTUNqRQpCSkdyREhVaHIwcEZlRjc0RHViODNzRXlaNjFxNUVQd2Y0enNLSzdzdDRUTzZhcE9pZWJYVmN3dnZoa09HQ2dFCmFVdGNOMjFhUGxtU0tOd0c4ai8yK3ZhbU80bGplK1NnZzRUUVB0eDZWejh5VXN2RFhxSUZycjNNd1gzSDA1RW4KWXAzN05JYkhKbGxHUW5LVHA5aTg5aXF4WXVhSERqZldiVHlEY3B5NldNVjdVaFYvY1plc3lGL0NBamNHd1V6YgowRlo5bW5tMnFONlBGWHZ4RmdMSGFWZzN2SVVCbkNmVVVyY1BDNE94VFNPK21aUmUxazh3eUFpVWovSk0rZllvCkcrMi9sbThUYVZqb1U3Rmk1S2E1RzVIWTJHTGFSN1ArSXhZY3JNSENsNjJZN1JxY3JuYz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= -`), - "configWithLinkedCert": []byte(` -apiVersion: v1 -clusters: -- cluster: - server: https://10.0.2.15:6443 - name: kubernetes -contexts: -- context: - cluster: kubernetes - user: system:node:mynode - name: system:node:mynode@kubernetes -current-context: system:node:mynode@kubernetes -kind: Config -users: -- name: system:node:mynode - user: - client-certificate: kubelet.pem -`), - "configWithInvalidContext": []byte(` -apiVersion: v1 -clusters: -- cluster: - server: https://10.0.2.15:6443 - name: kubernetes -contexts: -- context: - cluster: kubernetes - user: system:node:mynode - name: system:node:mynode@kubernetes -current-context: invalidContext -kind: Config -users: -- name: system:node:mynode - user: - client-certificate: kubelet.pem -`), - "configWithInvalidUser": []byte(` -apiVersion: v1 -clusters: -- cluster: - server: https://10.0.2.15:6443 - name: kubernetes -contexts: -- context: - cluster: kubernetes - user: invalidUser - name: system:node:mynode@kubernetes -current-context: system:node:mynode@kubernetes -kind: Config -users: -- name: system:node:mynode - user: - client-certificate: kubelet.pem -`), -} +var ( + //go:embed testdata/kubelet-without-cert.yaml + configWithoutCert []byte -var pemFiles = map[string][]byte{ - "mynode.pem": []byte(` ------BEGIN CERTIFICATE----- -MIIC8jCCAdqgAwIBAgIIAiwUDabNogQwDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE -AxMKa3ViZXJuZXRlczAeFw0xODA5MDExNTMxMjZaFw0xOTA5MDExNjAxNTlaMDQx -FTATBgNVBAoTDHN5c3RlbTpub2RlczEbMBkGA1UEAxMSc3lzdGVtOm5vZGU6bXlu -b2RlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk6Qu3y+r4FXS6xVJ -YMo4OdJKwGWu0v8LBHRxa9HoTz5EvKBpu9Rhzkyu+ThW3oLmkfSFcIr+GkC91m38 -EzTfTNIcgl/EybJfGT/tgTk6XwY1cU+QGfHAM50BW1WLUGsnBJYIf09xCge5hNLK -tDyBNYcPg85mBi9OB4RvRX2AQQ22pgLkAJIZINSADuAk83voNuIs6aV6lpdGeokv -t9iLWMGzwkvSeFPNSFyfwCNyxCcoQCACmJrQKshyA6mcsuXNEeWvTPuUEIfOTYxw -qvK3EPN+LTbP6jxT1kSpRT9+xgonJQaSDlmCAwm3DbdIZiYKwGji2LJ/I/ag4q9s -3KoBvQIDAQABoycwJTAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUH -AwIwDQYJKoZIhvcNAQELBQADggEBAKqUkSmcuo98nD+MyoM9TWDWJrNwrIzPMCjE -BJGrDHUhr0pFeF74Dub83sEyZ61q5EPwf4zsKK7st4TO6apOiebXVcwvvhkOGCgE -aUtcN21aPlmSKNwG8j/2+vamO4lje+Sgg4TQPtx6Vz8yUsvDXqIFrr3MwX3H05En -Yp37NIbHJllGQnKTp9i89iqxYuaHDjfWbTyDcpy6WMV7UhV/cZesyF/CAjcGwUzb -0FZ9mnm2qN6PFXvxFgLHaVg3vIUBnCfUUrcPC4OxTSO+mZRe1k8wyAiUj/JM+fYo -G+2/lm8TaVjoU7Fi5Ka5G5HY2GLaR7P+IxYcrMHCl62Y7Rqcrnc= ------END CERTIFICATE----- -`), -} + //go:embed testdata/kubelet-with-embedded-cert.yaml + configWithEmbeddedCert []byte + + //go:embed testdata/kubelet-with-linked-cert.yaml + configWithLinkedCert []byte + + //go:embed testdata/kubelet-with-invalid-context.yaml + configWithInvalidContext []byte + + //go:embed testdata/kubelet-with-invalid-user.yaml + configWithInvalidUser []byte +) + +//go:embed testdata/mynode.pem +var mynodePem []byte func TestGetNodeNameFromKubeletConfig(t *testing.T) { tmpdir, err := os.MkdirTemp("", "") @@ -205,31 +111,31 @@ func TestGetNodeNameFromKubeletConfig(t *testing.T) { }{ { name: "valid - with embedded cert", - kubeconfigContent: kubeletConfFiles["configWithEmbeddedCert"], + kubeconfigContent: configWithEmbeddedCert, }, { name: "invalid - linked cert missing", - kubeconfigContent: kubeletConfFiles["configWithLinkedCert"], + kubeconfigContent: configWithLinkedCert, expectedError: true, }, { name: "valid - with linked cert", - kubeconfigContent: kubeletConfFiles["configWithLinkedCert"], - pemContent: pemFiles["mynode.pem"], + kubeconfigContent: configWithLinkedCert, + pemContent: mynodePem, }, { name: "invalid - without embedded or linked X509Cert", - kubeconfigContent: kubeletConfFiles["withoutX509Cert"], + kubeconfigContent: configWithoutCert, expectedError: true, }, { name: "invalid - the current context is invalid", - kubeconfigContent: kubeletConfFiles["configWithInvalidContext"], + kubeconfigContent: configWithInvalidContext, expectedError: true, }, { name: "invalid - the user of the current context is invalid", - kubeconfigContent: kubeletConfFiles["configWithInvalidUser"], + kubeconfigContent: configWithInvalidUser, expectedError: true, }, } @@ -288,7 +194,7 @@ func TestGetNodeRegistration(t *testing.T) { }, { name: "valid", - fileContents: kubeletConfFiles["configWithEmbeddedCert"], + fileContents: configWithEmbeddedCert, node: &v1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: nodeName, @@ -303,7 +209,7 @@ func TestGetNodeRegistration(t *testing.T) { }, { name: "invalid - no node", - fileContents: kubeletConfFiles["configWithEmbeddedCert"], + fileContents: configWithEmbeddedCert, expectedError: true, }, } @@ -544,7 +450,7 @@ func TestGetInitConfigurationFromCluster(t *testing.T) { }, }, }, - fileContents: kubeletConfFiles["configWithEmbeddedCert"], + fileContents: configWithEmbeddedCert, node: &v1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: nodeName, diff --git a/cmd/kubeadm/app/util/config/testdata/kubelet-with-embedded-cert.yaml b/cmd/kubeadm/app/util/config/testdata/kubelet-with-embedded-cert.yaml new file mode 100644 index 00000000000..9d18497a889 --- /dev/null +++ b/cmd/kubeadm/app/util/config/testdata/kubelet-with-embedded-cert.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +clusters: +- cluster: + server: https://10.0.2.15:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: system:node:mynode + name: system:node:mynode@kubernetes +current-context: system:node:mynode@kubernetes +kind: Config +preferences: {} +users: +- name: system:node:mynode + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJQWl3VURhYk5vZ1F3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T0RBNU1ERXhOVE14TWpaYUZ3MHhPVEE1TURFeE5qQXhOVGxhTURReApGVEFUQmdOVkJBb1RESE41YzNSbGJUcHViMlJsY3pFYk1Ca0dBMVVFQXhNU2MzbHpkR1Z0T201dlpHVTZiWGx1CmIyUmxNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWs2UXUzeStyNEZYUzZ4VkoKWU1vNE9kSkt3R1d1MHY4TEJIUnhhOUhvVHo1RXZLQnB1OVJoemt5dStUaFczb0xta2ZTRmNJcitHa0M5MW0zOApFelRmVE5JY2dsL0V5YkpmR1QvdGdUazZYd1kxY1UrUUdmSEFNNTBCVzFXTFVHc25CSllJZjA5eENnZTVoTkxLCnREeUJOWWNQZzg1bUJpOU9CNFJ2UlgyQVFRMjJwZ0xrQUpJWklOU0FEdUFrODN2b051SXM2YVY2bHBkR2Vva3YKdDlpTFdNR3p3a3ZTZUZQTlNGeWZ3Q055eENjb1FDQUNtSnJRS3NoeUE2bWNzdVhORWVXdlRQdVVFSWZPVFl4dwpxdkszRVBOK0xUYlA2anhUMWtTcFJUOSt4Z29uSlFhU0RsbUNBd20zRGJkSVppWUt3R2ppMkxKL0kvYWc0cTlzCjNLb0J2UUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFLcVVrU21jdW85OG5EK015b005VFdEV0pyTndySXpQTUNqRQpCSkdyREhVaHIwcEZlRjc0RHViODNzRXlaNjFxNUVQd2Y0enNLSzdzdDRUTzZhcE9pZWJYVmN3dnZoa09HQ2dFCmFVdGNOMjFhUGxtU0tOd0c4ai8yK3ZhbU80bGplK1NnZzRUUVB0eDZWejh5VXN2RFhxSUZycjNNd1gzSDA1RW4KWXAzN05JYkhKbGxHUW5LVHA5aTg5aXF4WXVhSERqZldiVHlEY3B5NldNVjdVaFYvY1plc3lGL0NBamNHd1V6YgowRlo5bW5tMnFONlBGWHZ4RmdMSGFWZzN2SVVCbkNmVVVyY1BDNE94VFNPK21aUmUxazh3eUFpVWovSk0rZllvCkcrMi9sbThUYVZqb1U3Rmk1S2E1RzVIWTJHTGFSN1ArSXhZY3JNSENsNjJZN1JxY3JuYz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= diff --git a/cmd/kubeadm/app/util/config/testdata/kubelet-with-invalid-context.yaml b/cmd/kubeadm/app/util/config/testdata/kubelet-with-invalid-context.yaml new file mode 100644 index 00000000000..29fb2c8e25b --- /dev/null +++ b/cmd/kubeadm/app/util/config/testdata/kubelet-with-invalid-context.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +clusters: +- cluster: + server: https://10.0.2.15:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: system:node:mynode + name: system:node:mynode@kubernetes +current-context: invalidContext +kind: Config +preferences: {} +users: +- name: system:node:mynode + user: + client-certificate: kubelet.pem diff --git a/cmd/kubeadm/app/util/config/testdata/kubelet-with-invalid-user.yaml b/cmd/kubeadm/app/util/config/testdata/kubelet-with-invalid-user.yaml new file mode 100644 index 00000000000..5ee4186433d --- /dev/null +++ b/cmd/kubeadm/app/util/config/testdata/kubelet-with-invalid-user.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +clusters: +- cluster: + server: https://10.0.2.15:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: invalidUser + name: system:node:mynode@kubernetes +current-context: system:node:mynode@kubernetes +kind: Config +preferences: {} +users: +- name: system:node:mynode + user: + client-certificate: kubelet.pem diff --git a/cmd/kubeadm/app/util/config/testdata/kubelet-with-linked-cert.yaml b/cmd/kubeadm/app/util/config/testdata/kubelet-with-linked-cert.yaml new file mode 100644 index 00000000000..40b67368fdb --- /dev/null +++ b/cmd/kubeadm/app/util/config/testdata/kubelet-with-linked-cert.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +clusters: +- cluster: + server: https://10.0.2.15:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: system:node:mynode + name: system:node:mynode@kubernetes +current-context: system:node:mynode@kubernetes +kind: Config +preferences: {} +users: +- name: system:node:mynode + user: + client-certificate: kubelet.pem diff --git a/cmd/kubeadm/app/util/config/testdata/kubelet-without-cert.yaml b/cmd/kubeadm/app/util/config/testdata/kubelet-without-cert.yaml new file mode 100644 index 00000000000..30cddb9999b --- /dev/null +++ b/cmd/kubeadm/app/util/config/testdata/kubelet-without-cert.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +clusters: +- cluster: + server: https://10.0.2.15:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: system:node:mynode + name: system:node:mynode@kubernetes +current-context: system:node:mynode@kubernetes +kind: Config +preferences: {} +users: +- name: system:node:mynode + user: diff --git a/cmd/kubeadm/app/util/config/testdata/mynode.pem b/cmd/kubeadm/app/util/config/testdata/mynode.pem new file mode 100644 index 00000000000..cca527ef3c4 --- /dev/null +++ b/cmd/kubeadm/app/util/config/testdata/mynode.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC8jCCAdqgAwIBAgIIAiwUDabNogQwDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE +AxMKa3ViZXJuZXRlczAeFw0xODA5MDExNTMxMjZaFw0xOTA5MDExNjAxNTlaMDQx +FTATBgNVBAoTDHN5c3RlbTpub2RlczEbMBkGA1UEAxMSc3lzdGVtOm5vZGU6bXlu +b2RlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk6Qu3y+r4FXS6xVJ +YMo4OdJKwGWu0v8LBHRxa9HoTz5EvKBpu9Rhzkyu+ThW3oLmkfSFcIr+GkC91m38 +EzTfTNIcgl/EybJfGT/tgTk6XwY1cU+QGfHAM50BW1WLUGsnBJYIf09xCge5hNLK +tDyBNYcPg85mBi9OB4RvRX2AQQ22pgLkAJIZINSADuAk83voNuIs6aV6lpdGeokv +t9iLWMGzwkvSeFPNSFyfwCNyxCcoQCACmJrQKshyA6mcsuXNEeWvTPuUEIfOTYxw +qvK3EPN+LTbP6jxT1kSpRT9+xgonJQaSDlmCAwm3DbdIZiYKwGji2LJ/I/ag4q9s +3KoBvQIDAQABoycwJTAOBgNVHQ8BAf8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUH +AwIwDQYJKoZIhvcNAQELBQADggEBAKqUkSmcuo98nD+MyoM9TWDWJrNwrIzPMCjE +BJGrDHUhr0pFeF74Dub83sEyZ61q5EPwf4zsKK7st4TO6apOiebXVcwvvhkOGCgE +aUtcN21aPlmSKNwG8j/2+vamO4lje+Sgg4TQPtx6Vz8yUsvDXqIFrr3MwX3H05En +Yp37NIbHJllGQnKTp9i89iqxYuaHDjfWbTyDcpy6WMV7UhV/cZesyF/CAjcGwUzb +0FZ9mnm2qN6PFXvxFgLHaVg3vIUBnCfUUrcPC4OxTSO+mZRe1k8wyAiUj/JM+fYo +G+2/lm8TaVjoU7Fi5Ka5G5HY2GLaR7P+IxYcrMHCl62Y7Rqcrnc= +-----END CERTIFICATE----- diff --git a/cmd/kubeadm/app/util/kubeconfig/kubeconfig_test.go b/cmd/kubeadm/app/util/kubeconfig/kubeconfig_test.go index 45934874b87..245dc39740c 100644 --- a/cmd/kubeadm/app/util/kubeconfig/kubeconfig_test.go +++ b/cmd/kubeadm/app/util/kubeconfig/kubeconfig_test.go @@ -18,6 +18,7 @@ package kubeconfig import ( "bytes" + _ "embed" "fmt" "os" "reflect" @@ -26,41 +27,11 @@ import ( clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) -const ( - configOut1 = `apiVersion: v1 -clusters: -- cluster: - server: "" - name: k8s -contexts: -- context: - cluster: k8s - user: user1 - name: user1@k8s -current-context: user1@k8s -kind: Config -users: -- name: user1 - user: - token: abc -` - configOut2 = `apiVersion: v1 -clusters: -- cluster: - server: localhost:8080 - name: kubernetes -contexts: -- context: - cluster: kubernetes - user: user2 - name: user2@kubernetes -current-context: user2@kubernetes -kind: Config -users: -- name: user2 - user: - token: cba -` +var ( + //go:embed testdata/user1.yaml + configOut1 string + //go:embed testdata/user2.yaml + configOut2 string ) type configClient struct { diff --git a/cmd/kubeadm/app/util/kubeconfig/testdata/user1.yaml b/cmd/kubeadm/app/util/kubeconfig/testdata/user1.yaml new file mode 100644 index 00000000000..f0b1ca0da44 --- /dev/null +++ b/cmd/kubeadm/app/util/kubeconfig/testdata/user1.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +clusters: +- cluster: + server: "" + name: k8s +contexts: +- context: + cluster: k8s + user: user1 + name: user1@k8s +current-context: user1@k8s +kind: Config +users: +- name: user1 + user: + token: abc diff --git a/cmd/kubeadm/app/util/kubeconfig/testdata/user2.yaml b/cmd/kubeadm/app/util/kubeconfig/testdata/user2.yaml new file mode 100644 index 00000000000..d4086e8ea4d --- /dev/null +++ b/cmd/kubeadm/app/util/kubeconfig/testdata/user2.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +clusters: +- cluster: + server: localhost:8080 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: user2 + name: user2@kubernetes +current-context: user2@kubernetes +kind: Config +users: +- name: user2 + user: + token: cba diff --git a/cmd/kubeadm/app/util/marshal_test.go b/cmd/kubeadm/app/util/marshal_test.go index 246d22ba482..44b67188c4f 100644 --- a/cmd/kubeadm/app/util/marshal_test.go +++ b/cmd/kubeadm/app/util/marshal_test.go @@ -18,6 +18,7 @@ package util import ( "bytes" + _ "embed" "reflect" "sort" "testing" @@ -30,33 +31,25 @@ import ( "k8s.io/kubernetes/cmd/kubeadm/app/constants" ) +var ( + //go:embed testdata/foo.yaml + fooYAML []byte + //go:embed testdata/bar.yaml + barYAML []byte + //go:embed testdata/baz.yaml + bazYAML []byte + //go:embed testdata/nokind.yaml + nokindYAML []byte + //go:embed testdata/noapiversion.yaml + noapiversionYAML []byte +) + var files = map[string][]byte{ - "foo": []byte(` -kind: Foo -apiVersion: foo.k8s.io/v1 -fooField: foo -`), - "bar": []byte(` -apiVersion: bar.k8s.io/v2 -barField: bar -kind: Bar -`), - "baz": []byte(` -apiVersion: baz.k8s.io/v1 -kind: Baz -baz: - foo: bar -`), - "nokind": []byte(` -apiVersion: baz.k8s.io/v1 -foo: foo -bar: bar -`), - "noapiversion": []byte(` -kind: Bar -foo: foo -bar: bar -`), + "foo": fooYAML, + "bar": barYAML, + "baz": bazYAML, + "nokind": nokindYAML, + "noapiversion": noapiversionYAML, } func TestMarshalUnmarshalYaml(t *testing.T) { diff --git a/cmd/kubeadm/app/util/pubkeypin/pubkeypin_test.go b/cmd/kubeadm/app/util/pubkeypin/pubkeypin_test.go index af726ea9bc5..4ee464f1a08 100644 --- a/cmd/kubeadm/app/util/pubkeypin/pubkeypin_test.go +++ b/cmd/kubeadm/app/util/pubkeypin/pubkeypin_test.go @@ -18,6 +18,7 @@ package pubkeypin import ( "crypto/x509" + _ "embed" "encoding/pem" "strings" "testing" @@ -25,58 +26,17 @@ import ( // testCertPEM is a simple self-signed test certificate issued with the openssl CLI: // openssl req -new -newkey rsa:2048 -days 36500 -nodes -x509 -keyout /dev/null -out test.crt -const testCertPEM = ` ------BEGIN CERTIFICATE----- -MIIDRDCCAiygAwIBAgIJAJgVaCXvC6HkMA0GCSqGSIb3DQEBBQUAMB8xHTAbBgNV -BAMTFGt1YmVhZG0ta2V5cGlucy10ZXN0MCAXDTE3MDcwNTE3NDMxMFoYDzIxMTcw -NjExMTc0MzEwWjAfMR0wGwYDVQQDExRrdWJlYWRtLWtleXBpbnMtdGVzdDCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK0ba8mHU9UtYlzM1Own2Fk/XGjR -J4uJQvSeGLtz1hID1IA0dLwruvgLCPadXEOw/f/IWIWcmT+ZmvIHZKa/woq2iHi5 -+HLhXs7aG4tjKGLYhag1hLjBI7icqV7ovkjdGAt9pWkxEzhIYClFMXDjKpMSynu+ -YX6nZ9tic1cOkHmx2yiZdMkuriRQnpTOa7bb03OC1VfGl7gHlOAIYaj4539WCOr8 -+ACTUMJUFEHcRZ2o8a/v6F9GMK+7SC8SJUI+GuroXqlMAdhEv4lX5Co52enYaClN -+D9FJLRpBv2YfiCQdJRaiTvCBSxEFz6BN+PtP5l2Hs703ZWEkOqCByM6HV8CAwEA -AaOBgDB+MB0GA1UdDgQWBBRQgUX8MhK2rWBWQiPHWcKzoWDH5DBPBgNVHSMESDBG -gBRQgUX8MhK2rWBWQiPHWcKzoWDH5KEjpCEwHzEdMBsGA1UEAxMUa3ViZWFkbS1r -ZXlwaW5zLXRlc3SCCQCYFWgl7wuh5DAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB -BQUAA4IBAQCaAUif7Pfx3X0F08cxhx8/Hdx4jcJw6MCq6iq6rsXM32ge43t8OHKC -pJW08dk58a3O1YQSMMvD6GJDAiAfXzfwcwY6j258b1ZlI9Ag0VokvhMl/XfdCsdh -AWImnL1t4hvU5jLaImUUMlYxMcSfHBGAm7WJIZ2LdEfg6YWfZh+WGbg1W7uxLxk6 -y4h5rWdNnzBHWAGf7zJ0oEDV6W6RSwNXtC0JNnLaeIUm/6xdSddJlQPwUv8YH4jX -c1vuFqTnJBPcb7W//R/GI2Paicm1cmns9NLnPR35exHxFTy+D1yxmGokpoPMdife -aH+sfuxT8xeTPb3kjzF9eJTlnEquUDLM ------END CERTIFICATE-----` +// +//go:embed testdata/test-cert.pem +var testCertPEM string // expectedHash can be verified using the openssl CLI. const expectedHash = `sha256:345959acb2c3b2feb87d281961c893f62a314207ef02599f1cc4a5fb255480b3` // testCert2PEM is a second test cert generated the same way as testCertPEM -const testCert2PEM = ` ------BEGIN CERTIFICATE----- -MIID9jCCAt6gAwIBAgIJAN5MXZDic7qYMA0GCSqGSIb3DQEBBQUAMFkxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCXRlc3RDZXJ0MjAgFw0xNzA3MjQxNjA0 -MDFaGA8yMTE3MDYzMDE2MDQwMVowWTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNv -bWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAG -A1UEAxMJdGVzdENlcnQyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -0brwpJYN2ytPWzRBtZSVc3dhkQlA59AzxzqeLLkano0Pxo9NIc3T/y58nnRI8uaS -I1P7BzUfJTiUEvmAtX8NggqKK4ld/gPrU+IRww1CUYS4KCkA/0d0ctPy0JwBCjD+ -b57G3rmNE8c+0jns6J96ZzNtqmv6N+ZlFBAXm1p4S+k0kGi5+hoQ6H7SYXjk2lG+ -r/8jPQEjy/NSdw1dcCA0Nc6o+hPr32927dS6J9KOhBeXNYUNdbuDDmroM9/gN2e/ -YMSA1olLeDPQ7Xvhk0PIyEDnHh83AffPCx5yM3htVRGddjIsPAVUJEL3z5leJtxe -fzyPghOhHJY0PXqznDQTcwIDAQABo4G+MIG7MB0GA1UdDgQWBBRP0IJqv/5rQ4Uf -SByl77dJeEapRDCBiwYDVR0jBIGDMIGAgBRP0IJqv/5rQ4UfSByl77dJeEapRKFd -pFswWTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoT -GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAGA1UEAxMJdGVzdENlcnQyggkA -3kxdkOJzupgwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA0RIMHc10 -wHHPMh9UflqBgDMF7gfbOL0juJfGloAOcohWWfMZBBJ0CQKMy3xRyoK3HmbW1eeb -iATjesw7t4VEAwf7mgKAd+eTfWYB952uq5qYJ2TI28mSofEq1Wz3RmrNkC1KCBs1 -u+YMFGwyl6necV9zKCeiju4jeovI1GA38TvH7MgYln6vMJ+FbgOXj7XCpek7dQiY -KGaeSSH218mGNQaWRQw2Sm3W6cFdANoCJUph4w18s7gjtFpfV63s80hXRps+vEyv -jEQMEQpG8Ss7HGJLGLBw/xAmG0e//XS/o2dDonbGbvzToFByz8OGxjMhk6yV6hdd -+iyvsLAw/MYMSA== ------END CERTIFICATE----- -` +// +//go:embed testdata/test-cert2.pem +var testCert2PEM string // testCert is a small helper to get a test x509.Certificate from the PEM constants func testCert(t *testing.T, pemString string) *x509.Certificate { diff --git a/cmd/kubeadm/app/util/pubkeypin/testdata/test-cert.pem b/cmd/kubeadm/app/util/pubkeypin/testdata/test-cert.pem new file mode 100644 index 00000000000..b6067ca8fa3 --- /dev/null +++ b/cmd/kubeadm/app/util/pubkeypin/testdata/test-cert.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDRDCCAiygAwIBAgIJAJgVaCXvC6HkMA0GCSqGSIb3DQEBBQUAMB8xHTAbBgNV +BAMTFGt1YmVhZG0ta2V5cGlucy10ZXN0MCAXDTE3MDcwNTE3NDMxMFoYDzIxMTcw +NjExMTc0MzEwWjAfMR0wGwYDVQQDExRrdWJlYWRtLWtleXBpbnMtdGVzdDCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK0ba8mHU9UtYlzM1Own2Fk/XGjR +J4uJQvSeGLtz1hID1IA0dLwruvgLCPadXEOw/f/IWIWcmT+ZmvIHZKa/woq2iHi5 ++HLhXs7aG4tjKGLYhag1hLjBI7icqV7ovkjdGAt9pWkxEzhIYClFMXDjKpMSynu+ +YX6nZ9tic1cOkHmx2yiZdMkuriRQnpTOa7bb03OC1VfGl7gHlOAIYaj4539WCOr8 ++ACTUMJUFEHcRZ2o8a/v6F9GMK+7SC8SJUI+GuroXqlMAdhEv4lX5Co52enYaClN ++D9FJLRpBv2YfiCQdJRaiTvCBSxEFz6BN+PtP5l2Hs703ZWEkOqCByM6HV8CAwEA +AaOBgDB+MB0GA1UdDgQWBBRQgUX8MhK2rWBWQiPHWcKzoWDH5DBPBgNVHSMESDBG +gBRQgUX8MhK2rWBWQiPHWcKzoWDH5KEjpCEwHzEdMBsGA1UEAxMUa3ViZWFkbS1r +ZXlwaW5zLXRlc3SCCQCYFWgl7wuh5DAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB +BQUAA4IBAQCaAUif7Pfx3X0F08cxhx8/Hdx4jcJw6MCq6iq6rsXM32ge43t8OHKC +pJW08dk58a3O1YQSMMvD6GJDAiAfXzfwcwY6j258b1ZlI9Ag0VokvhMl/XfdCsdh +AWImnL1t4hvU5jLaImUUMlYxMcSfHBGAm7WJIZ2LdEfg6YWfZh+WGbg1W7uxLxk6 +y4h5rWdNnzBHWAGf7zJ0oEDV6W6RSwNXtC0JNnLaeIUm/6xdSddJlQPwUv8YH4jX +c1vuFqTnJBPcb7W//R/GI2Paicm1cmns9NLnPR35exHxFTy+D1yxmGokpoPMdife +aH+sfuxT8xeTPb3kjzF9eJTlnEquUDLM +-----END CERTIFICATE----- diff --git a/cmd/kubeadm/app/util/pubkeypin/testdata/test-cert2.pem b/cmd/kubeadm/app/util/pubkeypin/testdata/test-cert2.pem new file mode 100644 index 00000000000..67c01eaaa86 --- /dev/null +++ b/cmd/kubeadm/app/util/pubkeypin/testdata/test-cert2.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIID9jCCAt6gAwIBAgIJAN5MXZDic7qYMA0GCSqGSIb3DQEBBQUAMFkxCzAJBgNV +BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX +aWRnaXRzIFB0eSBMdGQxEjAQBgNVBAMTCXRlc3RDZXJ0MjAgFw0xNzA3MjQxNjA0 +MDFaGA8yMTE3MDYzMDE2MDQwMVowWTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNv +bWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAG +A1UEAxMJdGVzdENlcnQyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +0brwpJYN2ytPWzRBtZSVc3dhkQlA59AzxzqeLLkano0Pxo9NIc3T/y58nnRI8uaS +I1P7BzUfJTiUEvmAtX8NggqKK4ld/gPrU+IRww1CUYS4KCkA/0d0ctPy0JwBCjD+ +b57G3rmNE8c+0jns6J96ZzNtqmv6N+ZlFBAXm1p4S+k0kGi5+hoQ6H7SYXjk2lG+ +r/8jPQEjy/NSdw1dcCA0Nc6o+hPr32927dS6J9KOhBeXNYUNdbuDDmroM9/gN2e/ +YMSA1olLeDPQ7Xvhk0PIyEDnHh83AffPCx5yM3htVRGddjIsPAVUJEL3z5leJtxe +fzyPghOhHJY0PXqznDQTcwIDAQABo4G+MIG7MB0GA1UdDgQWBBRP0IJqv/5rQ4Uf +SByl77dJeEapRDCBiwYDVR0jBIGDMIGAgBRP0IJqv/5rQ4UfSByl77dJeEapRKFd +pFswWTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoT +GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDESMBAGA1UEAxMJdGVzdENlcnQyggkA +3kxdkOJzupgwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA0RIMHc10 +wHHPMh9UflqBgDMF7gfbOL0juJfGloAOcohWWfMZBBJ0CQKMy3xRyoK3HmbW1eeb +iATjesw7t4VEAwf7mgKAd+eTfWYB952uq5qYJ2TI28mSofEq1Wz3RmrNkC1KCBs1 +u+YMFGwyl6necV9zKCeiju4jeovI1GA38TvH7MgYln6vMJ+FbgOXj7XCpek7dQiY +KGaeSSH218mGNQaWRQw2Sm3W6cFdANoCJUph4w18s7gjtFpfV63s80hXRps+vEyv +jEQMEQpG8Ss7HGJLGLBw/xAmG0e//XS/o2dDonbGbvzToFByz8OGxjMhk6yV6hdd ++iyvsLAw/MYMSA== +-----END CERTIFICATE----- diff --git a/cmd/kubeadm/app/util/staticpod/testdata/invalid-with-default-fields.yaml b/cmd/kubeadm/app/util/staticpod/testdata/invalid-with-default-fields.yaml new file mode 100644 index 00000000000..85b3e7600cc --- /dev/null +++ b/cmd/kubeadm/app/util/staticpod/testdata/invalid-with-default-fields.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + tier: control-plane + component: etcd + name: etcd + namespace: kube-system +spec: + containers: + - image: gcr.io/google_containers/etcd-amd64:3.1.11 + restartPolicy: "Always" +status: {} diff --git a/cmd/kubeadm/app/util/staticpod/testdata/valid-pod-different-order.yaml b/cmd/kubeadm/app/util/staticpod/testdata/valid-pod-different-order.yaml new file mode 100644 index 00000000000..17ac23653b0 --- /dev/null +++ b/cmd/kubeadm/app/util/staticpod/testdata/valid-pod-different-order.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + tier: control-plane + component: etcd + name: etcd + namespace: kube-system +spec: + containers: + - image: gcr.io/google_containers/etcd-amd64:3.1.11 +status: {} diff --git a/cmd/kubeadm/app/util/staticpod/testdata/valid-pod.yaml b/cmd/kubeadm/app/util/staticpod/testdata/valid-pod.yaml new file mode 100644 index 00000000000..8f995cdc7cc --- /dev/null +++ b/cmd/kubeadm/app/util/staticpod/testdata/valid-pod.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + component: etcd + tier: control-plane + name: etcd + namespace: kube-system +spec: + containers: + - image: gcr.io/google_containers/etcd-amd64:3.1.11 +status: {} diff --git a/cmd/kubeadm/app/util/staticpod/testdata/valid-pod2.yaml b/cmd/kubeadm/app/util/staticpod/testdata/valid-pod2.yaml new file mode 100644 index 00000000000..8a4b7e9e395 --- /dev/null +++ b/cmd/kubeadm/app/util/staticpod/testdata/valid-pod2.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + component: etcd + tier: control-plane + name: etcd + namespace: kube-system +spec: + containers: + - image: gcr.io/google_containers/etcd-amd64:3.1.12 +status: {} diff --git a/cmd/kubeadm/app/util/staticpod/utils_test.go b/cmd/kubeadm/app/util/staticpod/utils_test.go index 65809fcd55f..c4c69f3646c 100644 --- a/cmd/kubeadm/app/util/staticpod/utils_test.go +++ b/cmd/kubeadm/app/util/staticpod/utils_test.go @@ -17,6 +17,7 @@ limitations under the License. package staticpod import ( + _ "embed" "io" "os" "path/filepath" @@ -578,69 +579,22 @@ func TestVolumeMountMapToSlice(t *testing.T) { } } -const ( - validPod = ` -apiVersion: v1 -kind: Pod -metadata: - labels: - component: etcd - tier: control-plane - name: etcd - namespace: kube-system -spec: - containers: - - image: gcr.io/google_containers/etcd-amd64:3.1.11 -status: {} -` - validPodWithDifferentFieldsOrder = ` -apiVersion: v1 -kind: Pod -metadata: - labels: - tier: control-plane - component: etcd - name: etcd - namespace: kube-system -spec: - containers: - - image: gcr.io/google_containers/etcd-amd64:3.1.11 -status: {} -` - invalidWithDefaultFields = ` -apiVersion: v1 -kind: Pod -metadata: - labels: - tier: control-plane - component: etcd - name: etcd - namespace: kube-system -spec: - containers: - - image: gcr.io/google_containers/etcd-amd64:3.1.11 - restartPolicy: "Always" -status: {} -` +var ( + //go:embed testdata/valid-pod.yaml + validPod string - validPod2 = ` -apiVersion: v1 -kind: Pod -metadata: - labels: - component: etcd - tier: control-plane - name: etcd - namespace: kube-system -spec: - containers: - - image: gcr.io/google_containers/etcd-amd64:3.1.12 -status: {} -` + //go:embed testdata/valid-pod-different-order.yaml + validPodWithDifferentFieldsOrder string - invalidPod = `---{ broken yaml @@@` + //go:embed testdata/invalid-with-default-fields.yaml + invalidWithDefaultFields string + + //go:embed testdata/valid-pod2.yaml + validPod2 string ) +const invalidPod = `---{ broken yaml @@@` + func TestReadStaticPodFromDisk(t *testing.T) { tests := []struct { description string diff --git a/cmd/kubeadm/app/util/testdata/bar.yaml b/cmd/kubeadm/app/util/testdata/bar.yaml new file mode 100644 index 00000000000..33dd8ac972f --- /dev/null +++ b/cmd/kubeadm/app/util/testdata/bar.yaml @@ -0,0 +1,3 @@ +apiVersion: bar.k8s.io/v2 +barField: bar +kind: Bar diff --git a/cmd/kubeadm/app/util/testdata/baz.yaml b/cmd/kubeadm/app/util/testdata/baz.yaml new file mode 100644 index 00000000000..7d2e71fe82b --- /dev/null +++ b/cmd/kubeadm/app/util/testdata/baz.yaml @@ -0,0 +1,4 @@ +apiVersion: baz.k8s.io/v1 +kind: Baz +baz: + foo: bar diff --git a/cmd/kubeadm/app/util/testdata/foo.yaml b/cmd/kubeadm/app/util/testdata/foo.yaml new file mode 100644 index 00000000000..5f496a60ce8 --- /dev/null +++ b/cmd/kubeadm/app/util/testdata/foo.yaml @@ -0,0 +1,3 @@ +kind: Foo +apiVersion: foo.k8s.io/v1 +fooField: foo diff --git a/cmd/kubeadm/app/util/testdata/noapiversion.yaml b/cmd/kubeadm/app/util/testdata/noapiversion.yaml new file mode 100644 index 00000000000..d8af993fd42 --- /dev/null +++ b/cmd/kubeadm/app/util/testdata/noapiversion.yaml @@ -0,0 +1,3 @@ +kind: Bar +foo: foo +bar: bar diff --git a/cmd/kubeadm/app/util/testdata/nokind.yaml b/cmd/kubeadm/app/util/testdata/nokind.yaml new file mode 100644 index 00000000000..9ae2426bfb1 --- /dev/null +++ b/cmd/kubeadm/app/util/testdata/nokind.yaml @@ -0,0 +1,3 @@ +apiVersion: baz.k8s.io/v1 +foo: foo +bar: bar