From 16e9cc42c1aab78f94b1869c824d2fb02ac49ade Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Wed, 21 Jun 2023 08:05:28 +0200 Subject: [PATCH] e2e node: remove unused test/e2e_node/gcp The test package was not included anywhere and thus just dead code that doesn't need to be maintained anymore. --- test/e2e_node/gcp/OWNERS | 4 - test/e2e_node/gcp/framework.go | 24 --- test/e2e_node/gcp/gke_environment_test.go | 204 ---------------------- 3 files changed, 232 deletions(-) delete mode 100644 test/e2e_node/gcp/OWNERS delete mode 100644 test/e2e_node/gcp/framework.go delete mode 100644 test/e2e_node/gcp/gke_environment_test.go diff --git a/test/e2e_node/gcp/OWNERS b/test/e2e_node/gcp/OWNERS deleted file mode 100644 index 1cb61c828f1..00000000000 --- a/test/e2e_node/gcp/OWNERS +++ /dev/null @@ -1,4 +0,0 @@ -# See the OWNERS docs at https://go.k8s.io/owners - -labels: - - sig/cloud-provider diff --git a/test/e2e_node/gcp/framework.go b/test/e2e_node/gcp/framework.go deleted file mode 100644 index c2e488ac2b4..00000000000 --- a/test/e2e_node/gcp/framework.go +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package gcp - -import "github.com/onsi/ginkgo/v2" - -// SIGDescribe annotates the test with the SIG label. -func SIGDescribe(text string, body func()) bool { - return ginkgo.Describe("[sig-cloud-provider-gcp] "+text, body) -} diff --git a/test/e2e_node/gcp/gke_environment_test.go b/test/e2e_node/gcp/gke_environment_test.go deleted file mode 100644 index 060904bd80a..00000000000 --- a/test/e2e_node/gcp/gke_environment_test.go +++ /dev/null @@ -1,204 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package gcp - -import ( - "bytes" - "context" - "fmt" - "os" - "os/exec" - "strconv" - "strings" - - "github.com/onsi/ginkgo/v2" - "k8s.io/kubernetes/test/e2e/framework" - e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" -) - -// checkProcess checks whether there's a process whose command line contains -// the specified pattern and whose parent process id is ppid using the -// pre-built information in cmdToProcessMap. -func checkProcess(pattern string, ppid int, cmdToProcessMap map[string][]process) error { - for cmd, processes := range cmdToProcessMap { - if !strings.Contains(cmd, pattern) { - continue - } - for _, p := range processes { - if p.ppid == ppid { - return nil - } - } - } - return fmt.Errorf("failed to find the process whose cmdline contains %q with ppid = %d", pattern, ppid) -} - -// checkIPTables checks whether the functionality required by kube-proxy works -// in iptables. -func checkIPTables() (err error) { - cmds := [][]string{ - {"iptables", "-N", "KUBE-PORTALS-HOST", "-t", "nat"}, - {"iptables", "-I", "OUTPUT", "-t", "nat", "-m", "comment", "--comment", "ClusterIPs", "-j", "KUBE-PORTALS-HOST"}, - {"iptables", "-A", "KUBE-PORTALS-HOST", "-t", "nat", "-m", "comment", "--comment", "test-1:", "-p", "tcp", "-m", "tcp", "--dport", "443", "-d", "10.0.0.1/32", "-j", "DNAT", "--to-destination", "10.240.0.1:11111"}, - {"iptables", "-C", "KUBE-PORTALS-HOST", "-t", "nat", "-m", "comment", "--comment", "test-1:", "-p", "tcp", "-m", "tcp", "--dport", "443", "-d", "10.0.0.1/32", "-j", "DNAT", "--to-destination", "10.240.0.1:11111"}, - {"iptables", "-A", "KUBE-PORTALS-HOST", "-t", "nat", "-m", "comment", "--comment", "test-2:", "-p", "tcp", "-m", "tcp", "--dport", "80", "-d", "10.0.0.1/32", "-j", "REDIRECT", "--to-ports", "22222"}, - {"iptables", "-C", "KUBE-PORTALS-HOST", "-t", "nat", "-m", "comment", "--comment", "test-2:", "-p", "tcp", "-m", "tcp", "--dport", "80", "-d", "10.0.0.1/32", "-j", "REDIRECT", "--to-ports", "22222"}, - } - cleanupCmds := [][]string{ - {"iptables", "-F", "KUBE-PORTALS-HOST", "-t", "nat"}, - {"iptables", "-D", "OUTPUT", "-t", "nat", "-m", "comment", "--comment", "ClusterIPs", "-j", "KUBE-PORTALS-HOST"}, - {"iptables", "-X", "KUBE-PORTALS-HOST", "-t", "nat"}, - } - defer func() { - for _, cmd := range cleanupCmds { - if _, cleanupErr := runCommand(cmd...); cleanupErr != nil && err == nil { - err = cleanupErr - return - } - } - }() - for _, cmd := range cmds { - if _, err := runCommand(cmd...); err != nil { - return err - } - } - return -} - -// checkPublicGCR checks the access to the public Google Container Registry by -// pulling the busybox image. -func checkPublicGCR() error { - const image = "registry.k8s.io/busybox" - output, err := runCommand("docker", "images", "-q", image) - if err != nil { - return err - } - - if len(output) != 0 { - if _, err := runCommand("docker", "rmi", "-f", image); err != nil { - return err - } - } - output, err = runCommand("docker", "pull", image) - if err != nil { - return err - } - - if len(output) == 0 { - return fmt.Errorf("failed to pull %s", image) - } - if _, err := runCommand("docker", "rmi", "-f", image); err != nil { - return err - } - return nil -} - -var _ = SIGDescribe("GKE system requirements [NodeConformance][Feature:GKEEnv][NodeFeature:GKEEnv]", func() { - ginkgo.BeforeEach(func() { - e2eskipper.RunIfSystemSpecNameIs("gke") - }) - - ginkgo.It("The required processes should be running", func(ctx context.Context) { - cmdToProcessMap, err := getCmdToProcessMap() - framework.ExpectNoError(err) - for _, p := range []struct { - cmd string - ppid int - }{ - {"google_accounts_daemon", 1}, - {"google_clock_skew_daemon", 1}, - {"google_ip_forwarding_daemon", 1}, - } { - framework.ExpectNoError(checkProcess(p.cmd, p.ppid, cmdToProcessMap)) - } - }) - ginkgo.It("The iptable rules should work (required by kube-proxy)", func(ctx context.Context) { - framework.ExpectNoError(checkIPTables()) - }) - ginkgo.It("The GCR is accessible", func(ctx context.Context) { - framework.ExpectNoError(checkPublicGCR()) - }) -}) - -// getPPID returns the PPID for the pid. -func getPPID(pid int) (int, error) { - statusFile := "/proc/" + strconv.Itoa(pid) + "/status" - content, err := os.ReadFile(statusFile) - if err != nil { - return 0, err - } - for _, line := range strings.Split(string(content), "\n") { - if !strings.HasPrefix(line, "PPid:") { - continue - } - s := strings.TrimSpace(strings.TrimPrefix(line, "PPid:")) - ppid, err := strconv.Atoi(s) - if err != nil { - return 0, err - } - return ppid, nil - } - return 0, fmt.Errorf("no PPid in %s", statusFile) -} - -// process contains a process ID and its parent's process ID. -type process struct { - pid int - ppid int -} - -// getCmdToProcessMap returns a mapping from the process command line to its -// process ids. -func getCmdToProcessMap() (map[string][]process, error) { - root, err := os.Open("/proc") - if err != nil { - return nil, err - } - defer root.Close() - dirs, err := root.Readdirnames(0) - if err != nil { - return nil, err - } - result := make(map[string][]process) - for _, dir := range dirs { - pid, err := strconv.Atoi(dir) - if err != nil { - continue - } - ppid, err := getPPID(pid) - if err != nil { - continue - } - content, err := os.ReadFile("/proc/" + dir + "/cmdline") - if err != nil || len(content) == 0 { - continue - } - cmd := string(bytes.Replace(content, []byte("\x00"), []byte(" "), -1)) - result[cmd] = append(result[cmd], process{pid, ppid}) - } - return result, nil -} - -// runCommand runs the cmd and returns the combined stdout and stderr, or an -// error if the command failed. -func runCommand(cmd ...string) (string, error) { - output, err := exec.Command(cmd[0], cmd[1:]...).CombinedOutput() - if err != nil { - return "", fmt.Errorf("failed to run %q: %s (%s)", strings.Join(cmd, " "), err, output) - } - return string(output), nil -}