mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
add network test to e2e.go
This commit is contained in:
parent
18e47ba056
commit
9c3f6a402d
@ -20,7 +20,8 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"path/filepath"
|
||||||
|
goruntime "runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -29,6 +30,7 @@ import (
|
|||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/clientauth"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/clientauth"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
@ -36,6 +38,7 @@ import (
|
|||||||
var (
|
var (
|
||||||
authConfig = flag.String("auth_config", os.Getenv("HOME")+"/.kubernetes_auth", "Path to the auth info file.")
|
authConfig = flag.String("auth_config", os.Getenv("HOME")+"/.kubernetes_auth", "Path to the auth info file.")
|
||||||
host = flag.String("host", "", "The host to connect to")
|
host = flag.String("host", "", "The host to connect to")
|
||||||
|
repoRoot = flag.String("repo_root", "./", "Root directory of kubernetes repository, for finding test files. Default assumes working directory is repository root")
|
||||||
)
|
)
|
||||||
|
|
||||||
func waitForPodRunning(c *client.Client, id string) {
|
func waitForPodRunning(c *client.Client, id string) {
|
||||||
@ -53,7 +56,12 @@ func waitForPodRunning(c *client.Client, id string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadObjectOrDie(filePath string) interface{} {
|
// assetPath returns a path to the requested file; safe on all OSes.
|
||||||
|
func assetPath(pathElements ...string) string {
|
||||||
|
return filepath.Join(*repoRoot, filepath.Join(pathElements...))
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadObjectOrDie(filePath string) runtime.Object {
|
||||||
data, err := ioutil.ReadFile(filePath)
|
data, err := ioutil.ReadFile(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Fatalf("Failed to read pod: %v", err)
|
glog.Fatalf("Failed to read pod: %v", err)
|
||||||
@ -128,7 +136,7 @@ func TestKubernetesROService(c *client.Client) bool {
|
|||||||
func TestPodUpdate(c *client.Client) bool {
|
func TestPodUpdate(c *client.Client) bool {
|
||||||
podClient := c.Pods(api.NamespaceDefault)
|
podClient := c.Pods(api.NamespaceDefault)
|
||||||
|
|
||||||
pod := loadPodOrDie("./api/examples/pod.json")
|
pod := loadPodOrDie(assetPath("api", "examples", "pod.json"))
|
||||||
value := strconv.Itoa(time.Now().Nanosecond())
|
value := strconv.Itoa(time.Now().Nanosecond())
|
||||||
pod.Labels["time"] = value
|
pod.Labels["time"] = value
|
||||||
|
|
||||||
@ -208,7 +216,7 @@ func TestKubeletSendsEvent(c *client.Client) bool {
|
|||||||
|
|
||||||
podClient := c.Pods(api.NamespaceDefault)
|
podClient := c.Pods(api.NamespaceDefault)
|
||||||
|
|
||||||
pod := loadPodOrDie("./cmd/e2e/pod.json")
|
pod := loadPodOrDie(assetPath("cmd", "e2e", "pod.json"))
|
||||||
value := strconv.Itoa(time.Now().Nanosecond())
|
value := strconv.Itoa(time.Now().Nanosecond())
|
||||||
pod.Labels["time"] = value
|
pod.Labels["time"] = value
|
||||||
|
|
||||||
@ -274,9 +282,78 @@ func TestKubeletSendsEvent(c *client.Client) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNetwork(c *client.Client) bool {
|
||||||
|
ns := api.NamespaceDefault
|
||||||
|
svc, err := c.Services(ns).Create(loadObjectOrDie(assetPath(
|
||||||
|
"contrib", "for-tests", "network-tester", "service.json",
|
||||||
|
)).(*api.Service))
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("unable to create test service: %v", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// Clean up service
|
||||||
|
defer func() {
|
||||||
|
if err = c.Services(ns).Delete(svc.Name); err != nil {
|
||||||
|
glog.Errorf("unable to delete svc %v: %v", svc.Name, err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
rc, err := c.ReplicationControllers(ns).Create(loadObjectOrDie(assetPath(
|
||||||
|
"contrib", "for-tests", "network-tester", "rc.json",
|
||||||
|
)).(*api.ReplicationController))
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("unable to create test rc: %v", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// Clean up rc
|
||||||
|
defer func() {
|
||||||
|
rc.Spec.Replicas = 0
|
||||||
|
rc, err = c.ReplicationControllers(ns).Update(rc)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("unable to modify replica count for rc %v: %v", rc.Name, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = c.ReplicationControllers(ns).Delete(rc.Name); err != nil {
|
||||||
|
glog.Errorf("unable to delete rc %v: %v", rc.Name, err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
const maxAttempts = 60
|
||||||
|
for i := 0; i < maxAttempts; i++ {
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
body, err := c.Get().Path("proxy").Path("services").Path(svc.Name).Path("status").Do().Raw()
|
||||||
|
if err != nil {
|
||||||
|
glog.Infof("Attempt %v/%v: service/pod still starting. (error: '%v')", i, maxAttempts, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
switch string(body) {
|
||||||
|
case "pass":
|
||||||
|
glog.Infof("Passed on attempt %v. Cleaning up.", i)
|
||||||
|
return true
|
||||||
|
case "running":
|
||||||
|
glog.Infof("Attempt %v/%v: test still running", i, maxAttempts)
|
||||||
|
case "fail":
|
||||||
|
if body, err := c.Get().Path("proxy").Path("services").Path(svc.Name).Path("read").Do().Raw(); err != nil {
|
||||||
|
glog.Infof("Failed on attempt %v. Cleaning up. Error reading details: %v", i, err)
|
||||||
|
} else {
|
||||||
|
glog.Infof("Failed on attempt %v. Cleaning up. Details:\n%v", i, string(body))
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if body, err := c.Get().Path("proxy").Path("services").Path(svc.Name).Path("read").Do().Raw(); err != nil {
|
||||||
|
glog.Infof("Timed out. Cleaning up. Error reading details: %v", err)
|
||||||
|
} else {
|
||||||
|
glog.Infof("Timed out. Cleaning up. Details:\n%v", string(body))
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
goruntime.GOMAXPROCS(goruntime.NumCPU())
|
||||||
util.ReallyCrash = true
|
util.ReallyCrash = true
|
||||||
util.InitLogs()
|
util.InitLogs()
|
||||||
defer util.FlushLogs()
|
defer util.FlushLogs()
|
||||||
@ -294,6 +371,7 @@ func main() {
|
|||||||
TestKubeletSendsEvent,
|
TestKubeletSendsEvent,
|
||||||
TestImportantURLs,
|
TestImportantURLs,
|
||||||
TestPodUpdate,
|
TestPodUpdate,
|
||||||
|
TestNetwork,
|
||||||
}
|
}
|
||||||
|
|
||||||
passed := true
|
passed := true
|
||||||
|
Loading…
Reference in New Issue
Block a user