mirror of https://github.com/knative/pkg.git
Added test utilities methods (#902)
* Added WaitForPodState to wait a state of a single pod Signed-off-by: Francesco Guardiani <francescoguard@gmail.com> * Added WaitForServiceEndpoints Signed-off-by: Francesco Guardiani <francescoguard@gmail.com> * Changes from review Signed-off-by: Francesco Guardiani <francescoguard@gmail.com> * Change from review Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
This commit is contained in:
parent
06d6b25dd6
commit
00cee157bd
|
@ -75,6 +75,52 @@ func WaitForPodListState(client *KubeClient, inState func(p *corev1.PodList) (bo
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WaitForPodState polls the status of the specified Pod
|
||||||
|
// from client every interval until inState returns `true` indicating it
|
||||||
|
// is done, returns an error or timeout. desc will be used to name the metric
|
||||||
|
// that is emitted to track how long it took to get into the state checked by inState.
|
||||||
|
func WaitForPodState(client *KubeClient, inState func(p *corev1.Pod) (bool, error), name string, namespace string) error {
|
||||||
|
p := client.Kube.CoreV1().Pods(namespace)
|
||||||
|
span := logging.GetEmitableSpan(context.Background(), "WaitForPodState/"+name)
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
|
return wait.PollImmediate(interval, podTimeout, func() (bool, error) {
|
||||||
|
p, err := p.Get(name, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return inState(p)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WaitForServiceHasAtLeastOneEndpoint polls the status of the specified Service
|
||||||
|
// from client every interval until number of service endpoints = numOfEndpoints
|
||||||
|
func WaitForServiceEndpoints(client *KubeClient, svcName string, svcNamespace string, numOfEndpoints int) error {
|
||||||
|
endpointsService := client.Kube.CoreV1().Endpoints(svcNamespace)
|
||||||
|
span := logging.GetEmitableSpan(context.Background(), "WaitForServiceHasAtLeastOneEndpoint/"+svcName)
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
|
return wait.PollImmediate(interval, podTimeout, func() (bool, error) {
|
||||||
|
endpoint, err := endpointsService.Get(svcName, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return countEndpointsNum(endpoint) == numOfEndpoints, nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func countEndpointsNum(e *corev1.Endpoints) int {
|
||||||
|
if e == nil || e.Subsets == nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
num := 0
|
||||||
|
for _, sub := range e.Subsets {
|
||||||
|
num += len(sub.Addresses)
|
||||||
|
}
|
||||||
|
return num
|
||||||
|
}
|
||||||
|
|
||||||
// GetConfigMap gets the configmaps for a given namespace
|
// GetConfigMap gets the configmaps for a given namespace
|
||||||
func GetConfigMap(client *KubeClient, namespace string) k8styped.ConfigMapInterface {
|
func GetConfigMap(client *KubeClient, namespace string) k8styped.ConfigMapInterface {
|
||||||
return client.Kube.CoreV1().ConfigMaps(namespace)
|
return client.Kube.CoreV1().ConfigMaps(namespace)
|
||||||
|
|
Loading…
Reference in New Issue