func waitForNodeReady() { const ( // nodeReadyTimeout is the time to wait for node to become ready. nodeReadyTimeout = 2 * time.Minute // nodeReadyPollInterval is the interval to check node ready. nodeReadyPollInterval = 1 * time.Second ) config, err := framework.LoadConfig() Expect(err).NotTo(HaveOccurred()) client, err := clientset.NewForConfig(config) Expect(err).NotTo(HaveOccurred()) Eventually(func() error { nodes, err := client.Nodes().List(api.ListOptions{}) Expect(err).NotTo(HaveOccurred()) if nodes == nil { return fmt.Errorf("the node list is nil.") } Expect(len(nodes.Items) > 1).NotTo(BeTrue()) if len(nodes.Items) == 0 { return fmt.Errorf("empty node list: %+v", nodes) } node := nodes.Items[0] if !api.IsNodeReady(&node) { return fmt.Errorf("node is not ready: %+v", node) } return nil }, nodeReadyTimeout, nodeReadyPollInterval).Should(Succeed()) }
// getAPIServerClient gets a apiserver client. func getAPIServerClient() (*clientset.Clientset, error) { config, err := framework.LoadConfig() if err != nil { return nil, fmt.Errorf("failed to load config: %v", err) } client, err := clientset.NewForConfig(config) if err != nil { return nil, fmt.Errorf("failed to create client: %v", err) } return client, nil }
func createClients(numberOfClients int) ([]*clientset.Clientset, []*internalclientset.Clientset, error) { clients := make([]*clientset.Clientset, numberOfClients) internalClients := make([]*internalclientset.Clientset, numberOfClients) for i := 0; i < numberOfClients; i++ { config, err := framework.LoadConfig() Expect(err).NotTo(HaveOccurred()) config.QPS = 100 config.Burst = 200 if framework.TestContext.KubeAPIContentType != "" { config.ContentType = framework.TestContext.KubeAPIContentType } // For the purpose of this test, we want to force that clients // do not share underlying transport (which is a default behavior // in Kubernetes). Thus, we are explicitly creating transport for // each client here. transportConfig, err := config.TransportConfig() if err != nil { return nil, nil, err } tlsConfig, err := transport.TLSConfigFor(transportConfig) if err != nil { return nil, nil, err } config.Transport = utilnet.SetTransportDefaults(&http.Transport{ Proxy: http.ProxyFromEnvironment, TLSHandshakeTimeout: 10 * time.Second, TLSClientConfig: tlsConfig, MaxIdleConnsPerHost: 100, Dial: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).Dial, }) // Overwrite TLS-related fields from config to avoid collision with // Transport field. config.TLSClientConfig = restclient.TLSClientConfig{} c, err := clientset.NewForConfig(config) if err != nil { return nil, nil, err } clients[i] = c internalClient, err := internalclientset.NewForConfig(config) if err != nil { return nil, nil, err } internalClients[i] = internalClient } return clients, internalClients, nil }
expectedVars := []string{ "FOOSERVICE_SERVICE_HOST=", "FOOSERVICE_SERVICE_PORT=", "FOOSERVICE_PORT=", "FOOSERVICE_PORT_8765_TCP_PORT=", "FOOSERVICE_PORT_8765_TCP_PROTO=", "FOOSERVICE_PORT_8765_TCP=", "FOOSERVICE_PORT_8765_TCP_ADDR=", } framework.ExpectNoErrorWithRetries(func() error { return f.MatchContainerOutput(pod, containerName, expectedVars, ContainSubstring) }, maxRetries, "Container should have service environment variables set") }) It("should support remote command execution over websockets", func() { config, err := framework.LoadConfig() Expect(err).NotTo(HaveOccurred(), "unable to get base config") By("creating the pod") name := "pod-exec-websocket-" + string(uuid.NewUUID()) pod := &v1.Pod{ ObjectMeta: v1.ObjectMeta{ Name: name, }, Spec: v1.PodSpec{ Containers: []v1.Container{ { Name: "main", Image: "gcr.io/google_containers/busybox:1.24", Command: []string{"/bin/sh", "-c", "echo container is alive; sleep 600"}, },