mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
refactor and re-add exists
This commit is contained in:
parent
2b3e9d5a98
commit
dd7626bbf1
@ -167,7 +167,7 @@ var _ = framework.KubeDescribe("Service [Feature:Federation]", func() {
|
||||
// pods, perhaps in the BeforeEach, and then just poll until we get
|
||||
// successes/failures from them all.
|
||||
for _, name := range svcDNSNames {
|
||||
discoverService(f, name)
|
||||
discoverService(f, name, true)
|
||||
}
|
||||
})
|
||||
|
||||
@ -191,7 +191,7 @@ var _ = framework.KubeDescribe("Service [Feature:Federation]", func() {
|
||||
fmt.Sprintf("%s.%s.%s.svc.cluster.local.", FederatedServiceName, f.Namespace.Name, federationName),
|
||||
}
|
||||
for _, name := range svcDNSNames {
|
||||
discoverService(f, name)
|
||||
discoverService(f, name, true)
|
||||
}
|
||||
|
||||
// TODO(mml): Unclear how to make this meaningful and not terribly
|
||||
@ -286,8 +286,50 @@ func createService(fcs *federation_release_1_3.Clientset, clusterClientSets []*r
|
||||
}
|
||||
}
|
||||
|
||||
func discoverService(f *framework.Framework, name string) {
|
||||
func podExitCodeDetector(f *framework.Framework, name string, code int32) func() error {
|
||||
// If we ever get any container logs, stash them here.
|
||||
logs := ""
|
||||
|
||||
logerr := func(err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if logs == "" {
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf("%s (%v)", logs, err)
|
||||
}
|
||||
|
||||
return func() error {
|
||||
pod, err := f.Client.Pods(f.Namespace.Name).Get(name)
|
||||
if err != nil {
|
||||
return logerr(err)
|
||||
}
|
||||
if len(pod.Status.ContainerStatuses) < 1 {
|
||||
return logerr(fmt.Errorf("no container statuses"))
|
||||
}
|
||||
|
||||
// Best effort attempt to grab pod logs for debugging
|
||||
logs, err = framework.GetPodLogs(f.Client, f.Namespace.Name, name, pod.Spec.Containers[0].Name)
|
||||
if err != nil {
|
||||
framework.Logf("Cannot fetch pod logs: %v", err)
|
||||
}
|
||||
|
||||
status := pod.Status.ContainerStatuses[0]
|
||||
if status.State.Terminated == nil {
|
||||
return logerr(fmt.Errorf("container is not in terminated state"))
|
||||
}
|
||||
if status.State.Terminated.ExitCode == code {
|
||||
return nil
|
||||
}
|
||||
|
||||
return logerr(fmt.Errorf("exited %d", status.State.Terminated.ExitCode))
|
||||
}
|
||||
}
|
||||
|
||||
func discoverService(f *framework.Framework, name string, exists bool) {
|
||||
command := []string{"sh", "-c", fmt.Sprintf("until nslookup '%s'; do sleep 1; done", name)}
|
||||
By(fmt.Sprintf("Looking up %q", name))
|
||||
|
||||
defer f.Client.Pods(f.Namespace.Name).Delete(FederatedServicePod, api.NewDeleteOptions(0))
|
||||
|
||||
@ -312,44 +354,12 @@ func discoverService(f *framework.Framework, name string) {
|
||||
Expect(err).
|
||||
NotTo(HaveOccurred(), "Trying to create pod to run %q", command)
|
||||
|
||||
// If we ever get any container logs, stash them here.
|
||||
logs := ""
|
||||
|
||||
logerr := func(err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
if logs == "" {
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf("%s (%v)", logs, err)
|
||||
if exists {
|
||||
// TODO(mml): Eventually check the IP address is correct, too.
|
||||
Eventually(podExitCodeDetector(f, FederatedServicePod, 0), DNSTTL, time.Second*2).
|
||||
Should(BeNil(), "%q should exit 0, but it never did", command)
|
||||
} else {
|
||||
Consistently(podExitCodeDetector(f, FederatedServicePod, 0), DNSTTL, time.Second*2).
|
||||
ShouldNot(BeNil(), "%q should never exit 0, but it did", command)
|
||||
}
|
||||
|
||||
// TODO(mml): Eventually check the IP address is correct, too.
|
||||
Eventually(func() error {
|
||||
pod, err := f.Client.Pods(f.Namespace.Name).Get(FederatedServicePod)
|
||||
if err != nil {
|
||||
return logerr(err)
|
||||
}
|
||||
if len(pod.Status.ContainerStatuses) < 1 {
|
||||
return logerr(fmt.Errorf("no container statuses"))
|
||||
}
|
||||
|
||||
// Best effort attempt to grab pod logs for debugging
|
||||
logs, err = framework.GetPodLogs(f.Client, f.Namespace.Name, FederatedServicePod, "federated-service-discovery-container")
|
||||
if err != nil {
|
||||
framework.Logf("Cannot fetch pod logs: %v", err)
|
||||
}
|
||||
|
||||
status := pod.Status.ContainerStatuses[0]
|
||||
if status.State.Terminated == nil {
|
||||
return logerr(fmt.Errorf("container is not in terminated state"))
|
||||
}
|
||||
if status.State.Terminated.ExitCode == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return logerr(fmt.Errorf("exited %d", status.State.Terminated.ExitCode))
|
||||
}, DNSTTL, time.Second*2).
|
||||
Should(BeNil(), "%q should exit 0, but it never did", command)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user