Return a MultiError from retry.
parent
a76133b5e3
commit
b85a90702a
|
|
@ -111,35 +111,13 @@ func StopHost(api libmachine.API) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
type multiError struct {
|
||||
Errors []error
|
||||
}
|
||||
|
||||
func (m *multiError) Collect(err error) {
|
||||
if err != nil {
|
||||
m.Errors = append(m.Errors, err)
|
||||
}
|
||||
}
|
||||
|
||||
func (m multiError) ToError() error {
|
||||
if len(m.Errors) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
errStrings := []string{}
|
||||
for _, err := range m.Errors {
|
||||
errStrings = append(errStrings, err.Error())
|
||||
}
|
||||
return fmt.Errorf(strings.Join(errStrings, "\n"))
|
||||
}
|
||||
|
||||
// DeleteHost deletes the host VM.
|
||||
func DeleteHost(api libmachine.API) error {
|
||||
host, err := api.Load(constants.MachineName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
m := multiError{}
|
||||
m := util.MultiError{}
|
||||
m.Collect(host.Driver.Remove())
|
||||
m.Collect(api.Remove(constants.MachineName))
|
||||
return m.ToError()
|
||||
|
|
|
|||
|
|
@ -234,26 +234,6 @@ func TestStopHost(t *testing.T) {
|
|||
if s, _ := h.Driver.GetState(); s != state.Stopped {
|
||||
t.Fatalf("Machine not stopped. Currently in state: %s", s)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestMultiError(t *testing.T) {
|
||||
m := multiError{}
|
||||
|
||||
m.Collect(fmt.Errorf("Error 1"))
|
||||
m.Collect(fmt.Errorf("Error 2"))
|
||||
|
||||
err := m.ToError()
|
||||
expected := `Error 1
|
||||
Error 2`
|
||||
if err.Error() != expected {
|
||||
t.Fatalf("%s != %s", err, expected)
|
||||
}
|
||||
|
||||
m = multiError{}
|
||||
if err := m.ToError(); err != nil {
|
||||
t.Fatalf("Unexpected error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteHost(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -73,14 +73,16 @@ func Retry(attempts int, callback func() error) (err error) {
|
|||
}
|
||||
|
||||
func RetryAfter(attempts int, callback func() error, d time.Duration) (err error) {
|
||||
m := MultiError{}
|
||||
for i := 0; i < attempts; i++ {
|
||||
err = callback()
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
m.Collect(err)
|
||||
time.Sleep(d)
|
||||
}
|
||||
return err
|
||||
return m.ToError()
|
||||
}
|
||||
|
||||
func GetLocalkubeDownloadURL(versionOrURL string, filename string) (string, error) {
|
||||
|
|
@ -102,3 +104,25 @@ func GetLocalkubeDownloadURL(versionOrURL string, filename string) (string, erro
|
|||
}
|
||||
return fmt.Sprintf("%s%s/%s", constants.LocalkubeDownloadURLPrefix, versionOrURL, filename), nil
|
||||
}
|
||||
|
||||
type MultiError struct {
|
||||
Errors []error
|
||||
}
|
||||
|
||||
func (m *MultiError) Collect(err error) {
|
||||
if err != nil {
|
||||
m.Errors = append(m.Errors, err)
|
||||
}
|
||||
}
|
||||
|
||||
func (m MultiError) ToError() error {
|
||||
if len(m.Errors) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
errStrings := []string{}
|
||||
for _, err := range m.Errors {
|
||||
errStrings = append(errStrings, err.Error())
|
||||
}
|
||||
return fmt.Errorf(strings.Join(errStrings, "\n"))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,3 +89,22 @@ func TestGetLocalkubeDownloadURL(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMultiError(t *testing.T) {
|
||||
m := MultiError{}
|
||||
|
||||
m.Collect(fmt.Errorf("Error 1"))
|
||||
m.Collect(fmt.Errorf("Error 2"))
|
||||
|
||||
err := m.ToError()
|
||||
expected := `Error 1
|
||||
Error 2`
|
||||
if err.Error() != expected {
|
||||
t.Fatalf("%s != %s", err, expected)
|
||||
}
|
||||
|
||||
m = MultiError{}
|
||||
if err := m.ToError(); err != nil {
|
||||
t.Fatalf("Unexpected error: %s", err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue