mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-12 13:31:52 +00:00
Address PR comments 2
This commit is contained in:
parent
3d08c73767
commit
b9f9d130d7
@ -36,6 +36,8 @@ import (
|
|||||||
var FileExtensions = []string{".json", ".yaml", ".yml"}
|
var FileExtensions = []string{".json", ".yaml", ".yml"}
|
||||||
var InputExtensions = append(FileExtensions, "stdin")
|
var InputExtensions = append(FileExtensions, "stdin")
|
||||||
|
|
||||||
|
const defaultHttpGetAttempts int = 3
|
||||||
|
|
||||||
// Builder provides convenience functions for taking arguments and parameters
|
// Builder provides convenience functions for taking arguments and parameters
|
||||||
// from the command line and converting them to a list of resources to iterate
|
// from the command line and converting them to a list of resources to iterate
|
||||||
// over using the Visitor interface.
|
// over using the Visitor interface.
|
||||||
@ -109,7 +111,7 @@ func (b *Builder) FilenameParam(enforceNamespace, recursive bool, paths ...strin
|
|||||||
b.errs = append(b.errs, fmt.Errorf("the URL passed to filename %q is not valid: %v", s, err))
|
b.errs = append(b.errs, fmt.Errorf("the URL passed to filename %q is not valid: %v", s, err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
b.URL(url)
|
b.URL(defaultHttpGetAttempts, url)
|
||||||
default:
|
default:
|
||||||
b.Path(recursive, s)
|
b.Path(recursive, s)
|
||||||
}
|
}
|
||||||
@ -123,11 +125,12 @@ func (b *Builder) FilenameParam(enforceNamespace, recursive bool, paths ...strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// URL accepts a number of URLs directly.
|
// URL accepts a number of URLs directly.
|
||||||
func (b *Builder) URL(urls ...*url.URL) *Builder {
|
func (b *Builder) URL(httpAttemptCount int, urls ...*url.URL) *Builder {
|
||||||
for _, u := range urls {
|
for _, u := range urls {
|
||||||
b.paths = append(b.paths, &URLVisitor{
|
b.paths = append(b.paths, &URLVisitor{
|
||||||
URL: u,
|
URL: u,
|
||||||
StreamVisitor: NewStreamVisitor(nil, b.mapper, u.String(), b.schema),
|
StreamVisitor: NewStreamVisitor(nil, b.mapper, u.String(), b.schema),
|
||||||
|
HttpAttemptCount: httpAttemptCount,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
|
@ -222,10 +222,11 @@ func ValidateSchema(data []byte, schema validation.Schema) error {
|
|||||||
type URLVisitor struct {
|
type URLVisitor struct {
|
||||||
URL *url.URL
|
URL *url.URL
|
||||||
*StreamVisitor
|
*StreamVisitor
|
||||||
|
HttpAttemptCount int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *URLVisitor) Visit(fn VisitorFunc) error {
|
func (v *URLVisitor) Visit(fn VisitorFunc) error {
|
||||||
body, err := readHttpWithRetries(httpgetImpl, time.Second, v.URL.String())
|
body, err := readHttpWithRetries(httpgetImpl, time.Second, v.URL.String(), v.HttpAttemptCount)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -234,11 +235,14 @@ func (v *URLVisitor) Visit(fn VisitorFunc) error {
|
|||||||
return v.StreamVisitor.Visit(fn)
|
return v.StreamVisitor.Visit(fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
// readHttpWithRetries tries to http.Get the v.URL 3 times before giving up.
|
// readHttpWithRetries tries to http.Get the v.URL retries times before giving up.
|
||||||
func readHttpWithRetries(get httpget, duration time.Duration, u string) (io.ReadCloser, error) {
|
func readHttpWithRetries(get httpget, duration time.Duration, u string, attempts int) (io.ReadCloser, error) {
|
||||||
var err error
|
var err error
|
||||||
var body io.ReadCloser
|
var body io.ReadCloser
|
||||||
for i := 0; i < 3; i++ {
|
if attempts <= 0 {
|
||||||
|
return nil, fmt.Errorf("http attempts must be greater than 0, was %d", attempts)
|
||||||
|
}
|
||||||
|
for i := 0; i < attempts; i++ {
|
||||||
var statusCode int
|
var statusCode int
|
||||||
var status string
|
var status string
|
||||||
if i > 0 {
|
if i > 0 {
|
||||||
|
@ -37,7 +37,7 @@ func TestVisitorHttpGet(t *testing.T) {
|
|||||||
return 0, "", nil, expectedErr
|
return 0, "", nil, expectedErr
|
||||||
}
|
}
|
||||||
return 0, "", nil, fmt.Errorf("Unexpected error")
|
return 0, "", nil, fmt.Errorf("Unexpected error")
|
||||||
}, 0, "hello")
|
}, 0, "hello", 3)
|
||||||
assert.Equal(t, expectedErr, actualErr)
|
assert.Equal(t, expectedErr, actualErr)
|
||||||
assert.Nil(t, actualBytes)
|
assert.Nil(t, actualBytes)
|
||||||
assert.Equal(t, 3, i)
|
assert.Equal(t, 3, i)
|
||||||
@ -48,7 +48,7 @@ func TestVisitorHttpGet(t *testing.T) {
|
|||||||
assert.Equal(t, "hello", url)
|
assert.Equal(t, "hello", url)
|
||||||
i++
|
i++
|
||||||
return 501, "Status", nil, nil
|
return 501, "Status", nil, nil
|
||||||
}, 0, "hello")
|
}, 0, "hello", 3)
|
||||||
assert.Error(t, actualErr)
|
assert.Error(t, actualErr)
|
||||||
assert.Nil(t, actualBytes)
|
assert.Nil(t, actualBytes)
|
||||||
assert.Equal(t, 3, i)
|
assert.Equal(t, 3, i)
|
||||||
@ -59,14 +59,35 @@ func TestVisitorHttpGet(t *testing.T) {
|
|||||||
assert.Equal(t, "hello", url)
|
assert.Equal(t, "hello", url)
|
||||||
i++
|
i++
|
||||||
return 300, "Status", nil, nil
|
return 300, "Status", nil, nil
|
||||||
}, 0, "hello")
|
}, 0, "hello", 3)
|
||||||
assert.Error(t, actualErr)
|
assert.Error(t, actualErr)
|
||||||
assert.Nil(t, actualBytes)
|
assert.Nil(t, actualBytes)
|
||||||
assert.Equal(t, 1, i)
|
assert.Equal(t, 1, i)
|
||||||
|
|
||||||
// Test Success
|
// Test attempt count is respected
|
||||||
|
i = 0
|
||||||
|
actualBytes, actualErr = readHttpWithRetries(func(url string) (int, string, io.ReadCloser, error) {
|
||||||
|
assert.Equal(t, "hello", url)
|
||||||
|
i++
|
||||||
|
return 501, "Status", nil, nil
|
||||||
|
}, 0, "hello", 1)
|
||||||
|
assert.Error(t, actualErr)
|
||||||
|
assert.Nil(t, actualBytes)
|
||||||
|
assert.Equal(t, 1, i)
|
||||||
|
|
||||||
|
// Test attempts less than 1 results in an error
|
||||||
i = 0
|
i = 0
|
||||||
b := bytes.Buffer{}
|
b := bytes.Buffer{}
|
||||||
|
actualBytes, actualErr = readHttpWithRetries(func(url string) (int, string, io.ReadCloser, error) {
|
||||||
|
return 200, "Status", ioutil.NopCloser(&b), nil
|
||||||
|
}, 0, "hello", 0)
|
||||||
|
assert.Error(t, actualErr)
|
||||||
|
assert.Nil(t, actualBytes)
|
||||||
|
assert.Equal(t, 0, i)
|
||||||
|
|
||||||
|
// Test Success
|
||||||
|
i = 0
|
||||||
|
b = bytes.Buffer{}
|
||||||
actualBytes, actualErr = readHttpWithRetries(func(url string) (int, string, io.ReadCloser, error) {
|
actualBytes, actualErr = readHttpWithRetries(func(url string) (int, string, io.ReadCloser, error) {
|
||||||
assert.Equal(t, "hello", url)
|
assert.Equal(t, "hello", url)
|
||||||
i++
|
i++
|
||||||
@ -74,7 +95,7 @@ func TestVisitorHttpGet(t *testing.T) {
|
|||||||
return 200, "Status", ioutil.NopCloser(&b), nil
|
return 200, "Status", ioutil.NopCloser(&b), nil
|
||||||
}
|
}
|
||||||
return 501, "Status", nil, nil
|
return 501, "Status", nil, nil
|
||||||
}, 0, "hello")
|
}, 0, "hello", 3)
|
||||||
assert.Nil(t, actualErr)
|
assert.Nil(t, actualErr)
|
||||||
assert.NotNil(t, actualBytes)
|
assert.NotNil(t, actualBytes)
|
||||||
assert.Equal(t, 2, i)
|
assert.Equal(t, 2, i)
|
||||||
|
Loading…
Reference in New Issue
Block a user