framework

package
v0.12.1-0...-0a124f2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2017 License: Apache-2.0 Imports: 104 Imported by: 0

Documentation

Index

Constants

View Source
const (
	FirewallTimeoutDefault = 3 * time.Minute
	FirewallTestTcpTimeout = time.Duration(1 * time.Second)
	// Set ports outside of 30000-32767, 80 and 8080 to avoid being whitelisted by the e2e cluster
	FirewallTestHttpPort = int32(29999)
	FirewallTestUdpPort  = int32(29998)
)
View Source
const (
	EndpointHttpPort      = 8080
	EndpointUdpPort       = 8081
	TestContainerHttpPort = 8080
	ClusterHttpPort       = 80
	ClusterUdpPort        = 90
	NetexecImageName      = "gcr.io/google_containers/netexec:1.7"
	HostexecImageName     = "gcr.io/google_containers/hostexec:1.2"
)
View Source
const (
	// KubeProxyLagTimeout is the maximum time a kube-proxy daemon on a node is allowed
	// to not notice a Service update, such as type=NodePort.
	// TODO: This timeout should be O(10s), observed values are O(1m), 5m is very
	// liberal. Fix tracked in #20567.
	KubeProxyLagTimeout = 5 * time.Minute

	// LoadBalancerLagTimeoutDefault is the maximum time a load balancer is allowed to
	// not respond after creation.
	LoadBalancerLagTimeoutDefault = 2 * time.Minute

	// LoadBalancerLagTimeoutAWS is the delay between ELB creation and serving traffic
	// on AWS. A few minutes is typical, so use 10m.
	LoadBalancerLagTimeoutAWS = 10 * time.Minute

	// How long to wait for a load balancer to be created/modified.
	//TODO: once support ticket 21807001 is resolved, reduce this timeout back to something reasonable
	LoadBalancerCreateTimeoutDefault = 20 * time.Minute
	LoadBalancerCreateTimeoutLarge   = 2 * time.Hour

	// Time required by the loadbalancer to cleanup, proportional to numApps/Ing.
	// Bring the cleanup timeout back down to 5m once b/33588344 is resolved.
	LoadBalancerCleanupTimeout = 15 * time.Minute

	// On average it takes ~6 minutes for a single backend to come online in GCE.
	LoadBalancerPollTimeout  = 15 * time.Minute
	LoadBalancerPollInterval = 30 * time.Second

	LargeClusterMinNodesNumber = 100

	// Don't test with more than 3 nodes.
	// Many tests create an endpoint per node, in large clusters, this is
	// resource and time intensive.
	MaxNodesForEndpointsTests = 3

	// ServiceTestTimeout is used for most polling/waiting activities
	ServiceTestTimeout = 60 * time.Second
)
View Source
const (
	// How long to wait for the pod to be listable
	PodListTimeout = time.Minute
	// Initial pod start can be delayed O(minutes) by slow docker pulls
	// TODO: Make this 30 seconds once #4566 is resolved.
	PodStartTimeout = 5 * time.Minute

	// If there are any orphaned namespaces to clean up, this test is running
	// on a long lived cluster. A long wait here is preferably to spurious test
	// failures caused by leaked resources from a previous test run.
	NamespaceCleanupTimeout = 15 * time.Minute

	// How long to wait for a service endpoint to be resolvable.
	ServiceStartTimeout = 1 * time.Minute

	// How often to Poll pods, nodes and claims.
	Poll = 2 * time.Second

	// service accounts are provisioned after namespace creation
	// a service account is required to support pod creation in a namespace as part of admission control
	ServiceAccountProvisionTimeout = 2 * time.Minute

	// How long to try single API calls (like 'get' or 'list'). Used to prevent
	// transient failures from failing tests.
	// TODO: client should not apply this timeout to Watch calls. Increased from 30s until that is fixed.
	SingleCallTimeout = 5 * time.Minute

	// How long nodes have to be "ready" when a test begins. They should already
	// be "ready" before the test starts, so this is small.
	NodeReadyInitialTimeout = 20 * time.Second

	// How long pods have to be "ready" when a test begins.
	PodReadyBeforeTimeout = 5 * time.Minute

	ServiceRespondingTimeout = 2 * time.Minute
	EndpointRegisterTimeout  = time.Minute

	// How long claims have to become dynamically provisioned
	ClaimProvisionTimeout = 5 * time.Minute

	// How long each node is given during a process that restarts all nodes
	// before the test is considered failed. (Note that the total time to
	// restart all nodes will be this number times the number of nodes.)
	RestartPerNodeTimeout = 5 * time.Minute

	// How often to Poll the statues of a restart.
	RestartPoll = 20 * time.Second

	// How long a node is allowed to become "Ready" after it is restarted before
	// the test is considered failed.
	RestartNodeReadyAgainTimeout = 5 * time.Minute

	// How long a pod is allowed to become "running" and "ready" after a node
	// restart before test is considered failed.
	RestartPodReadyAgainTimeout = 5 * time.Minute

	// Number of times we want to retry Updates in case of conflict
	UpdateRetries = 5
)
View Source
const (
	// NodeStartupThreshold is a rough estimate of the time allocated for a pod to start on a node.
	NodeStartupThreshold = 4 * time.Second
)

Variables

View Source
var (
	// Label allocated to the image puller static pod that runs on each node
	// before e2es.
	ImagePullerLabels = map[string]string{"name": "e2e-image-puller"}
)
View Source
var ImageWhiteList sets.String

ImageWhiteList is the images used in the current test suite. It should be initialized in test suite and the images in the white list should be pre-pulled in the test suite. Currently, this is only used by node e2e test.

View Source
var InterestingApiServerMetrics = []string{
	"apiserver_request_count",
	"apiserver_request_latencies_summary",
	"etcd_helper_cache_entry_count",
	"etcd_helper_cache_hit_count",
	"etcd_helper_cache_miss_count",
	"etcd_request_cache_add_latencies_summary",
	"etcd_request_cache_get_latencies_summary",
	"etcd_request_latencies_summary",
}
View Source
var InterestingControllerManagerMetrics = []string{
	"garbage_collector_event_processing_latency_microseconds",
	"garbage_collector_dirty_processing_latency_microseconds",
	"garbage_collector_orphan_processing_latency_microseconds",
}
View Source
var InterestingKubeletMetrics = []string{
	"kubelet_container_manager_latency_microseconds",
	"kubelet_docker_errors",
	"kubelet_docker_operations_latency_microseconds",
	"kubelet_generate_pod_status_latency_microseconds",
	"kubelet_pod_start_latency_microseconds",
	"kubelet_pod_worker_latency_microseconds",
	"kubelet_pod_worker_start_latency_microseconds",
	"kubelet_sync_pods_latency_microseconds",
}
View Source
var ProvidersWithSSH = []string{"gce", "gke", "aws", "local"}

ProvidersWithSSH are those providers where each node is accessible with SSH

View Source
var RunId = uuid.NewUUID()

unique identifier of the e2e run

View Source
var ServiceNodePortRange = utilnet.PortRange{Base: 30000, Size: 2768}

This should match whatever the default/configured range is

View Source
var SubResourcePodProxyVersion = utilversion.MustParseSemantic("v1.1.0")

SubResource proxy should have been functional in v1.0.0, but SubResource proxy via tunneling is known to be broken in v1.0. See https://github.com/kubernetes/kubernetes/pull/15224#issuecomment-146769463

TODO(ihmccreery): remove once we don't care about v1.0 anymore, (tentatively in v1.3).

Functions

func AddOrUpdateLabelOnNode

func AddOrUpdateLabelOnNode(c clientset.Interface, nodeName string, labelKey, labelValue string)

func AddOrUpdateTaintOnNode

func AddOrUpdateTaintOnNode(c clientset.Interface, nodeName string, taint v1.Taint)

func AllNodesReady

func AllNodesReady(c clientset.Interface, timeout time.Duration) error

Checks whether all registered nodes are ready. TODO: we should change the AllNodesReady call in AfterEach to WaitForAllNodesHealthy, and figure out how to do it in a configurable way, as we can't expect all setups to run default test add-ons.

func ApiCallToPerfData

func ApiCallToPerfData(apicalls APIResponsiveness) *perftype.PerfData

ApiCallToPerfData transforms APIResponsiveness to PerfData.

func AssertCleanup

func AssertCleanup(ns string, selectors ...string)

Asserts that cleanup of a namespace wrt selectors occurred.

func BindClusterRole

func BindClusterRole(c v1beta1rbac.ClusterRoleBindingsGetter, clusterRole, ns string, subjects ...rbacv1beta1.Subject)

BindClusterRole binds the cluster role at the cluster scope

func BindClusterRoleInNamespace

func BindClusterRoleInNamespace(c v1beta1rbac.RoleBindingsGetter, clusterRole, ns string, subjects ...rbacv1beta1.Subject)

BindClusterRoleInNamespace binds the cluster role at the namespace scope

func BlockNetwork

func BlockNetwork(from string, to string)

The following helper functions can block/unblock network from source host to destination host by manipulating iptable rules. This function assumes it can ssh to the source host.

Caution: Recommend to input IP instead of hostnames. Using hostnames will cause iptables to do a DNS lookup to resolve the name to an IP address, which will slow down the test and cause it to fail if DNS is absent or broken.

Suggested usage pattern:

func foo() {
	...
	defer UnblockNetwork(from, to)
	BlockNetwork(from, to)
	...
}

func CPUUsageToPerfData

func CPUUsageToPerfData(usagePerNode NodesCPUSummary) *perftype.PerfData

CPUUsageToPerfData transforms NodesCPUSummary to PerfData.

func CPUUsageToPerfDataWithLabels

func CPUUsageToPerfDataWithLabels(usagePerNode NodesCPUSummary, labels map[string]string) *perftype.PerfData

CPUUsageToPerfDataWithLabels transforms NodesCPUSummary to PerfData with additional labels.

func CheckConnectivityToHost

func CheckConnectivityToHost(f *Framework, nodeName, podName, host string, timeout int) error

CheckConnectivityToHost launches a pod running wget on the specified node to test connectivity to the specified host. An error will be returned if the host is not reachable from the pod.

func CheckInvariants

func CheckInvariants(events []watch.Event, fns ...InvariantFunc) error

func CheckNewRSAnnotations

func CheckNewRSAnnotations(c clientset.Interface, ns, deploymentName string, expectedAnnotations map[string]string) error

CheckNewRSAnnotations check if the new RS's annotation is as expected

func CheckNodesReady

func CheckNodesReady(c clientset.Interface, nt time.Duration, expect int) ([]string, error)

CheckNodesReady waits up to nt for expect nodes accessed by c to be ready, returning an error if this doesn't happen in time. It returns the names of nodes it finds.

func CheckPodHashLabel

func CheckPodHashLabel(pods *v1.PodList) error

func CheckPodsCondition

func CheckPodsCondition(c clientset.Interface, ns string, podNames []string, timeout time.Duration, condition podCondition, desc string) bool

CheckPodsCondition returns whether all pods whose names are listed in podNames in namespace ns are in the condition, using c and waiting at most timeout.

func CheckPodsRunningReady

func CheckPodsRunningReady(c clientset.Interface, ns string, podNames []string, timeout time.Duration) bool

CheckPodsRunningReady returns whether all pods whose names are listed in podNames in namespace ns are running and ready, using c and waiting at most timeout.

func CheckPodsRunningReadyOrSucceeded

func CheckPodsRunningReadyOrSucceeded(c clientset.Interface, ns string, podNames []string, timeout time.Duration) bool

CheckPodsRunningReadyOrSucceeded returns whether all pods whose names are listed in podNames in namespace ns are running and ready, or succeeded; use c and waiting at most timeout.

func CheckRSHashLabel

func CheckRSHashLabel(rs *extensions.ReplicaSet) error

func CheckReachabilityFromPod

func CheckReachabilityFromPod(expectToBeReachable bool, namespace, pod, target string)

func CheckTestingNSDeletedExcept

func CheckTestingNSDeletedExcept(c clientset.Interface, skip string) error

CheckTestingNSDeletedExcept checks whether all e2e based existing namespaces are in the Terminating state and waits until they are finally deleted. It ignores namespace skip.

func Cleanup

func Cleanup(filePath, ns string, selectors ...string)

Stops everything from filePath from namespace ns and checks if everything matching selectors from the given namespace is correctly stopped.

func CleanupGCEResources

func CleanupGCEResources(loadBalancerName string) (retErr error)

CleanupGCEResources cleans up GCE Service Type=LoadBalancer resources with the given name. The name is usually the UUID of the Service prefixed with an alpha-numeric character ('a') to work around cloudprovider rules.

func CleanupServiceGCEResources

func CleanupServiceGCEResources(loadBalancerName string)

func CollectAddresses

func CollectAddresses(nodes *v1.NodeList, addressType v1.NodeAddressType) []string

func ConstructFirewallForLBService

func ConstructFirewallForLBService(svc *v1.Service, nodesTags []string) *compute.Firewall

ConstructFirewallForLBService returns the expected GCE firewall rule for a loadbalancer type service

func ContainerInitInvariant

func ContainerInitInvariant(older, newer runtime.Object) error

func CoreDump

func CoreDump(dir string)

CoreDump SSHs to the master and all nodes and dumps their logs into dir. It shells out to cluster/log-dump.sh to accomplish this.

func CreateExecPodOrFail

func CreateExecPodOrFail(client clientset.Interface, ns, generateName string, tweak func(*v1.Pod)) string

CreateExecPodOrFail creates a simple busybox pod in a sleep loop used as a vessel for kubectl exec commands. Returns the name of the created pod.

func CreateGCEStaticIP

func CreateGCEStaticIP(name string) (string, error)

func CreatePodOrFail

func CreatePodOrFail(c clientset.Interface, ns, name string, labels map[string]string, containerPorts []v1.ContainerPort)

func CreateTestingNS

func CreateTestingNS(baseName string, c clientset.Interface, labels map[string]string) (*v1.Namespace, error)

CreateTestingNS should be used by every test, note that we append a common prefix to the provided test name. Please see NewFramework instead of using this directly.

func DeleteGCEStaticIP

func DeleteGCEStaticIP(name string) error

func DeleteNamespaces

func DeleteNamespaces(c clientset.Interface, deleteFilter, skipFilter []string) ([]string, error)

DeleteNamespaces deletes all namespaces that match the given delete and skip filters. Filter is by simple strings.Contains; first skip filter, then delete filter. Returns the list of deleted namespaces or an error.

func DeletePodOrFail

func DeletePodOrFail(c clientset.Interface, ns, name string)

func DeleteRCAndPods

func DeleteRCAndPods(clientset clientset.Interface, internalClientset internalclientset.Interface, ns, name string) error

func DeleteRCAndWaitForGC

func DeleteRCAndWaitForGC(c clientset.Interface, ns, name string) error

DeleteRCAndWaitForGC deletes only the Replication Controller and waits for GC to delete the pods.

func DeleteReplicaSet

func DeleteReplicaSet(clientset clientset.Interface, internalClientset internalclientset.Interface, ns, name string) error

Delete a ReplicaSet and all pods it spawned

func DeleteResourceAndPods

func DeleteResourceAndPods(clientset clientset.Interface, internalClientset internalclientset.Interface, kind schema.GroupKind, ns, name string) error

DeleteResourceAndPods deletes a given resource and all pods it spawned

func DeleteResourceAndWaitForGC

func DeleteResourceAndWaitForGC(c clientset.Interface, kind schema.GroupKind, ns, name string) error

DeleteResourceAndWaitForGC deletes only given resource and waits for GC to delete the pods.

func DescribeIng

func DescribeIng(ns string)

func DescribeSvc

func DescribeSvc(ns string)

func DumpAllNamespaceInfo

func DumpAllNamespaceInfo(c clientset.Interface, namespace string)

func DumpEventsInNamespace

func DumpEventsInNamespace(eventsLister EventsLister, namespace string)

func DumpNodeDebugInfo

func DumpNodeDebugInfo(c clientset.Interface, nodeNames []string, logFunc func(fmt string, args ...interface{}))

func EnsureLoadBalancerResourcesDeleted

func EnsureLoadBalancerResourcesDeleted(ip, portRange string) error

EnsureLoadBalancerResourcesDeleted ensures that cloud load balancer resources that were created are actually cleaned up. Currently only implemented for GCE/GKE.

func ExpectNoError

func ExpectNoError(err error, explain ...interface{})

func ExpectNoErrorWithRetries

func ExpectNoErrorWithRetries(fn func() error, maxRetries int, explain ...interface{})

func ExpectNodeHasLabel

func ExpectNodeHasLabel(c clientset.Interface, nodeName string, labelKey string, labelValue string)

func ExpectNodeHasTaint

func ExpectNodeHasTaint(c clientset.Interface, nodeName string, taint v1.Taint)

func Failf

func Failf(format string, args ...interface{})

func FilterNodes

func FilterNodes(nodeList *v1.NodeList, fn func(node v1.Node) bool)

Filters nodes in NodeList in place, removing nodes that do not satisfy the given condition TODO: consider merging with pkg/client/cache.NodeLister

func FormatRuntimeOperationErrorRate

func FormatRuntimeOperationErrorRate(nodesResult map[string]NodeRuntimeOperationErrorRate) string

FormatRuntimeOperationErrorRate formats the runtime operation error rate to string.

func GenerateMasterRegexp

func GenerateMasterRegexp(prefix string) string

func GetClusterIpRange

func GetClusterIpRange() string

GetClusterIpRange returns the CLUSTER_IP_RANGE env we set for e2e cluster. From cluster/gce/config-test.sh, cluster ip range is set up using below command: CLUSTER_IP_RANGE="${CLUSTER_IP_RANGE:-10.180.0.0/14}" Warning: this need to be consistent with the CLUSTER_IP_RANGE in startup scripts, which is hardcoded currently.

func GetClusterName

func GetClusterName(instancePrefix string) string

GetClusterName returns the CLUSTER_NAME env we set for e2e cluster. From cluster/gce/config-test.sh, cluster name is set up using below format: CLUSTER_NAME="${CLUSTER_NAME:-${INSTANCE_PREFIX}}"

func GetE2eFirewalls

func GetE2eFirewalls(masterName, masterTag, nodeTag, network string) []*compute.Firewall

GetE2eFirewalls returns all firewall rules we create for an e2e cluster. From cluster/gce/util.sh, all firewall rules should be consistent with the ones created by startup scripts.

func GetHostExternalAddress

func GetHostExternalAddress(client clientset.Interface, p *v1.Pod) (externalAddress string, err error)

GetHostExternalAddress gets the node for a pod and returns the first External address. Returns an error if the node the pod is on doesn't have an External address.

func GetIngressPoint

func GetIngressPoint(ing *v1.LoadBalancerIngress) string

func GetInstancePrefix

func GetInstancePrefix(masterName string) (string, error)

GetInstancePrefix returns the INSTANCE_PREFIX env we set for e2e cluster. From cluster/gce/config-test.sh, master name is set up using below format: MASTER_NAME="${INSTANCE_PREFIX}-master"

func GetInstanceTags

func GetInstanceTags(cloudConfig CloudConfig, instanceName string) *compute.Tags

GetInstanceTags gets tags from GCE instance with given name.

func GetKubeletHeapStats

func GetKubeletHeapStats(c clientset.Interface, nodeName string) (string, error)

func GetKubeletPods

func GetKubeletPods(c clientset.Interface, node string) (*v1.PodList, error)

GetKubeletPods retrieves the list of pods on the kubelet

func GetKubeletRunningPods

func GetKubeletRunningPods(c clientset.Interface, node string) (*v1.PodList, error)

GetKubeletRunningPods retrieves the list of running pods on the kubelet. The pods includes necessary information (e.g., UID, name, namespace for pods/containers), but do not contain the full spec.

func GetKubemarkMasterComponentsResourceUsage

func GetKubemarkMasterComponentsResourceUsage() map[string]*KubemarkResourceUsage

TODO: figure out how to move this to kubemark directory (need to factor test SSH out of e2e framework)

func GetMasterAddress

func GetMasterAddress(c clientset.Interface) string

GetMasterAddress returns the hostname/external IP/internal IP as appropriate for e2e tests on a particular provider which is the address of the interface used for communication with the kubelet.

func GetMasterAndWorkerNodesOrDie

func GetMasterAndWorkerNodesOrDie(c clientset.Interface) (sets.String, *v1.NodeList)

GetMasterAndWorkerNodesOrDie will return a list masters and schedulable worker nodes

func GetMasterHost

func GetMasterHost() string

func GetNodeAddresses

func GetNodeAddresses(node *v1.Node, addressType v1.NodeAddressType) (ips []string)

func GetNodeExternalIP

func GetNodeExternalIP(node *v1.Node) string

GetNodeExternalIP returns node external IP concatenated with port 22 for ssh e.g. 1.2.3.4:22

func GetNodePortURL

func GetNodePortURL(client clientset.Interface, ns, name string, svcPort int) (string, error)

GetNodePortURL returns the url to a nodeport Service.

func GetNodePublicIps

func GetNodePublicIps(c clientset.Interface) ([]string, error)

func GetNodeTags

func GetNodeTags(c clientset.Interface, cloudConfig CloudConfig) *compute.Tags

GetNodeTags gets tags from one of the Kubernetes nodes

func GetPauseImageName

func GetPauseImageName(c clientset.Interface) string

GetPauseImageName fetches the pause image name for the same architecture as the apiserver.

func GetPauseImageNameForHostArch

func GetPauseImageNameForHostArch() string

GetPauseImageNameForHostArch fetches the pause image name for the same architecture the test is running on. TODO: move this function to the test/utils

func GetPodLogs

func GetPodLogs(c clientset.Interface, namespace, podName, containerName string) (string, error)

TODO(random-liu): Change this to be a member function of the framework.

func GetPodsInNamespace

func GetPodsInNamespace(c clientset.Interface, ns string, ignoreLabels map[string]string) ([]*v1.Pod, error)

func GetPodsScheduled

func GetPodsScheduled(masterNodes sets.String, pods *v1.PodList) (scheduledPods, notScheduledPods []v1.Pod)

GetPodsScheduled returns a number of currently scheduled and not scheduled Pods.

func GetReadySchedulableNodesOrDie

func GetReadySchedulableNodesOrDie(c clientset.Interface) (nodes *v1.NodeList)

GetReadySchedulableNodesOrDie addresses the common use case of getting nodes you can do work on. 1) Needs to be schedulable. 2) Needs to be ready. If EITHER 1 or 2 is not true, most tests will want to ignore the node entirely.

func GetServerArchitecture

func GetServerArchitecture(c clientset.Interface) string

GetServerArchitecture fetches the architecture of the cluster's apiserver.

func GetServicesProxyRequest

func GetServicesProxyRequest(c clientset.Interface, request *restclient.Request) (*restclient.Request, error)

func GetSigner

func GetSigner(provider string) (ssh.Signer, error)

GetSigner returns an ssh.Signer for the provider ("gce", etc.) that can be used to SSH to their nodes.

func GetValidDNSSubdomainName

func GetValidDNSSubdomainName(name string) (string, error)

GetValidDNSSubdomainName massages the given name to be a valid dns subdomain name. Most resources (such as secrets, clusters) require the names to be valid dns subdomain. This is a generic function (not specific to federation). Should be moved to a more generic location if others want to use it.

func HighLatencyRequests

func HighLatencyRequests(c clientset.Interface) (int, error)

Prints top five summary metrics for request types with latency and returns number of such request types above threshold.

func IsGoogleAPIHTTPErrorCode

func IsGoogleAPIHTTPErrorCode(err error, code int) bool

IsHTTPErrorCode returns true if the error is a google api error matching the corresponding HTTP error code.

func IsNodeConditionSetAsExpected

func IsNodeConditionSetAsExpected(node *v1.Node, conditionType v1.NodeConditionType, wantTrue bool) bool

func IsNodeConditionSetAsExpectedSilent

func IsNodeConditionSetAsExpectedSilent(node *v1.Node, conditionType v1.NodeConditionType, wantTrue bool) bool

func IsNodeConditionUnset

func IsNodeConditionUnset(node *v1.Node, conditionType v1.NodeConditionType) bool

func IssueSSHCommand

func IssueSSHCommand(cmd, provider string, node *v1.Node) error

func KubeDescribe

func KubeDescribe(text string, body func()) bool

Wrapper function for ginkgo describe. Adds namespacing. TODO: Support type safe tagging as well https://github.com/kubernetes/kubernetes/pull/22401.

func KubectlCmd

func KubectlCmd(args ...string) *exec.Cmd

KubectlCmd runs the kubectl executable through the wrapper script.

func KubectlVersion

func KubectlVersion() (*utilversion.Version, error)

KubectlVersion gets the version of kubectl that's currently being used (see --kubectl-path in e2e.go to use an alternate kubectl).

func KubectlVersionGTE

func KubectlVersionGTE(v *utilversion.Version) (bool, error)

KubectlVersionGTE returns true if the kubectl version is greater than or equal to v.

func LaunchHostExecPod

func LaunchHostExecPod(client clientset.Interface, ns, name string) *v1.Pod

LaunchHostExecPod launches a hostexec pod in the given namespace and waits until it's Running

func LaunchWebserverPod

func LaunchWebserverPod(f *Framework, podName, nodeName string) (ip string)

LaunchWebserverPod launches a pod serving http on port 8080 to act as the target for networking connectivity checks. The ip address of the created pod will be returned if the pod is launched successfully.

func ListNamespaceEvents

func ListNamespaceEvents(c clientset.Interface, ns string) error

func LoadClientset

func LoadClientset() (*clientset.Clientset, error)

func LoadConfig

func LoadConfig() (*restclient.Config, error)

func LoadInternalClientset

func LoadInternalClientset() (*internalclientset.Clientset, error)

func LogContainersInPodsWithLabels

func LogContainersInPodsWithLabels(c clientset.Interface, ns string, match map[string]string, containerSubstr string, logFunc func(ftm string, args ...interface{}))

func LogFailedContainers

func LogFailedContainers(c clientset.Interface, ns string, logFunc func(ftm string, args ...interface{}))

func LogPodsWithLabels

func LogPodsWithLabels(c clientset.Interface, ns string, match map[string]string, logFunc func(ftm string, args ...interface{}))

func LogSSHResult

func LogSSHResult(result SSHResult)

func LogSuspiciousLatency

func LogSuspiciousLatency(latencyData []PodLatencyData, latencyDataLag []PodLatencyData, nodeCount int, c clientset.Interface)

LogSuspiciousLatency logs metrics/docker errors from all nodes that had slow startup times If latencyDataLag is nil then it will be populated from latencyData

func Logf

func Logf(format string, args ...interface{})

func LookForString

func LookForString(expectedString string, timeout time.Duration, fn func() string) (result string, err error)

Looks for the given string in the output of fn, repeatedly calling fn until the timeout is reached or the string is found. Returns last log and possibly error if the string was not found.

func LookForStringInFile

func LookForStringInFile(ns, podName, container, file, expectedString string, timeout time.Duration) (result string, err error)

Looks for the given string in a file in a specific pod container

func LookForStringInLog

func LookForStringInLog(ns, podName, container, expectedString string, timeout time.Duration) (result string, err error)

Looks for the given string in the log of a specific pod container

func LookForStringInPodExec

func LookForStringInPodExec(ns, podName string, command []string, expectedString string, timeout time.Duration) (result string, err error)

Looks for the given string in the output of a command executed in a specific pod container

func MakeFirewallNameForLBService

func MakeFirewallNameForLBService(name string) string

MakeFirewallNameForLBService return the expected firewall name for a LB service. This should match the formatting of makeFirewallName() in pkg/cloudprovider/providers/gce/gce.go

func MasterUpgrade

func MasterUpgrade(v string) error

func MigTemplate

func MigTemplate() (string, error)

MigTemplate (GCE-only) returns the name of the MIG template that the nodes of the cluster use.

func NewDeployment

func NewDeployment(deploymentName string, replicas int32, podLabels map[string]string, imageName, image string, strategyType extensions.DeploymentStrategyType) *extensions.Deployment

func NewE2ETestNodePreparer

func NewE2ETestNodePreparer(client clientset.Interface, countToStrategy []testutils.CountToStrategy) testutils.TestNodePreparer

func NewHostExecPodSpec

func NewHostExecPodSpec(ns, name string) *v1.Pod

NewHostExecPodSpec returns the pod spec of hostexec pod

func NewKubectlCommand

func NewKubectlCommand(args ...string) *kubectlBuilder

func NewResourceUsageGatherer

func NewResourceUsageGatherer(c clientset.Interface, options ResourceGathererOptions) (*containerResourceGatherer, error)

func NodeAddresses

func NodeAddresses(nodelist *v1.NodeList, addrType v1.NodeAddressType) []string

NodeAddresses returns the first address of the given type of each node.

func NodeOSDistroIs

func NodeOSDistroIs(supportedNodeOsDistros ...string) bool

func NodeProxyRequest

func NodeProxyRequest(c clientset.Interface, node, endpoint string) (restclient.Result, error)

NodeProxyRequest performs a get on a node proxy endpoint given the nodename and rest client.

func NodeSSHHosts

func NodeSSHHosts(c clientset.Interface) ([]string, error)

NodeSSHHosts returns SSH-able host names for all schedulable nodes - this excludes master node. It returns an error if it can't find an external IP for every node, though it still returns all hosts that it found in that case.

func NodeUpgrade

func NodeUpgrade(f *Framework, v string, img string) error

func OpenWebSocketForURL

func OpenWebSocketForURL(url *url.URL, config *restclient.Config, protocols []string) (*websocket.Conn, error)

OpenWebSocketForURL constructs a websocket connection to the provided URL, using the client config, with the specified protocols.

func PackProtocolsPortsFromFirewall

func PackProtocolsPortsFromFirewall(alloweds []*compute.FirewallAllowed) []string

PackProtocolsPortsFromFirewall packs protocols and ports in an unified way for verification.

func ParseKVLines

func ParseKVLines(output, key string) string

ParseKVLines parses output that looks like lines containing "<key>: <val>" and returns <val> if <key> is found. Otherwise, it returns the empty string.

func PickNodeIP

func PickNodeIP(c clientset.Interface) string

func PodProxyResponseChecker

func PodProxyResponseChecker(c clientset.Interface, ns string, label labels.Selector, controllerName string, respondName bool, pods *v1.PodList) podProxyResponseChecker

func PodsCreated

func PodsCreated(c clientset.Interface, ns, name string, replicas int32) (*v1.PodList, error)

func PodsCreatedByLabel

func PodsCreatedByLabel(c clientset.Interface, ns, name string, replicas int32, label labels.Selector) (*v1.PodList, error)

func PodsResponding

func PodsResponding(c clientset.Interface, ns, name string, wantName bool, pods *v1.PodList) error

func PollURL

func PollURL(route, host string, timeout time.Duration, interval time.Duration, httpClient *http.Client, expectUnreachable bool) error

PollURL polls till the url responds with a healthy http code. If expectUnreachable is true, it breaks on first non-healthy http code instead.

func PrettyPrintJSON

func PrettyPrintJSON(metrics interface{}) string

func PrintAllKubeletPods

func PrintAllKubeletPods(c clientset.Interface, nodeName string)

func PrintLatencies

func PrintLatencies(latencies []PodLatencyData, header string)

func PrintPerfData

func PrintPerfData(p *perftype.PerfData)

PrintPerfData prints the perfdata in json format with PerfResultTag prefix. If an error occurs, nothing will be printed.

func ProviderIs

func ProviderIs(providers ...string) bool

func RcByNameContainer

func RcByNameContainer(name string, replicas int32, image string, labels map[string]string, c v1.Container,
	gracePeriod *int64) *v1.ReplicationController

RcByNameContainer returns a ReplicationControoler with specified name and container

func RcByNamePort

func RcByNamePort(name string, replicas int32, image string, port int, protocol v1.Protocol,
	labels map[string]string, gracePeriod *int64) *v1.ReplicationController

RcByNamePort returns a ReplicationController with specified name and port

func RegisterClusterFlags

func RegisterClusterFlags()

Register flags specific to the cluster e2e test suite.

func RegisterCommonFlags

func RegisterCommonFlags()

Register flags common to all e2e test suites.

func RegisterNodeFlags

func RegisterNodeFlags()

Register flags specific to the node e2e test suite.

func RemoveCleanupAction

func RemoveCleanupAction(p CleanupActionHandle)

RemoveCleanupAction removes a function that was installed by AddCleanupAction.

func RemoveLabelOffNode

func RemoveLabelOffNode(c clientset.Interface, nodeName string, labelKey string)

RemoveLabelOffNode is for cleaning up labels temporarily added to node, won't fail if target label doesn't exist or has been removed.

func RemoveTaintOffNode

func RemoveTaintOffNode(c clientset.Interface, nodeName string, taint v1.Taint)

RemoveTaintOffNode is for cleaning up taints temporarily added to node, won't fail if target taint doesn't exist or has been removed.

func ResetMetrics

func ResetMetrics(c clientset.Interface) error

Resets latency metrics in apiserver.

func ResourceUsageToPerfData

func ResourceUsageToPerfData(usagePerNode ResourceUsagePerNode) *perftype.PerfData

ResourceUsageToPerfData transforms ResourceUsagePerNode to PerfData. Notice that this function only cares about memory usage, because cpu usage information will be extracted from NodesCPUSummary.

func ResourceUsageToPerfDataWithLabels

func ResourceUsageToPerfDataWithLabels(usagePerNode ResourceUsagePerNode, labels map[string]string) *perftype.PerfData

ResourceUsageToPerfDataWithLabels transforms ResourceUsagePerNode to PerfData with additional labels. Notice that this function only cares about memory usage, because cpu usage information will be extracted from NodesCPUSummary.

func RestartApiserver

func RestartApiserver(c discovery.ServerVersionInterface) error

func RestartKubeProxy

func RestartKubeProxy(host string) error

func RestclientConfig

func RestclientConfig(kubeContext string) (*clientcmdapi.Config, error)

func RunCleanupActions

func RunCleanupActions()

RunCleanupActions runs all functions installed by AddCleanupAction. It does not remove them (see RemoveCleanupAction) but it does run unlocked, so they may remove themselves.

func RunCmd

func RunCmd(command string, args ...string) (string, string, error)

RunCmd runs cmd using args and returns its stdout and stderr. It also outputs cmd's stdout and stderr to their respective OS streams.

func RunCmdEnv

func RunCmdEnv(env []string, command string, args ...string) (string, string, error)

RunCmdEnv runs cmd with the provided environment and args and returns its stdout and stderr. It also outputs cmd's stdout and stderr to their respective OS streams.

func RunDeployment

func RunDeployment(config testutils.DeploymentConfig) error

func RunHostCmd

func RunHostCmd(ns, name, cmd string) (string, error)

RunHostCmd runs the given cmd in the context of the given pod using `kubectl exec` inside of a shell.

func RunHostCmdOrDie

func RunHostCmdOrDie(ns, name, cmd string) string

RunHostCmdOrDie calls RunHostCmd and dies on error.

func RunKubectl

func RunKubectl(args ...string) (string, error)

RunKubectl is a convenience wrapper over kubectlBuilder

func RunKubectlOrDie

func RunKubectlOrDie(args ...string) string

RunKubectlOrDie is a convenience wrapper over kubectlBuilder

func RunKubectlOrDieInput

func RunKubectlOrDieInput(data string, args ...string) string

RunKubectlOrDieInput is a convenience wrapper over kubectlBuilder that takes input to stdin

func RunRC

func RunRC(config testutils.RCConfig) error

func RunReplicaSet

func RunReplicaSet(config testutils.ReplicaSetConfig) error

func SameStringArray

func SameStringArray(result, expected []string, include bool) error

SameStringArray verifies whether two string arrays have the same strings, return error if not. Order does not matter. When `include` is set to true, verifies whether result includes all elements from expected.

func ScaleDeployment

func ScaleDeployment(clientset clientset.Interface, internalClientset internalclientset.Interface, ns, name string, size uint, wait bool) error

func ScaleRC

func ScaleRC(clientset clientset.Interface, internalClientset internalclientset.Interface, ns, name string, size uint, wait bool) error

func ScaleRCByLabels

func ScaleRCByLabels(clientset clientset.Interface, internalClientset internalclientset.Interface, ns string, l map[string]string, replicas uint) error

ScaleRCByLabels scales an RC via ns/label lookup. If replicas == 0 it waits till none are running, otherwise it does what a synchronous scale operation would do.

func ScaleResource

func ScaleResource(
	clientset clientset.Interface,
	internalClientset internalclientset.Interface,
	ns, name string,
	size uint,
	wait bool,
	kind schema.GroupKind,
) error

func ServerVersionGTE

func ServerVersionGTE(v *utilversion.Version, c discovery.ServerVersionInterface) (bool, error)

ServerVersionGTE returns true if v is greater than or equal to the server version.

TODO(18726): This should be incorporated into client.VersionInterface.

func ServiceResponding

func ServiceResponding(c clientset.Interface, ns, name string) error

func SetInstanceTags

func SetInstanceTags(cloudConfig CloudConfig, instanceName string, tags []string) []string

SetInstanceTags sets tags on GCE instance with given name.

func SimpleGET

func SimpleGET(c *http.Client, url, host string) (string, error)

SimpleGET executes a get on the given url, returns error if non-200 returned.

func SkipIfContainerRuntimeIs

func SkipIfContainerRuntimeIs(runtimes ...string)

func SkipIfMissingResource

func SkipIfMissingResource(clientPool dynamic.ClientPool, gvr schema.GroupVersionResource, namespace string)

func SkipIfProviderIs

func SkipIfProviderIs(unsupportedProviders ...string)

func SkipUnlessAtLeast

func SkipUnlessAtLeast(value int, minValue int, message string)

func SkipUnlessKubectlVersionGTE

func SkipUnlessKubectlVersionGTE(v *utilversion.Version)

func SkipUnlessNodeCountIsAtLeast

func SkipUnlessNodeCountIsAtLeast(minNodeCount int)

func SkipUnlessNodeCountIsAtMost

func SkipUnlessNodeCountIsAtMost(maxNodeCount int)

func SkipUnlessNodeOSDistroIs

func SkipUnlessNodeOSDistroIs(supportedNodeOsDistros ...string)

func SkipUnlessProviderIs

func SkipUnlessProviderIs(supportedProviders ...string)

func Skipf

func Skipf(format string, args ...interface{})

func StartCmdAndStreamOutput

func StartCmdAndStreamOutput(cmd *exec.Cmd) (stdout, stderr io.ReadCloser, err error)

func StartServeHostnameService

func StartServeHostnameService(c clientset.Interface, internalClient internalclientset.Interface, ns, name string, port, replicas int) ([]string, string, error)

StartServeHostnameService creates a replication controller that serves its hostname and a service on top of it.

func StopServeHostnameService

func StopServeHostnameService(clientset clientset.Interface, internalClientset internalclientset.Interface, ns, name string) error

func TargetContainers

func TargetContainers() []string

A list of containers for which we want to collect resource usage.

func TestHitNodesFromOutside

func TestHitNodesFromOutside(externalIP string, httpPort int32, timeout time.Duration, expectedHosts sets.String) error

func TestHitNodesFromOutsideWithCount

func TestHitNodesFromOutsideWithCount(externalIP string, httpPort int32, timeout time.Duration, expectedHosts sets.String,
	countToSucceed int) error

func TestNotReachableHTTP

func TestNotReachableHTTP(ip string, port int) (bool, error)

func TestNotReachableHTTPTimeout

func TestNotReachableHTTPTimeout(ip string, port int, timeout time.Duration) (bool, error)

func TestNotReachableUDP

func TestNotReachableUDP(ip string, port int, request string) (bool, error)

func TestReachableHTTP

func TestReachableHTTP(ip string, port int, request string, expect string) (bool, error)

func TestReachableHTTPWithContent

func TestReachableHTTPWithContent(ip string, port int, request string, expect string, content *bytes.Buffer) (bool, error)

func TestReachableHTTPWithContentTimeout

func TestReachableHTTPWithContentTimeout(ip string, port int, request string, expect string, content *bytes.Buffer, timeout time.Duration) (bool, error)

func TestReachableUDP

func TestReachableUDP(ip string, port int, request string, expect string) (bool, error)

func TryKill

func TryKill(cmd *exec.Cmd)

Rough equivalent of ctrl+c for cleaning up processes. Intended to be run in defer.

func UnblockNetwork

func UnblockNetwork(from string, to string)

func UpdateDeploymentWithRetries

func UpdateDeploymentWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateDeploymentFunc) (deployment *extensions.Deployment, err error)

func UpdateJobWithRetries

func UpdateJobWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateJobFunc) (job *batch.Job, err error)

func UpdatePodWithRetries

func UpdatePodWithRetries(client clientset.Interface, ns, name string, update func(*v1.Pod)) (*v1.Pod, error)

func UpdateReplicaSetWithRetries

func UpdateReplicaSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateRsFunc) (*extensions.ReplicaSet, error)

func UpdateReplicationControllerWithRetries

func UpdateReplicationControllerWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateRcFunc) (*v1.ReplicationController, error)

func UpdateService

func UpdateService(c clientset.Interface, namespace, serviceName string, update func(*v1.Service)) (*v1.Service, error)

UpdateService fetches a service, calls the update function on it, and then attempts to send the updated service. It retries up to 2 times in the face of timeouts and conflicts.

func UpdateStatefulSetWithRetries

func UpdateStatefulSetWithRetries(c clientset.Interface, namespace, name string, applyUpdate updateStatefulSetFunc) (statefulSet *apps.StatefulSet, err error)

func ValidateController

func ValidateController(c clientset.Interface, containerImage string, replicas int, containername string, testname string, validator validatorFn, ns string)

ValidateController is a generic mechanism for testing RC's that are running. It takes a container name, a test name, and a validator function which is plugged in by a specific test. "containername": this is grepped for. "containerImage" : this is the name of the image we expect to be launched. Not to confuse w/ images (kitten.jpg) which are validated. "testname": which gets bubbled up to the logging/failure messages if errors happen. "validator" function: This function is given a podID and a client, and it can do some specific validations that way.

func ValidateEndpointsOrFail

func ValidateEndpointsOrFail(c clientset.Interface, namespace, serviceName string, expectedEndpoints PortsByPodName)

func VerifyFirewallRule

func VerifyFirewallRule(res, exp *compute.Firewall, network string, portsSubset bool) error

VerifyFirewallRule verifies whether the result firewall is consistent with the expected firewall. When `portsSubset` is false, match given ports exactly. Otherwise, only check ports are included.

func VerifyPodStartupLatency

func VerifyPodStartupLatency(latency PodStartupLatency) error

Verifies whether 50, 90 and 99th percentiles of PodStartupLatency are within the threshold.

func VerifyPods

func VerifyPods(c clientset.Interface, ns, name string, wantName bool, replicas int32) error

func VerifyPodsRunning

func VerifyPodsRunning(c clientset.Interface, ns, name string, wantName bool, replicas int32) error

func VerifySchedulerLatency

func VerifySchedulerLatency(c clientset.Interface) error

Verifies (currently just by logging them) the scheduling latencies.

func VerifyServeHostnameServiceDown

func VerifyServeHostnameServiceDown(c clientset.Interface, host string, serviceIP string, servicePort int) error

func VerifyServeHostnameServiceUp

func VerifyServeHostnameServiceUp(c clientset.Interface, ns, host string, expectedPods []string, serviceIP string, servicePort int) error

VerifyServeHostnameServiceUp wgets the given serviceIP:servicePort from the given host and from within a pod. The host is expected to be an SSH-able node in the cluster. Each pod in the service is expected to echo its name. These names are compared with the given expectedPods list after a sort | uniq.

func ViperizeFlags

func ViperizeFlags()

ViperizeFlags sets up all flag and config processing. Future configuration info should be added to viper, not to flags.

func WaitForAllNodesHealthy

func WaitForAllNodesHealthy(c clientset.Interface, timeout time.Duration) error

checks whether all registered nodes are ready and all required Pods are running on them.

func WaitForAllNodesSchedulable

func WaitForAllNodesSchedulable(c clientset.Interface, timeout time.Duration) error

func WaitForApiserverUp

func WaitForApiserverUp(c clientset.Interface) error

func WaitForAuthorizationUpdate

func WaitForAuthorizationUpdate(c v1beta1authorization.SubjectAccessReviewsGetter, user, namespace, verb string, resource schema.GroupResource, allowed bool) error

WaitForAuthorizationUpdate checks if the given user can perform the named verb and action. If policyCachePollTimeout is reached without the expected condition matching, an error is returned

func WaitForClusterSize

func WaitForClusterSize(c clientset.Interface, size int, timeout time.Duration) error

WaitForClusterSize waits until the cluster has desired size and there is no not-ready nodes in it. By cluster size we mean number of Nodes excluding Master Node.

func WaitForControlledPodsRunning

func WaitForControlledPodsRunning(c clientset.Interface, ns, name string, kind schema.GroupKind) error

Wait up to 10 minutes for pods to become Running.

func WaitForDefaultServiceAccountInNamespace

func WaitForDefaultServiceAccountInNamespace(c clientset.Interface, namespace string) error

WaitForDefaultServiceAccountInNamespace waits for the default service account to be provisioned the default service account is what is associated with pods when they do not specify a service account as a result, pods are not able to be provisioned in a namespace until the service account is provisioned

func WaitForDeploymentOldRSsNum

func WaitForDeploymentOldRSsNum(c clientset.Interface, ns, deploymentName string, desiredRSNum int) error

Waits for the deployment to clean up old rcs.

func WaitForDeploymentRevisionAndImage

func WaitForDeploymentRevisionAndImage(c clientset.Interface, ns, deploymentName string, revision, image string) error

WaitForDeploymentRevisionAndImage waits for the deployment's and its new RS's revision and container image to match the given revision and image. Note that deployment revision and its new RS revision should be updated shortly, so we only wait for 1 minute here to fail early.

func WaitForDeploymentRollbackCleared

func WaitForDeploymentRollbackCleared(c clientset.Interface, ns, deploymentName string) error

WaitForDeploymentRollbackCleared waits for given deployment either started rolling back or doesn't need to rollback. Note that rollback should be cleared shortly, so we only wait for 1 minute here to fail early.

func WaitForDeploymentStatus

func WaitForDeploymentStatus(c clientset.Interface, d *extensions.Deployment) error

Waits for the deployment to reach desired state. Returns an error if the deployment's rolling update strategy (max unavailable or max surge) is broken at any times.

func WaitForDeploymentStatusValid

func WaitForDeploymentStatusValid(c clientset.Interface, d *extensions.Deployment) error

Waits for the deployment status to become valid (i.e. max unavailable and max surge aren't violated anymore). Note that the status should stay valid at all times unless shortly after a scaling event or the deployment is just created. To verify that the deployment status is valid and wait for the rollout to finish, use WaitForDeploymentStatus instead.

func WaitForDeploymentUpdatedReplicasLTE

func WaitForDeploymentUpdatedReplicasLTE(c clientset.Interface, ns, deploymentName string, minUpdatedReplicas int, desiredGeneration int64) error

WaitForDeploymentUpdatedReplicasLTE waits for given deployment to be observed by the controller and has at least a number of updatedReplicas

func WaitForDeploymentWithCondition

func WaitForDeploymentWithCondition(c clientset.Interface, ns, deploymentName, reason string, condType extensions.DeploymentConditionType) error

func WaitForEndpoint

func WaitForEndpoint(c clientset.Interface, ns, name string) error

func WaitForEvents

func WaitForEvents(c clientset.Interface, ns string, objOrRef runtime.Object, desiredEventsCount int) error

Waits for the number of events on the given object to reach a desired count.

func WaitForIngressAddress

func WaitForIngressAddress(c clientset.Interface, ns, ingName string, timeout time.Duration) (string, error)

WaitForIngressAddress waits for the Ingress to acquire an address.

func WaitForMasters

func WaitForMasters(masterPrefix string, c clientset.Interface, size int, timeout time.Duration) error

waitForMasters waits until the cluster has the desired number of ready masters in it.

func WaitForMatchPodsCondition

func WaitForMatchPodsCondition(c clientset.Interface, opts metav1.ListOptions, desc string, timeout time.Duration, condition podCondition) error

WaitForMatchPodsCondition finds match pods based on the input ListOptions. waits and checks if all match pods are in the given podCondition

func WaitForNamespacesDeleted

func WaitForNamespacesDeleted(c clientset.Interface, namespaces []string, timeout time.Duration) error

func WaitForNodeToBe

func WaitForNodeToBe(c clientset.Interface, name string, conditionType v1.NodeConditionType, wantTrue bool, timeout time.Duration) bool

WaitForNodeToBe returns whether node "name's" condition state matches wantTrue within timeout. If wantTrue is true, it will ensure the node condition status is ConditionTrue; if it's false, it ensures the node condition is in any state other than ConditionTrue (e.g. not true or unknown).

func WaitForNodeToBeNotReady

func WaitForNodeToBeNotReady(c clientset.Interface, name string, timeout time.Duration) bool

WaitForNodeToBeNotReady returns whether node name is not ready (i.e. the readiness condition is anything but ready, e.g false or unknown) within timeout.

func WaitForNodeToBeReady

func WaitForNodeToBeReady(c clientset.Interface, name string, timeout time.Duration) bool

WaitForNodeToBeReady returns whether node name is ready within timeout.

func WaitForObservedDeployment

func WaitForObservedDeployment(c clientset.Interface, ns, deploymentName string, desiredGeneration int64) error

func WaitForOverlappingAnnotationMatch

func WaitForOverlappingAnnotationMatch(c clientset.Interface, ns, deploymentName, expected string) error

func WaitForPartialEvents

func WaitForPartialEvents(c clientset.Interface, ns string, objOrRef runtime.Object, atLeastEventsCount int) error

Waits for the number of events on the given object to be at least a desired count.

func WaitForPersistentVolumeClaimPhase

func WaitForPersistentVolumeClaimPhase(phase v1.PersistentVolumeClaimPhase, c clientset.Interface, ns string, pvcName string, Poll, timeout time.Duration) error

WaitForPersistentVolumeClaimPhase waits for a PersistentVolumeClaim to be in a specific phase or until timeout occurs, whichever comes first.

func WaitForPersistentVolumeDeleted

func WaitForPersistentVolumeDeleted(c clientset.Interface, pvName string, Poll, timeout time.Duration) error

WaitForPersistentVolumeDeleted waits for a PersistentVolume to get deleted or until timeout occurs, whichever comes first.

func WaitForPersistentVolumePhase

func WaitForPersistentVolumePhase(phase v1.PersistentVolumePhase, c clientset.Interface, pvName string, Poll, timeout time.Duration) error

WaitForPersistentVolumePhase waits for a PersistentVolume to be in a specific phase or until timeout occurs, whichever comes first.

func WaitForPodCondition

func WaitForPodCondition(c clientset.Interface, ns, podName, desc string, timeout time.Duration, condition podCondition) error

func WaitForPodNameRunningInNamespace

func WaitForPodNameRunningInNamespace(c clientset.Interface, podName, namespace string) error

Waits default amount of time (PodStartTimeout) for the specified pod to become running. Returns an error if timeout occurs first, or pod goes in to failed state.

func WaitForPodNoLongerRunningInNamespace

func WaitForPodNoLongerRunningInNamespace(c clientset.Interface, podName, namespace string) error

Waits default amount of time (podNoLongerRunningTimeout) for the specified pod to stop running. Returns an error if timeout occurs first.

func WaitForPodNotPending

func WaitForPodNotPending(c clientset.Interface, ns, podName string) error

WaitForPodNotPending returns an error if it took too long for the pod to go out of pending state. The resourceVersion is used when Watching object changes, it tells since when we care about changes to the pod.

func WaitForPodRunningInNamespace

func WaitForPodRunningInNamespace(c clientset.Interface, pod *v1.Pod) error

Waits default amount of time (PodStartTimeout) for the specified pod to become running. Returns an error if timeout occurs first, or pod goes in to failed state.

func WaitForPodSuccessInNamespace

func WaitForPodSuccessInNamespace(c clientset.Interface, podName string, namespace string) error

WaitForPodSuccessInNamespace returns nil if the pod reached state success, or an error if it reached failure or until podStartupTimeout.

func WaitForPodSuccessInNamespaceSlow

func WaitForPodSuccessInNamespaceSlow(c clientset.Interface, podName string, namespace string) error

WaitForPodSuccessInNamespaceSlow returns nil if the pod reached state success, or an error if it reached failure or until slowPodStartupTimeout.

func WaitForPodToDisappear

func WaitForPodToDisappear(c clientset.Interface, ns, podName string, label labels.Selector, interval, timeout time.Duration) error

func WaitForPodsReady

func WaitForPodsReady(c clientset.Interface, ns, name string, minReadySeconds int) error

func WaitForPodsRunningReady

func WaitForPodsRunningReady(c clientset.Interface, ns string, minPods int32, timeout time.Duration, ignoreLabels map[string]string, skipSucceeded bool) error

WaitForPodsRunningReady waits up to timeout to ensure that all pods in namespace ns are either running and ready, or failed but controlled by a controller. Also, it ensures that at least minPods are running and ready. It has separate behavior from other 'wait for' pods functions in that it requests the list of pods on every iteration. This is useful, for example, in cluster startup, because the number of pods increases while waiting. If ignoreLabels is not empty, pods matching this selector are ignored and this function waits for minPods to enter Running/Ready and for all pods matching ignoreLabels to enter Success phase. Otherwise an error is returned even if there are minPods pods, some of which are in Running/Ready and some in Success. This is to allow the client to decide if "Success" means "Ready" or not. If skipSucceeded is true, any pods that are Succeeded are not counted.

func WaitForPodsSuccess

func WaitForPodsSuccess(c clientset.Interface, ns string, successPodLabels map[string]string, timeout time.Duration) error

WaitForPodsSuccess waits till all labels matching the given selector enter the Success state. The caller is expected to only invoke this method once the pods have been created.

func WaitForPodsWithLabel

func WaitForPodsWithLabel(c clientset.Interface, ns string, label labels.Selector) (pods *v1.PodList, err error)

Wait up to PodListTimeout for getting pods with certain label

func WaitForPodsWithLabelRunningReady

func WaitForPodsWithLabelRunningReady(c clientset.Interface, ns string, label labels.Selector, num int, timeout time.Duration) (pods *v1.PodList, err error)

Wait for exact amount of matching pods to become running and ready. Return the list of matching pods.

func WaitForPodsWithLabelScheduled

func WaitForPodsWithLabelScheduled(c clientset.Interface, ns string, label labels.Selector) (pods *v1.PodList, err error)

Wait for all matching pods to become scheduled and at least one matching pod exists. Return the list of matching pods.

func WaitForRCPodToDisappear

func WaitForRCPodToDisappear(c clientset.Interface, ns, rcName, podName string) error

WaitForRCPodToDisappear returns nil if the pod from the given replication controller (described by rcName) no longer exists. In case of failure or too long waiting time, an error is returned.

func WaitForRCToStabilize

func WaitForRCToStabilize(c clientset.Interface, ns, name string, timeout time.Duration) error

WaitForRCToStabilize waits till the RC has a matching generation/replica count between spec and status.

func WaitForReadyReplicaSet

func WaitForReadyReplicaSet(c clientset.Interface, ns, name string) error

WaitForReadyReplicaSet waits until the replica set has all of its replicas ready.

func WaitForReplicationController

func WaitForReplicationController(c clientset.Interface, namespace, name string, exist bool, interval, timeout time.Duration) error

WaitForReplicationController waits until the RC appears (exist == true), or disappears (exist == false)

func WaitForService

func WaitForService(c clientset.Interface, namespace, name string, exist bool, interval, timeout time.Duration) error

WaitForService waits until the service appears (exist == true), or disappears (exist == false)

func WaitForServiceEndpointsNum

func WaitForServiceEndpointsNum(c clientset.Interface, namespace, serviceName string, expectNum int, interval, timeout time.Duration) error

WaitForServiceEndpointsNum waits until the amount of endpoints that implement service to expectNum.

func WaitForStableCluster

func WaitForStableCluster(c clientset.Interface, masterNodes sets.String) int

WaitForStableCluster waits until all existing pods are scheduled and returns their amount.

func WaitTimeoutForPodNoLongerRunningInNamespace

func WaitTimeoutForPodNoLongerRunningInNamespace(c clientset.Interface, podName, namespace string, timeout time.Duration) error

func WatchRecreateDeployment

func WatchRecreateDeployment(c clientset.Interface, d *extensions.Deployment) error

WatchRecreateDeployment watches Recreate deployments and ensures no new pods will run at the same time with old pods.

Types

type APICall

type APICall struct {
	Resource string        `json:"resource"`
	Verb     string        `json:"verb"`
	Latency  LatencyMetric `json:"latency"`
}

type APIResponsiveness

type APIResponsiveness struct {
	APICalls []APICall `json:"apicalls"`
}

func (APIResponsiveness) Len

func (a APIResponsiveness) Len() int

func (APIResponsiveness) Less

func (a APIResponsiveness) Less(i, j int) bool

func (APIResponsiveness) Swap

func (a APIResponsiveness) Swap(i, j int)

type Address

type Address struct {
	// contains filtered or unexported fields
}

type CleanupActionHandle

type CleanupActionHandle *int

func AddCleanupAction

func AddCleanupAction(fn func()) CleanupActionHandle

AddCleanupAction installs a function that will be called in the event of the whole test being terminated. This allows arbitrary pieces of the overall test to hook into SynchronizedAfterSuite().

type ClientConfigGetter

type ClientConfigGetter func() (*restclient.Config, error)

type CloudConfig

type CloudConfig struct {
	ProjectID         string
	Zone              string
	Cluster           string
	MasterName        string
	NodeInstanceGroup string
	NumNodes          int
	ClusterTag        string
	Network           string

	Provider cloudprovider.Interface
}

type ClusterVerification

type ClusterVerification struct {
	// contains filtered or unexported fields
}

func (*ClusterVerification) ForEach

func (cl *ClusterVerification) ForEach(podFunc func(v1.Pod)) error

ForEach runs a function against every verifiable pod. Be warned that this doesn't wait for "n" pods to verifiy, so it may return very quickly if you have strict pod state requirements.

For example, if you require at least 5 pods to be running before your test will pass, its smart to first call "clusterVerification.WaitFor(5)" before you call clusterVerification.ForEach.

func (*ClusterVerification) WaitFor

func (cl *ClusterVerification) WaitFor(atLeast int, timeout time.Duration) ([]v1.Pod, error)

WaitFor waits for some minimum number of pods to be verified, according to the PodStateVerification definition.

func (*ClusterVerification) WaitForOrFail

func (cl *ClusterVerification) WaitForOrFail(atLeast int, timeout time.Duration)

WaitForOrFail provides a shorthand WaitFor with failure as an option if anything goes wrong.

type ContainerFailures

type ContainerFailures struct {
	Restarts int
	// contains filtered or unexported fields
}

type ContainerResourceUsage

type ContainerResourceUsage struct {
	Name                    string
	Timestamp               time.Time
	CPUUsageInCores         float64
	MemoryUsageInBytes      uint64
	MemoryWorkingSetInBytes uint64
	MemoryRSSInBytes        uint64
	// The interval used to calculate CPUUsageInCores.
	CPUInterval time.Duration
}

type ContainersCPUSummary

type ContainersCPUSummary map[string]map[float64]float64

ContainersCPUSummary is indexed by the container name with each entry a (percentile, value) map.

type CreateTestingNSFn

type CreateTestingNSFn func(baseName string, c clientset.Interface, labels map[string]string) (*v1.Namespace, error)

type E2ETestNodePreparer

type E2ETestNodePreparer struct {
	// contains filtered or unexported fields
}

E2ETestNodePreparer implements testutils.TestNodePreparer interface, which is used to create/modify Nodes before running a test.

func (*E2ETestNodePreparer) CleanupNodes

func (p *E2ETestNodePreparer) CleanupNodes() error

func (*E2ETestNodePreparer) PrepareNodes

func (p *E2ETestNodePreparer) PrepareNodes() error

type EventsLister

type EventsLister func(opts metav1.ListOptions, ns string) (*v1.EventList, error)

type ExecOptions

type ExecOptions struct {
	Command []string

	Namespace     string
	PodName       string
	ContainerName string

	Stdin         io.Reader
	CaptureStdout bool
	CaptureStderr bool
	// If false, whitespace in std{err,out} will be removed.
	PreserveWhitespace bool
}

ExecOptions passed to ExecWithOptions

type Framework

type Framework struct {
	BaseName string

	// ClientSet uses internal objects, you should use ClientSet where possible.
	ClientSet clientset.Interface

	InternalClientset *internalclientset.Clientset
	StagingClient     *staging.Clientset
	ClientPool        dynamic.ClientPool

	Namespace *v1.Namespace // Every test has at least one namespace

	NamespaceDeletionTimeout time.Duration

	// Constraints that passed to a check which is executed after data is gathered to
	// see if 99% of results are within acceptable bounds. It as to be injected in the test,
	// as expectations vary greatly. Constraints are groupped by the container names.
	AddonResourceConstraints map[string]ResourceConstraint

	// configuration for framework's client
	Options FrameworkOptions
	// contains filtered or unexported fields
}

Framework supports common operations used by e2e tests; it will keep a client & a namespace for you. Eventual goal is to merge this with integration test framework.

func NewDefaultFramework

func NewDefaultFramework(baseName string) *Framework

NewFramework makes a new framework and sets up a BeforeEach/AfterEach for you (you can write additional before/after each functions).

func NewDefaultGroupVersionFramework

func NewDefaultGroupVersionFramework(baseName string, groupVersion schema.GroupVersion) *Framework

func NewFramework

func NewFramework(baseName string, options FrameworkOptions, client clientset.Interface) *Framework

func (*Framework) AfterEach

func (f *Framework) AfterEach()

AfterEach deletes the namespace, after reading its events.

func (*Framework) BeforeEach

func (f *Framework) BeforeEach()

BeforeEach gets a client and makes a namespace.

func (*Framework) CheckFileSizeViaContainer

func (f *Framework) CheckFileSizeViaContainer(podName, containerName, path string) (string, error)

func (*Framework) CreateNamespace

func (f *Framework) CreateNamespace(baseName string, labels map[string]string) (*v1.Namespace, error)

func (*Framework) CreatePodsPerNodeForSimpleApp

func (f *Framework) CreatePodsPerNodeForSimpleApp(appName string, podSpec func(n v1.Node) v1.PodSpec, maxCount int) map[string]string

CreatePodsPerNodeForSimpleApp Creates pods w/ labels. Useful for tests which make a bunch of pods w/o any networking.

func (*Framework) CreateServiceForSimpleApp

func (f *Framework) CreateServiceForSimpleApp(contPort, svcPort int, appName string) *v1.Service

CreateServiceForSimpleApp returns a service that selects/exposes pods (send -1 ports if no exposure needed) with an app label.

func (*Framework) CreateServiceForSimpleAppWithPods

func (f *Framework) CreateServiceForSimpleAppWithPods(contPort int, svcPort int, appName string, podSpec func(n v1.Node) v1.PodSpec, count int, block bool) (error, *v1.Service)

CreateServiceForSimpleAppWithPods is a convenience wrapper to create a service and its matching pods all at once.

func (*Framework) ExecCommandInContainer

func (f *Framework) ExecCommandInContainer(podName, containerName string, cmd ...string) string

ExecCommandInContainer executes a command in the specified container.

func (*Framework) ExecCommandInContainerWithFullOutput

func (f *Framework) ExecCommandInContainerWithFullOutput(podName, containerName string, cmd ...string) (string, string, error)

ExecCommandInContainerWithFullOutput executes a command in the specified container and return stdout, stderr and error

func (*Framework) ExecCommandInPod

func (f *Framework) ExecCommandInPod(podName string, cmd ...string) string

func (*Framework) ExecCommandInPodWithFullOutput

func (f *Framework) ExecCommandInPodWithFullOutput(podName string, cmd ...string) (string, string, error)

func (*Framework) ExecShellInContainer

func (f *Framework) ExecShellInContainer(podName, containerName string, cmd string) string

func (*Framework) ExecShellInPod

func (f *Framework) ExecShellInPod(podName string, cmd string) string

func (*Framework) ExecShellInPodWithFullOutput

func (f *Framework) ExecShellInPodWithFullOutput(podName string, cmd string) (string, string, error)

func (*Framework) ExecWithOptions

func (f *Framework) ExecWithOptions(options ExecOptions) (string, string, error)

ExecWithOptions executes a command in the specified container, returning stdout, stderr and error. `options` allowed for additional parameters to be passed.

func (*Framework) MatchContainerOutput

func (f *Framework) MatchContainerOutput(
	pod *v1.Pod,
	containerName string,
	expectedOutput []string,
	matcher func(string, ...interface{}) gomegatypes.GomegaMatcher) error

MatchContainerOutput creates a pod and waits for all it's containers to exit with success. It then tests that the matcher with each expectedOutput matches the output of the specified container.

func (*Framework) NewClusterVerification

func (f *Framework) NewClusterVerification(namespace *v1.Namespace, filter PodStateVerification) *ClusterVerification

func (*Framework) PodClient

func (f *Framework) PodClient() *PodClient

Convenience method for getting a pod client interface in the framework's namespace, possibly applying test-suite specific transformations to the pod spec, e.g. for node e2e pod scheduling.

func (*Framework) PodClientNS

func (f *Framework) PodClientNS(namespace string) *PodClient

Convenience method for getting a pod client interface in an alternative namespace, possibly applying test-suite specific transformations to the pod spec, e.g. for node e2e pod scheduling.

func (*Framework) ReadFileViaContainer

func (f *Framework) ReadFileViaContainer(podName, containerName string, path string) (string, error)

Read a file using kubectl exec cat <path>

func (*Framework) TestContainerOutput

func (f *Framework) TestContainerOutput(scenarioName string, pod *v1.Pod, containerIndex int, expectedOutput []string)

TestContainerOutput runs the given pod in the given namespace and waits for all of the containers in the podSpec to move into the 'Success' status, and tests the specified container log against the given expected output using a substring matcher.

func (*Framework) TestContainerOutputRegexp

func (f *Framework) TestContainerOutputRegexp(scenarioName string, pod *v1.Pod, containerIndex int, expectedOutput []string)

TestContainerOutputRegexp runs the given pod in the given namespace and waits for all of the containers in the podSpec to move into the 'Success' status, and tests the specified container log against the given expected output using a regexp matcher.

func (*Framework) WaitForAnEndpoint

func (f *Framework) WaitForAnEndpoint(serviceName string) error

WaitForAnEndpoint waits for at least one endpoint to become available in the service's corresponding endpoints object.

func (*Framework) WaitForPodNoLongerRunning

func (f *Framework) WaitForPodNoLongerRunning(podName string) error

WaitForPodNoLongerRunning waits for the pod to no longer be running in the namespace, for either success or failure.

func (*Framework) WaitForPodReady

func (f *Framework) WaitForPodReady(podName string) error

WaitForPodReady waits for the pod to flip to ready in the namespace.

func (*Framework) WaitForPodRunning

func (f *Framework) WaitForPodRunning(podName string) error

WaitForPodRunning waits for the pod to run in the namespace.

func (*Framework) WaitForPodRunningSlow

func (f *Framework) WaitForPodRunningSlow(podName string) error

WaitForPodRunningSlow waits for the pod to run in the namespace. It has a longer timeout then WaitForPodRunning (util.slowPodStartTimeout).

func (*Framework) WaitForPodTerminated

func (f *Framework) WaitForPodTerminated(podName, reason string) error

WaitForPodTerminated waits for the pod to be terminated with the given reason.

func (*Framework) WriteFileViaContainer

func (f *Framework) WriteFileViaContainer(podName, containerName string, path string, contents string) error

Write a file using kubectl exec echo <contents> > <path> via specified container Because of the primitive technique we're using here, we only allow ASCII alphanumeric characters

type FrameworkOptions

type FrameworkOptions struct {
	ClientQPS    float32
	ClientBurst  int
	GroupVersion *schema.GroupVersion
}

type InvariantFunc

type InvariantFunc func(older, newer runtime.Object) error

type KubeCluster

type KubeCluster struct {
	Name    string `yaml:"name"`
	Cluster struct {
		CertificateAuthorityData string `yaml:"certificate-authority-data"`
		Server                   string `yaml:"server"`
	} `yaml:"cluster"`
}

type KubeConfig

type KubeConfig struct {
	Contexts []struct {
		Name    string `yaml:"name"`
		Context struct {
			Cluster string `yaml:"cluster"`
			User    string
		} `yaml:"context"`
	} `yaml:"contexts"`

	Clusters []KubeCluster `yaml:"clusters"`

	Users []KubeUser `yaml:"users"`
}

func (*KubeConfig) FindCluster

func (kc *KubeConfig) FindCluster(name string) *KubeCluster

func (*KubeConfig) FindUser

func (kc *KubeConfig) FindUser(name string) *KubeUser

type KubeUser

type KubeUser struct {
	Name string `yaml:"name"`
	User struct {
		Username string `yaml:"username"`
		Password string `yaml:"password"`
		Token    string `yaml:"token"`
	} `yaml:"user"`
}

type KubeletLatencyMetric

type KubeletLatencyMetric struct {
	// eg: list, info, create
	Operation string
	// eg: sync_pods, pod_worker
	Method string
	// 0 <= quantile <=1, e.g. 0.95 is 95%tile, 0.5 is median.
	Quantile float64
	Latency  time.Duration
}

KubeletMetric stores metrics scraped from the kubelet server's /metric endpoint. TODO: Get some more structure around the metrics and this type

type KubeletLatencyMetrics

type KubeletLatencyMetrics []KubeletLatencyMetric

KubeletMetricByLatency implements sort.Interface for []KubeletMetric based on the latency field.

func GetKubeletLatencyMetrics

func GetKubeletLatencyMetrics(ms metrics.KubeletMetrics) KubeletLatencyMetrics

GetKubeletLatencyMetrics gets all latency related kubelet metrics. Note that the KubeletMetrcis passed in should not contain subsystem prefix.

func HighLatencyKubeletOperations

func HighLatencyKubeletOperations(c clientset.Interface, threshold time.Duration, nodeName string, logFunc func(fmt string, args ...interface{})) (KubeletLatencyMetrics, error)

HighLatencyKubeletOperations logs and counts the high latency metrics exported by the kubelet server via /metrics.

func (KubeletLatencyMetrics) Len

func (a KubeletLatencyMetrics) Len() int

func (KubeletLatencyMetrics) Less

func (a KubeletLatencyMetrics) Less(i, j int) bool

func (KubeletLatencyMetrics) Swap

func (a KubeletLatencyMetrics) Swap(i, j int)

type KubemarkResourceUsage

type KubemarkResourceUsage struct {
	Name                    string
	MemoryWorkingSetInBytes uint64
	CPUUsageInCores         float64
}

type LatencyMetric

type LatencyMetric struct {
	Perc50  time.Duration `json:"Perc50"`
	Perc90  time.Duration `json:"Perc90"`
	Perc99  time.Duration `json:"Perc99"`
	Perc100 time.Duration `json:"Perc100"`
}

Dashboard metrics

func ExtractLatencyMetrics

func ExtractLatencyMetrics(latencies []PodLatencyData) LatencyMetric

type LatencySlice

type LatencySlice []PodLatencyData

func (LatencySlice) Len

func (a LatencySlice) Len() int

func (LatencySlice) Less

func (a LatencySlice) Less(i, j int) bool

func (LatencySlice) Swap

func (a LatencySlice) Swap(i, j int)

type LogSizeDataTimeseries

type LogSizeDataTimeseries map[string]map[string][]TimestampedSize

type LogSizeGatherer

type LogSizeGatherer struct {
	// contains filtered or unexported fields
}

LogSizeGatherer is a worker which grabs a WorkItem from the channel and does assigned work.

func (*LogSizeGatherer) Run

func (g *LogSizeGatherer) Run()

func (*LogSizeGatherer) Work

func (g *LogSizeGatherer) Work() bool

Work does a single unit of work: tries to take out a WorkItem from the queue, ssh-es into a given machine, gathers data, writes it to the shared <data> map, and creates a gorouting which reinserts work item into the queue with a <pollingPeriod> delay. Returns false if worker should exit.

type LogsSizeData

type LogsSizeData struct {
	// contains filtered or unexported fields
}

func (*LogsSizeData) AddNewData

func (d *LogsSizeData) AddNewData(ip, path string, timestamp time.Time, size int)

type LogsSizeDataSummary

type LogsSizeDataSummary map[string]map[string]SingleLogSummary

node -> file -> data

func (*LogsSizeDataSummary) PrintHumanReadable

func (s *LogsSizeDataSummary) PrintHumanReadable() string

TODO: make sure that we don't need locking here

func (*LogsSizeDataSummary) PrintJSON

func (s *LogsSizeDataSummary) PrintJSON() string

type LogsSizeVerifier

type LogsSizeVerifier struct {
	// contains filtered or unexported fields
}

LogsSizeVerifier gathers data about log files sizes from master and node machines. It oversees a <workersNo> workers which do the gathering.

func NewLogsVerifier

func NewLogsVerifier(c clientset.Interface, stopChannel chan bool) *LogsSizeVerifier

NewLogsVerifier creates a new LogsSizeVerifier which will stop when stopChannel is closed

func (*LogsSizeVerifier) GetSummary

func (s *LogsSizeVerifier) GetSummary() *LogsSizeDataSummary

GetSummary returns a summary (average generation rate and number of probes) of the data gathered by LogSizeVerifier

func (*LogsSizeVerifier) Run

func (v *LogsSizeVerifier) Run()

Run starts log size gathering. It starts a gorouting for every worker and then blocks until stopChannel is closed

type MetricsForE2E

type MetricsForE2E metrics.MetricsCollection

func (*MetricsForE2E) PrintHumanReadable

func (m *MetricsForE2E) PrintHumanReadable() string

func (*MetricsForE2E) PrintJSON

func (m *MetricsForE2E) PrintJSON() string

type NetworkingTestConfig

type NetworkingTestConfig struct {
	// TestContaienrPod is a test pod running the netexec image. It is capable
	// of executing tcp/udp requests against ip:port.
	TestContainerPod *v1.Pod
	// HostTestContainerPod is a pod running with hostNetworking=true, and the
	// hostexec image.
	HostTestContainerPod *v1.Pod
	// EndpointPods are the pods belonging to the Service created by this
	// test config. Each invocation of `setup` creates a service with
	// 1 pod per node running the netexecImage.
	EndpointPods []*v1.Pod

	// NodePortService is a Service with Type=NodePort spanning over all
	// endpointPods.
	NodePortService *v1.Service
	// ExternalAddrs is a list of external IPs of nodes in the cluster.
	ExternalAddrs []string
	// Nodes is a list of nodes in the cluster.
	Nodes []v1.Node
	// MaxTries is the number of retries tolerated for tests run against
	// endpoints and services created by this config.
	MaxTries int
	// The ClusterIP of the Service reated by this test config.
	ClusterIP string
	// External ip of first node for use in nodePort testing.
	NodeIP string
	// The http/udp nodePorts of the Service.
	NodeHttpPort int
	NodeUdpPort  int
	// The kubernetes namespace within which all resources for this
	// config are created
	Namespace string
	// contains filtered or unexported fields
}

NetworkingTestConfig is a convenience class around some utility methods for testing kubeproxy/networking/services/endpoints.

func NewCoreNetworkingTestConfig

func NewCoreNetworkingTestConfig(f *Framework) *NetworkingTestConfig

NewNetworkingTestNodeE2EConfig creates and sets up a new test config helper for Node E2E.

func NewNetworkingTestConfig

func NewNetworkingTestConfig(f *Framework) *NetworkingTestConfig

NewNetworkingTestConfig creates and sets up a new test config helper.

func (*NetworkingTestConfig) DeleteNetProxyPod

func (config *NetworkingTestConfig) DeleteNetProxyPod()

func (*NetworkingTestConfig) DeleteNodePortService

func (config *NetworkingTestConfig) DeleteNodePortService()

func (*NetworkingTestConfig) DialFromContainer

func (config *NetworkingTestConfig) DialFromContainer(protocol, containerIP, targetIP string, containerHttpPort, targetPort, maxTries, minTries int, expectedEps sets.String)

DialFromContainers executes a curl via kubectl exec in a test container, which might then translate to a tcp or udp request based on the protocol argument in the url.

  • minTries is the minimum number of curl attempts required before declaring success. Set to 0 if you'd like to return as soon as all endpoints respond at least once.
  • maxTries is the maximum number of curl attempts. If this many attempts pass and we don't see all expected endpoints, the test fails.
  • expectedEps is the set of endpointnames to wait for. Typically this is also the hostname reported by each pod in the service through /hostName.

maxTries == minTries will confirm that we see the expected endpoints and no more for maxTries. Use this if you want to eg: fail a readiness check on a pod and confirm it doesn't show up as an endpoint.

func (*NetworkingTestConfig) DialFromEndpointContainer

func (config *NetworkingTestConfig) DialFromEndpointContainer(protocol, targetIP string, targetPort, maxTries, minTries int, expectedEps sets.String)

func (*NetworkingTestConfig) DialFromNode

func (config *NetworkingTestConfig) DialFromNode(protocol, targetIP string, targetPort, maxTries, minTries int, expectedEps sets.String)

DialFromNode executes a tcp or udp request based on protocol via kubectl exec in a test container running with host networking.

  • minTries is the minimum number of curl attempts required before declaring success. Set to 0 if you'd like to return as soon as all endpoints respond at least once.
  • maxTries is the maximum number of curl attempts. If this many attempts pass and we don't see all expected endpoints, the test fails.

maxTries == minTries will confirm that we see the expected endpoints and no more for maxTries. Use this if you want to eg: fail a readiness check on a pod and confirm it doesn't show up as an endpoint.

func (*NetworkingTestConfig) DialFromTestContainer

func (config *NetworkingTestConfig) DialFromTestContainer(protocol, targetIP string, targetPort, maxTries, minTries int, expectedEps sets.String)

func (*NetworkingTestConfig) EndpointHostnames

func (config *NetworkingTestConfig) EndpointHostnames() sets.String

EndpointHostnames returns a set of hostnames for existing endpoints.

func (*NetworkingTestConfig) GetSelfURL

func (config *NetworkingTestConfig) GetSelfURL(path string, expected string)

GetSelfURL executes a curl against the given path via kubectl exec into a test container running with host networking, and fails if the output doesn't match the expected string.

type NodeRuntimeOperationErrorRate

type NodeRuntimeOperationErrorRate map[string]*RuntimeOperationErrorRate

NodeRuntimeOperationErrorRate is the runtime operation error rate on one node.

type NodeTestContextType

type NodeTestContextType struct {
	// NodeE2E indicates whether it is running node e2e.
	NodeE2E bool
	// Name of the node to run tests on.
	NodeName string
	// NodeConformance indicates whether the test is running in node conformance mode.
	NodeConformance bool
	// PrepullImages indicates whether node e2e framework should prepull images.
	PrepullImages bool
	// KubeletConfig is the kubelet configuration the test is running against.
	KubeletConfig componentconfig.KubeletConfiguration
}

NodeTestContextType is part of TestContextType, it is shared by all node e2e test.

type NodesCPUSummary

type NodesCPUSummary map[string]ContainersCPUSummary

NodesCPUSummary is indexed by the node name with each entry a ContainersCPUSummary map.

type PodClient

type PodClient struct {
	v1core.PodInterface
	// contains filtered or unexported fields
}

func (*PodClient) Create

func (c *PodClient) Create(pod *v1.Pod) *v1.Pod

Create creates a new pod according to the framework specifications (don't wait for it to start).

func (*PodClient) CreateBatch

func (c *PodClient) CreateBatch(pods []*v1.Pod) []*v1.Pod

CreateBatch create a batch of pods. All pods are created before waiting.

func (*PodClient) CreateSync

func (c *PodClient) CreateSync(pod *v1.Pod) *v1.Pod

CreateSync creates a new pod according to the framework specifications, and wait for it to start.

func (*PodClient) DeleteSync

func (c *PodClient) DeleteSync(name string, options *metav1.DeleteOptions, timeout time.Duration)

DeleteSync deletes the pod and wait for the pod to disappear for `timeout`. If the pod doesn't disappear before the timeout, it will fail the test.

func (*PodClient) MatchContainerOutput

func (c *PodClient) MatchContainerOutput(name string, containerName string, expectedRegexp string) error

MatchContainerOutput gest output of a container and match expected regexp in the output.

func (*PodClient) Update

func (c *PodClient) Update(name string, updateFn func(pod *v1.Pod))

Update updates the pod object. It retries if there is a conflict, throw out error if there is any other errors. name is the pod name, updateFn is the function updating the pod object.

func (*PodClient) WaitForSuccess

func (c *PodClient) WaitForSuccess(name string, timeout time.Duration)

TODO(random-liu): Move pod wait function into this file WaitForSuccess waits for pod to success.

type PodLatencyData

type PodLatencyData struct {
	// Name of the pod
	Name string
	// Node this pod was running on
	Node string
	// Latency information related to pod startuptime
	Latency time.Duration
}

PodLatencyData encapsulates pod startup latency information.

type PodStartupLatency

type PodStartupLatency struct {
	Latency LatencyMetric `json:"latency"`
}

type PodStateVerification

type PodStateVerification struct {
	// Optional: only pods that have k=v labels will pass this filter.
	Selectors map[string]string

	// Required: The phases which are valid for your pod.
	ValidPhases []v1.PodPhase

	// Optional: only pods passing this function will pass the filter
	// Verify a pod.
	// As an optimization, in addition to specfying filter (boolean),
	// this function allows specifying an error as well.
	// The error indicates that the polling of the pod spectrum should stop.
	Verify func(v1.Pod) (bool, error)

	// Optional: only pods with this name will pass the filter.
	PodName string
}

PodStateVerification represents a verification of pod state. Any time you have a set of pods that you want to operate against or query, this struct can be used to declaratively identify those pods.

type PortsByPodName

type PortsByPodName map[string][]int

type PortsByPodUID

type PortsByPodUID map[types.UID][]int

func GetContainerPortsByPodUID

func GetContainerPortsByPodUID(endpoints *v1.Endpoints) PortsByPodUID

type ResourceConstraint

type ResourceConstraint struct {
	CPUConstraint    float64
	MemoryConstraint uint64
}

type ResourceGathererOptions

type ResourceGathererOptions struct {
	// contains filtered or unexported fields
}

type ResourceMonitor

type ResourceMonitor struct {
	// contains filtered or unexported fields
}

ResourceMonitor manages a resourceCollector per node.

func NewResourceMonitor

func NewResourceMonitor(c clientset.Interface, containerNames []string, pollingInterval time.Duration) *ResourceMonitor

func (*ResourceMonitor) FormatCPUSummary

func (r *ResourceMonitor) FormatCPUSummary(summary NodesCPUSummary) string

func (*ResourceMonitor) FormatResourceUsage

func (r *ResourceMonitor) FormatResourceUsage(s ResourceUsagePerNode) string

func (*ResourceMonitor) GetCPUSummary

func (r *ResourceMonitor) GetCPUSummary() NodesCPUSummary

func (*ResourceMonitor) GetLatest

func (r *ResourceMonitor) GetLatest() (ResourceUsagePerNode, error)

func (*ResourceMonitor) GetMasterNodeCPUSummary

func (r *ResourceMonitor) GetMasterNodeCPUSummary(summaryPerNode NodesCPUSummary) NodesCPUSummary

func (*ResourceMonitor) GetMasterNodeLatest

func (r *ResourceMonitor) GetMasterNodeLatest(usagePerNode ResourceUsagePerNode) ResourceUsagePerNode

func (*ResourceMonitor) LogCPUSummary

func (r *ResourceMonitor) LogCPUSummary()

func (*ResourceMonitor) LogLatest

func (r *ResourceMonitor) LogLatest()

func (*ResourceMonitor) Reset

func (r *ResourceMonitor) Reset()

func (*ResourceMonitor) Start

func (r *ResourceMonitor) Start()

func (*ResourceMonitor) Stop

func (r *ResourceMonitor) Stop()

type ResourceUsagePerContainer

type ResourceUsagePerContainer map[string]*ContainerResourceUsage

type ResourceUsagePerNode

type ResourceUsagePerNode map[string]ResourceUsagePerContainer

type ResourceUsageSummary

type ResourceUsageSummary map[string][]SingleContainerSummary

we can't have int here, as JSON does not accept integer keys.

func (*ResourceUsageSummary) PrintHumanReadable

func (s *ResourceUsageSummary) PrintHumanReadable() string

func (*ResourceUsageSummary) PrintJSON

func (s *ResourceUsageSummary) PrintJSON() string

type RuntimeOperationErrorRate

type RuntimeOperationErrorRate struct {
	TotalNumber float64
	ErrorRate   float64
	TimeoutRate float64
}

RuntimeOperationErrorRate is the error rate of a specified runtime operation.

type RuntimeOperationMonitor

type RuntimeOperationMonitor struct {
	// contains filtered or unexported fields
}

RuntimeOperationMonitor is the tool getting and parsing docker operation metrics.

func NewRuntimeOperationMonitor

func NewRuntimeOperationMonitor(c clientset.Interface) *RuntimeOperationMonitor

func (*RuntimeOperationMonitor) GetLatestRuntimeOperationErrorRate

func (m *RuntimeOperationMonitor) GetLatestRuntimeOperationErrorRate() map[string]NodeRuntimeOperationErrorRate

GetLatestRuntimeOperationErrorRate gets latest error rate and timeout rate from last observed RuntimeOperationErrorRate.

func (*RuntimeOperationMonitor) GetRuntimeOperationErrorRate

func (m *RuntimeOperationMonitor) GetRuntimeOperationErrorRate() map[string]NodeRuntimeOperationErrorRate

GetRuntimeOperationErrorRate gets runtime operation records from kubelet metrics and calculate error rates of all runtime operations.

type SSHResult

type SSHResult struct {
	User   string
	Host   string
	Cmd    string
	Stdout string
	Stderr string
	Code   int
}

func IssueSSHCommandWithResult

func IssueSSHCommandWithResult(cmd, provider string, node *v1.Node) (*SSHResult, error)

func SSH

func SSH(cmd, host, provider string) (SSHResult, error)

SSH synchronously SSHs to a node running on provider and runs cmd. If there is no error performing the SSH, the stdout, stderr, and exit code are returned.

type SaturationTime

type SaturationTime struct {
	TimeToSaturate time.Duration `json:"timeToStaturate"`
	NumberOfNodes  int           `json:"numberOfNodes"`
	NumberOfPods   int           `json:"numberOfPods"`
	Throughput     float32       `json:"throughput"`
}

type SchedulingLatency

type SchedulingLatency struct {
	Scheduling LatencyMetric `json:"scheduling"`
	Binding    LatencyMetric `json:"binding"`
	Total      LatencyMetric `json:"total"`
}

type ServiceTestFixture

type ServiceTestFixture struct {
	ServiceName string
	Namespace   string
	Client      clientset.Interface

	TestId string
	Labels map[string]string

	Name  string
	Image string
	// contains filtered or unexported fields
}

Simple helper class to avoid too much boilerplate in tests

func NewServerTest

func NewServerTest(client clientset.Interface, namespace string, serviceName string) *ServiceTestFixture

func (*ServiceTestFixture) BuildServiceSpec

func (t *ServiceTestFixture) BuildServiceSpec() *v1.Service

Build default config for a service (which can then be changed)

func (*ServiceTestFixture) Cleanup

func (t *ServiceTestFixture) Cleanup() []error

func (*ServiceTestFixture) CreateRC

CreateRC creates a replication controller and records it for cleanup.

func (*ServiceTestFixture) CreateService

func (t *ServiceTestFixture) CreateService(service *v1.Service) (*v1.Service, error)

Create a service, and record it for cleanup

func (*ServiceTestFixture) CreateWebserverRC

func (t *ServiceTestFixture) CreateWebserverRC(replicas int32) *v1.ReplicationController

CreateWebserverRC creates rc-backed pods with the well-known webserver configuration and records it for cleanup.

func (*ServiceTestFixture) DeleteService

func (t *ServiceTestFixture) DeleteService(serviceName string) error

Delete a service, and remove it from the cleanup list

type ServiceTestJig

type ServiceTestJig struct {
	ID     string
	Name   string
	Client clientset.Interface
	Labels map[string]string
}

A test jig to help service testing.

func NewServiceTestJig

func NewServiceTestJig(client clientset.Interface, name string) *ServiceTestJig

NewServiceTestJig allocates and inits a new ServiceTestJig.

func (*ServiceTestJig) ChangeServiceNodePortOrFail

func (j *ServiceTestJig) ChangeServiceNodePortOrFail(namespace, name string, initial int) *v1.Service

func (*ServiceTestJig) ChangeServiceType

func (j *ServiceTestJig) ChangeServiceType(namespace, name string, newType v1.ServiceType, timeout time.Duration)

func (*ServiceTestJig) CreateOnlyLocalLoadBalancerService

func (j *ServiceTestJig) CreateOnlyLocalLoadBalancerService(namespace, serviceName string, timeout time.Duration, createPod bool,
	tweak func(svc *v1.Service)) *v1.Service

CreateOnlyLocalLoadBalancerService creates a loadbalancer service and waits for it to acquire an ingress IP. If createPod is true, it also creates an RC with 1 replica of the standard netexec container used everywhere in this test.

func (*ServiceTestJig) CreateOnlyLocalNodePortService

func (j *ServiceTestJig) CreateOnlyLocalNodePortService(namespace, serviceName string, createPod bool) *v1.Service

CreateOnlyLocalNodePortService creates a loadbalancer service and sanity checks its nodePort. If createPod is true, it also creates an RC with 1 replica of the standard netexec container used everywhere in this test.

func (*ServiceTestJig) CreateTCPServiceOrFail

func (j *ServiceTestJig) CreateTCPServiceOrFail(namespace string, tweak func(svc *v1.Service)) *v1.Service

CreateTCPServiceOrFail creates a new TCP Service based on the jig's defaults. Callers can provide a function to tweak the Service object before it is created.

func (*ServiceTestJig) CreateTCPServiceWithPort

func (j *ServiceTestJig) CreateTCPServiceWithPort(namespace string, tweak func(svc *v1.Service), port int32) *v1.Service

CreateTCPServiceWithPort creates a new TCP Service with given port based on the jig's defaults. Callers can provide a function to tweak the Service object before it is created.

func (*ServiceTestJig) CreateUDPServiceOrFail

func (j *ServiceTestJig) CreateUDPServiceOrFail(namespace string, tweak func(svc *v1.Service)) *v1.Service

CreateUDPServiceOrFail creates a new UDP Service based on the jig's defaults. Callers can provide a function to tweak the Service object before it is created.

func (*ServiceTestJig) GetEndpointNodes

func (j *ServiceTestJig) GetEndpointNodes(svc *v1.Service) map[string][]string

GetEndpointNodes returns a map of nodenames:external-ip on which the endpoints of the given Service are running.

func (*ServiceTestJig) GetHTTPContent

func (j *ServiceTestJig) GetHTTPContent(host string, port int, timeout time.Duration, url string) bytes.Buffer

func (*ServiceTestJig) GetNodes

func (j *ServiceTestJig) GetNodes(maxNodesForTest int) (nodes *v1.NodeList)

getNodes returns the first maxNodesForTest nodes. Useful in large clusters where we don't eg: want to create an endpoint per node.

func (*ServiceTestJig) GetNodesNames

func (j *ServiceTestJig) GetNodesNames(maxNodesForTest int) []string

func (*ServiceTestJig) LaunchEchoserverPodOnNode

func (j *ServiceTestJig) LaunchEchoserverPodOnNode(f *Framework, nodeName, podName string)

LaunchEchoserverPodOnNode launches a pod serving http on port 8080 to act as the target for source IP preservation test. The client's source ip would be echoed back by the web server.

func (*ServiceTestJig) LaunchNetexecPodOnNode

func (j *ServiceTestJig) LaunchNetexecPodOnNode(f *Framework, nodeName, podName string, httpPort, udpPort int32, hostNetwork bool)

func (*ServiceTestJig) RunOrFail

func (j *ServiceTestJig) RunOrFail(namespace string, tweak func(rc *v1.ReplicationController)) *v1.ReplicationController

RunOrFail creates a ReplicationController and Pod(s) and waits for the Pod(s) to be running. Callers can provide a function to tweak the RC object before it is created.

func (*ServiceTestJig) SanityCheckService

func (j *ServiceTestJig) SanityCheckService(svc *v1.Service, svcType v1.ServiceType)

func (*ServiceTestJig) TestHTTPHealthCheckNodePort

func (j *ServiceTestJig) TestHTTPHealthCheckNodePort(host string, port int, request string, tries int) (pass, fail int, statusMsg string)

func (*ServiceTestJig) TestNotReachableHTTP

func (j *ServiceTestJig) TestNotReachableHTTP(host string, port int, timeout time.Duration)

func (*ServiceTestJig) TestNotReachableUDP

func (j *ServiceTestJig) TestNotReachableUDP(host string, port int, timeout time.Duration)

func (*ServiceTestJig) TestReachableHTTP

func (j *ServiceTestJig) TestReachableHTTP(host string, port int, timeout time.Duration)

func (*ServiceTestJig) TestReachableUDP

func (j *ServiceTestJig) TestReachableUDP(host string, port int, timeout time.Duration)

func (*ServiceTestJig) UpdateService

func (j *ServiceTestJig) UpdateService(namespace, name string, update func(*v1.Service)) (*v1.Service, error)

UpdateService fetches a service, calls the update function on it, and then attempts to send the updated service. It tries up to 3 times in the face of timeouts and conflicts.

func (*ServiceTestJig) UpdateServiceOrFail

func (j *ServiceTestJig) UpdateServiceOrFail(namespace, name string, update func(*v1.Service)) *v1.Service

UpdateServiceOrFail fetches a service, calls the update function on it, and then attempts to send the updated service. It tries up to 3 times in the face of timeouts and conflicts.

func (*ServiceTestJig) WaitForEndpointOnNode

func (j *ServiceTestJig) WaitForEndpointOnNode(namespace, serviceName, nodeName string)

func (*ServiceTestJig) WaitForLoadBalancerDestroyOrFail

func (j *ServiceTestJig) WaitForLoadBalancerDestroyOrFail(namespace, name string, ip string, port int, timeout time.Duration) *v1.Service

func (*ServiceTestJig) WaitForLoadBalancerOrFail

func (j *ServiceTestJig) WaitForLoadBalancerOrFail(namespace, name string, timeout time.Duration) *v1.Service

type SingleContainerSummary

type SingleContainerSummary struct {
	Name string
	Cpu  float64
	Mem  uint64
}

type SingleLogSummary

type SingleLogSummary struct {
	AverageGenerationRate int
	NumberOfProbes        int
}

type TestContextType

type TestContextType struct {
	KubeConfig         string
	KubeContext        string
	KubeAPIContentType string
	KubeVolumeDir      string
	CertDir            string
	Host               string
	// TODO: Deprecating this over time... instead just use gobindata_util.go , see #23987.
	RepoRoot string

	Provider       string
	CloudConfig    CloudConfig
	KubectlPath    string
	OutputDir      string
	ReportDir      string
	ReportPrefix   string
	Prefix         string
	MinStartupPods int
	// Timeout for waiting for system pods to be running
	SystemPodsStartupTimeout time.Duration
	UpgradeTarget            string
	UpgradeImage             string
	PrometheusPushGateway    string
	ContainerRuntime         string
	MasterOSDistro           string
	NodeOSDistro             string
	VerifyServiceAccount     bool
	DeleteNamespace          bool
	DeleteNamespaceOnFailure bool
	AllowedNotReadyNodes     int
	CleanStart               bool
	// If set to 'true' or 'all' framework will start a goroutine monitoring resource usage of system add-ons.
	// It will read the data every 30 seconds from all Nodes and print summary during afterEach. If set to 'master'
	// only master Node will be monitored.
	GatherKubeSystemResourceUsageData string
	GatherLogsSizes                   bool
	GatherMetricsAfterTest            bool
	// Currently supported values are 'hr' for human-readable and 'json'. It's a comma separated list.
	OutputPrintType string
	// NodeSchedulableTimeout is the timeout for waiting for all nodes to be schedulable.
	NodeSchedulableTimeout time.Duration
	// CreateTestingNS is responsible for creating namespace used for executing e2e tests.
	// It accepts namespace base name, which will be prepended with e2e prefix, kube client
	// and labels to be applied to a namespace.
	CreateTestingNS CreateTestingNSFn
	// If set to true test will dump data about the namespace in which test was running.
	DumpLogsOnFailure bool
	// If the garbage collector is enabled in the kube-apiserver and kube-controller-manager.
	GarbageCollectorEnabled bool
	// FeatureGates is a set of key=value pairs that describe feature gates for alpha/experimental features.
	FeatureGates string
	// Node e2e specific test context
	NodeTestContextType
	// Federation e2e context
	FederatedKubeContext string

	Viper    string
	Cadvisor struct {
		MaxRetries      int
		SleepDurationMS int
	}

	LoggingSoak struct {
		Scale                    int
		MilliSecondsBetweenWaves int
	}
}
var TestContext TestContextType

type TestDataSummary

type TestDataSummary interface {
	PrintHumanReadable() string
	PrintJSON() string
}

type TimestampedSize

type TimestampedSize struct {
	// contains filtered or unexported fields
}

TimestampedSize contains a size together with a time of measurement.

type WorkItem

type WorkItem struct {
	// contains filtered or unexported fields
}

WorkItem is a command for a worker that contains an IP of machine from which we want to gather data and paths to all files we're interested in.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL