Return a MultiError from retry.
parent
a76133b5e3
commit
b85a90702a
|
|
@ -111,35 +111,13 @@ func StopHost(api libmachine.API) error {
|
||||||
return nil
|
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.
|
// DeleteHost deletes the host VM.
|
||||||
func DeleteHost(api libmachine.API) error {
|
func DeleteHost(api libmachine.API) error {
|
||||||
host, err := api.Load(constants.MachineName)
|
host, err := api.Load(constants.MachineName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
m := multiError{}
|
m := util.MultiError{}
|
||||||
m.Collect(host.Driver.Remove())
|
m.Collect(host.Driver.Remove())
|
||||||
m.Collect(api.Remove(constants.MachineName))
|
m.Collect(api.Remove(constants.MachineName))
|
||||||
return m.ToError()
|
return m.ToError()
|
||||||
|
|
|
||||||
|
|
@ -234,26 +234,6 @@ func TestStopHost(t *testing.T) {
|
||||||
if s, _ := h.Driver.GetState(); s != state.Stopped {
|
if s, _ := h.Driver.GetState(); s != state.Stopped {
|
||||||
t.Fatalf("Machine not stopped. Currently in state: %s", s)
|
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) {
|
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) {
|
func RetryAfter(attempts int, callback func() error, d time.Duration) (err error) {
|
||||||
|
m := MultiError{}
|
||||||
for i := 0; i < attempts; i++ {
|
for i := 0; i < attempts; i++ {
|
||||||
err = callback()
|
err = callback()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
m.Collect(err)
|
||||||
time.Sleep(d)
|
time.Sleep(d)
|
||||||
}
|
}
|
||||||
return err
|
return m.ToError()
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetLocalkubeDownloadURL(versionOrURL string, filename string) (string, error) {
|
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
|
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