github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/command/plugin/shared/handle_error_test.go (about) 1 package shared_test 2 3 import ( 4 "encoding/json" 5 "errors" 6 7 "code.cloudfoundry.org/cli/actor/pluginaction" 8 "code.cloudfoundry.org/cli/api/plugin/pluginerror" 9 . "code.cloudfoundry.org/cli/command/plugin/shared" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/ginkgo/extensions/table" 12 . "github.com/onsi/gomega" 13 ) 14 15 var _ = Describe("HandleError", func() { 16 err := errors.New("some-error") 17 jsonErr := new(json.SyntaxError) 18 genericErr := errors.New("some-generic-error") 19 20 DescribeTable("error translations", 21 func(passedInErr error, expectedErr error) { 22 actualErr := HandleError(passedInErr) 23 Expect(actualErr).To(MatchError(expectedErr)) 24 }, 25 26 Entry("json.SyntaxError -> JSONSyntaxError", 27 jsonErr, 28 JSONSyntaxError{Err: jsonErr}, 29 ), 30 31 Entry("pluginerror.RawHTTPStatusError -> DownloadPluginHTTPError", 32 pluginerror.RawHTTPStatusError{Status: "some status"}, 33 DownloadPluginHTTPError{Message: "some status"}, 34 ), 35 Entry("pluginerror.SSLValidationHostnameError -> DownloadPluginHTTPError", 36 pluginerror.SSLValidationHostnameError{Message: "some message"}, 37 DownloadPluginHTTPError{Message: "Hostname does not match SSL Certificate (some message)"}, 38 ), 39 Entry("pluginerror.UnverifiedServerError -> DownloadPluginHTTPError", 40 pluginerror.UnverifiedServerError{URL: "some URL"}, 41 DownloadPluginHTTPError{Message: "x509: certificate signed by unknown authority"}, 42 ), 43 44 Entry("pluginaction.AddPluginRepositoryError -> AddPluginRepositoryError", 45 pluginaction.AddPluginRepositoryError{Name: "some-repo", URL: "some-URL", Message: "404"}, 46 AddPluginRepositoryError{Name: "some-repo", URL: "some-URL", Message: "404"}), 47 Entry("pluginaction.GettingPluginRepositoryError -> GettingPluginRepositoryError", 48 pluginaction.GettingPluginRepositoryError{Name: "some-repo", Message: "404"}, 49 GettingPluginRepositoryError{Name: "some-repo", Message: "404"}), 50 Entry("pluginaction.NoCompatibleBinaryError -> NoCompatibleBinaryError", 51 pluginaction.NoCompatibleBinaryError{}, 52 NoCompatibleBinaryError{}), 53 Entry("pluginaction.PluginCommandConflictError -> PluginCommandConflictError", 54 pluginaction.PluginCommandsConflictError{ 55 PluginName: "some-plugin", 56 PluginVersion: "1.1.1", 57 CommandNames: []string{"some-command", "some-other-command"}, 58 CommandAliases: []string{"sc", "soc"}, 59 }, 60 PluginCommandsConflictError{ 61 PluginName: "some-plugin", 62 PluginVersion: "1.1.1", 63 CommandNames: []string{"some-command", "some-other-command"}, 64 CommandAliases: []string{"sc", "soc"}, 65 }), 66 Entry("pluginaction.PluginInvalidError -> PluginInvalidError", 67 pluginaction.PluginInvalidError{}, 68 PluginInvalidError{}), 69 Entry("pluginaction.PluginInvalidError -> PluginInvalidError", 70 pluginaction.PluginInvalidError{Err: genericErr}, 71 PluginInvalidError{Err: genericErr}), 72 Entry("pluginaction.PluginNotFoundError -> PluginNotFoundError", 73 pluginaction.PluginNotFoundError{PluginName: "some-plugin"}, 74 PluginNotFoundError{PluginName: "some-plugin"}), 75 Entry("pluginaction.RepositoryNameTakenError -> RepositoryNameTakenError", 76 pluginaction.RepositoryNameTakenError{Name: "some-repo"}, 77 RepositoryNameTakenError{Name: "some-repo"}), 78 Entry("pluginaction.RepositoryNotRegisteredError -> RepositoryNotRegisteredError", 79 pluginaction.RepositoryNotRegisteredError{Name: "some-repo"}, 80 RepositoryNotRegisteredError{Name: "some-repo"}), 81 82 Entry("default case -> original error", 83 err, 84 err), 85 ) 86 87 It("returns nil for a common.PluginInstallationCancelled error", func() { 88 err := HandleError(PluginInstallationCancelled{}) 89 Expect(err).To(BeNil()) 90 }) 91 92 It("returns nil for a nil error", func() { 93 nilErr := HandleError(nil) 94 Expect(nilErr).To(BeNil()) 95 }) 96 })