diff --git a/pkg/minikube/cluster/cluster.go b/pkg/minikube/cluster/cluster.go index a43f4ade1d..0e5ae9fb0e 100644 --- a/pkg/minikube/cluster/cluster.go +++ b/pkg/minikube/cluster/cluster.go @@ -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() diff --git a/pkg/minikube/cluster/cluster_test.go b/pkg/minikube/cluster/cluster_test.go index 162b0edb31..8ccd0e13e0 100644 --- a/pkg/minikube/cluster/cluster_test.go +++ b/pkg/minikube/cluster/cluster_test.go @@ -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) { diff --git a/pkg/util/utils.go b/pkg/util/utils.go index 8507cbfae3..6e93e725aa 100644 --- a/pkg/util/utils.go +++ b/pkg/util/utils.go @@ -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")) +} diff --git a/pkg/util/utils_test.go b/pkg/util/utils_test.go index b62bfeb48a..eae8574186 100644 --- a/pkg/util/utils_test.go +++ b/pkg/util/utils_test.go @@ -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) + } +}