Merge pull request #52035 from yujuhong/fix-net-util

Automatic merge from submit-queue

e2e: retry on 404 error for service reachability tests
This commit is contained in:
Kubernetes Submit Queue 2017-09-06 17:55:06 -07:00 committed by GitHub
commit 5f184c56b3
3 changed files with 26 additions and 2 deletions

View File

@ -650,11 +650,20 @@ func TestReachableHTTP(ip string, port int, request string, expect string) (bool
return TestReachableHTTPWithContent(ip, port, request, expect, nil) return TestReachableHTTPWithContent(ip, port, request, expect, nil)
} }
func TestReachableHTTPWithRetriableErrorCodes(ip string, port int, request string, expect string, retriableErrCodes []int) (bool, error) {
return TestReachableHTTPWithContentTimeoutWithRetriableErrorCodes(ip, port, request, expect, nil, retriableErrCodes, time.Second*5)
}
func TestReachableHTTPWithContent(ip string, port int, request string, expect string, content *bytes.Buffer) (bool, error) { func TestReachableHTTPWithContent(ip string, port int, request string, expect string, content *bytes.Buffer) (bool, error) {
return TestReachableHTTPWithContentTimeout(ip, port, request, expect, content, 5*time.Second) return TestReachableHTTPWithContentTimeout(ip, port, request, expect, content, 5*time.Second)
} }
func TestReachableHTTPWithContentTimeout(ip string, port int, request string, expect string, content *bytes.Buffer, timeout time.Duration) (bool, error) { func TestReachableHTTPWithContentTimeout(ip string, port int, request string, expect string, content *bytes.Buffer, timeout time.Duration) (bool, error) {
return TestReachableHTTPWithContentTimeoutWithRetriableErrorCodes(ip, port, request, expect, content, []int{}, timeout)
}
func TestReachableHTTPWithContentTimeoutWithRetriableErrorCodes(ip string, port int, request string, expect string, content *bytes.Buffer, retriableErrCodes []int, timeout time.Duration) (bool, error) {
url := fmt.Sprintf("http://%s:%d%s", ip, port, request) url := fmt.Sprintf("http://%s:%d%s", ip, port, request)
if ip == "" { if ip == "" {
Failf("Got empty IP for reachability check (%s)", url) Failf("Got empty IP for reachability check (%s)", url)
@ -679,6 +688,11 @@ func TestReachableHTTPWithContentTimeout(ip string, port int, request string, ex
return false, nil return false, nil
} }
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
for _, code := range retriableErrCodes {
if resp.StatusCode == code {
return false, nil
}
}
return false, fmt.Errorf("received non-success return status %q trying to access %s; got body: %s", return false, fmt.Errorf("received non-success return status %q trying to access %s; got body: %s",
resp.Status, url, string(body)) resp.Status, url, string(body))
} }

View File

@ -832,7 +832,13 @@ func (j *ServiceTestJig) LaunchEchoserverPodOnNode(f *Framework, nodeName, podNa
} }
func (j *ServiceTestJig) TestReachableHTTP(host string, port int, timeout time.Duration) { func (j *ServiceTestJig) TestReachableHTTP(host string, port int, timeout time.Duration) {
if err := wait.PollImmediate(Poll, timeout, func() (bool, error) { return TestReachableHTTP(host, port, "/echo?msg=hello", "hello") }); err != nil { j.TestReachableHTTPWithRetriableErrorCodes(host, port, []int{}, timeout)
}
func (j *ServiceTestJig) TestReachableHTTPWithRetriableErrorCodes(host string, port int, retriableErrCodes []int, timeout time.Duration) {
if err := wait.PollImmediate(Poll, timeout, func() (bool, error) {
return TestReachableHTTPWithRetriableErrorCodes(host, port, "/echo?msg=hello", "hello", retriableErrCodes)
}); err != nil {
Failf("Could not reach HTTP service through %v:%v after %v: %v", host, port, timeout, err) Failf("Could not reach HTTP service through %v:%v after %v: %v", host, port, timeout, err)
} }
} }

View File

@ -18,6 +18,7 @@ package network
import ( import (
"fmt" "fmt"
"net/http"
"time" "time"
computealpha "google.golang.org/api/compute/v0.alpha" computealpha "google.golang.org/api/compute/v0.alpha"
@ -153,7 +154,10 @@ func waitAndVerifyLBWithTier(jig *framework.ServiceTestJig, ns, svcName, existin
Expect(ingressIP).To(Equal(svc.Spec.LoadBalancerIP)) Expect(ingressIP).To(Equal(svc.Spec.LoadBalancerIP))
} }
jig.SanityCheckService(svc, v1.ServiceTypeLoadBalancer) jig.SanityCheckService(svc, v1.ServiceTypeLoadBalancer)
jig.TestReachableHTTP(ingressIP, svcPort, checkTimeout) // If the IP has been used by previous test, sometimes we get the lingering
// 404 errors even after the LB is long gone. Tolerate and retry until the
// the new LB is fully established since this feature is still Alpha in GCP.
jig.TestReachableHTTPWithRetriableErrorCodes(ingressIP, svcPort, []int{http.StatusNotFound}, checkTimeout)
// Verify the network tier matches the desired. // Verify the network tier matches the desired.
svcNetTier, err := gcecloud.GetServiceNetworkTier(svc) svcNetTier, err := gcecloud.GetServiceNetworkTier(svc)