github.com/cloudfoundry/cli@v7.1.0+incompatible/integration/shared/plugin/uninstall_plugin_command_test.go (about) 1 package plugin 2 3 import ( 4 "os" 5 "path/filepath" 6 7 "code.cloudfoundry.org/cli/integration/helpers" 8 "code.cloudfoundry.org/cli/util/generic" 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 . "github.com/onsi/gomega/gbytes" 12 . "github.com/onsi/gomega/gexec" 13 ) 14 15 var _ = Describe("uninstall-plugin command", func() { 16 Describe("help", func() { 17 When("--help flag is provided", func() { 18 It("displays command usage to output", func() { 19 session := helpers.CF("uninstall-plugin", "--help") 20 Eventually(session).Should(Say("NAME:")) 21 Eventually(session).Should(Say("uninstall-plugin - Uninstall CLI plugin")) 22 Eventually(session).Should(Say("USAGE:")) 23 Eventually(session).Should(Say("cf uninstall-plugin PLUGIN-NAME")) 24 Eventually(session).Should(Say("SEE ALSO:")) 25 Eventually(session).Should(Say("plugins")) 26 Eventually(session).Should(Exit(0)) 27 }) 28 }) 29 }) 30 31 When("the plugin is not installed", func() { 32 It("informs the user that no such plugin is present and exits 1", func() { 33 session := helpers.CF("uninstall-plugin", "bananarama") 34 Eventually(session.Err).Should(Say(`Plugin bananarama does not exist\.`)) 35 Eventually(session).Should(Exit(1)) 36 }) 37 }) 38 39 When("the plugin is installed", func() { 40 BeforeEach(func() { 41 helpers.InstallConfigurablePlugin("configurable_plugin", "banana-plugin-name-1", "2.0.1", []helpers.PluginCommand{ 42 {Name: "banana-command-1", Help: "banana-command-1"}, 43 }) 44 helpers.InstallConfigurablePlugin("configurable_plugin", "banana-plugin-name-2", "1.4.3", []helpers.PluginCommand{ 45 {Name: "banana-command-2", Help: "banana-command-2"}, 46 }) 47 }) 48 49 When("no errors are encountered", func() { 50 It("does not list the plugin after it is uninstalled", func() { 51 session := helpers.CF("uninstall-plugin", "banana-plugin-name-1") 52 Eventually(session).Should(Say(`Uninstalling plugin banana-plugin-name-1\.\.\.`)) 53 // Test that RPC works 54 Eventually(session).Should(Say("[0-9]{1,5} CLI-MESSAGE-UNINSTALL")) 55 Eventually(session).Should(Say("OK")) 56 Eventually(session).Should(Say(`Plugin banana-plugin-name-1 2\.0\.1 successfully uninstalled\.`)) 57 Eventually(session).Should(Exit(0)) 58 59 session = helpers.CF("plugins") 60 Consistently(session).ShouldNot(Say("banana-plugin-name-1")) 61 Eventually(session).Should(Say("banana-plugin-name-2")) 62 Eventually(session).Should(Exit(0)) 63 }) 64 65 It("matches the plugin name case insensitive", func() { 66 session := helpers.CF("uninstall-plugin", "BaNaNa-PlUgIn-NaMe-1") 67 Eventually(session).Should(Say(`Uninstalling plugin banana-plugin-name-1\.\.\.`)) 68 Eventually(session).Should(Say("OK")) 69 Eventually(session).Should(Say(`Plugin banana-plugin-name-1 2\.0\.1 successfully uninstalled\.`)) 70 Eventually(session).Should(Exit(0)) 71 }) 72 }) 73 74 When("the plugin encounters an error during cleanup", func() { 75 BeforeEach(func() { 76 helpers.InstallConfigurablePlugin("configurable_plugin_fails_uninstall", "failing-plugin", "2.0.1", []helpers.PluginCommand{ 77 {Name: "failing-command-1", Help: "failing-command-1"}, 78 }) 79 }) 80 81 It("exits with an error but still uninstalls the plugin", func() { 82 session := helpers.CF("uninstall-plugin", "failing-plugin") 83 Eventually(session).Should(Say(`Uninstalling plugin failing-plugin\.\.\.`)) 84 Eventually(session.Err).Should(Say("I'm failing...I'm failing...")) 85 Eventually(session).Should(Say("FAILED")) 86 Eventually(session.Err).Should(Say(`The plugin's uninstall method returned an unexpected error\.`)) 87 Eventually(session.Err).Should(Say(`The plugin uninstall will proceed\. Contact the plugin author if you need help\.`)) 88 Eventually(session.Err).Should(Say("exit status 1")) 89 Eventually(session).Should(Exit(1)) 90 91 binaryPath := generic.ExecutableFilename( 92 filepath.Join(homeDir, ".cf", "plugins", "failing-plugin")) 93 _, err := os.Stat(binaryPath) 94 Expect(os.IsNotExist(err)).To(BeTrue()) 95 96 session = helpers.CF("plugins") 97 Eventually(session).Should(Say("banana-plugin-name-1")) 98 Eventually(session).Should(Say("banana-plugin-name-2")) 99 Consistently(session).ShouldNot(Say("failing-plugin")) 100 Eventually(session).Should(Exit(0)) 101 }) 102 }) 103 104 When("the plugin binary has been deleted", func() { 105 BeforeEach(func() { 106 helpers.InstallConfigurablePlugin( 107 "configurable_plugin", 108 "banana-plugin-name-1", 109 "2.0.1", 110 []helpers.PluginCommand{ 111 { 112 Name: "banana-command-1", 113 Help: "banana-command-1"}, 114 }) 115 116 binaryPath := generic.ExecutableFilename( 117 filepath.Join(homeDir, ".cf", "plugins", "banana-plugin-name-1")) 118 Expect(os.Remove(binaryPath)).ToNot(HaveOccurred()) 119 }) 120 121 It("uninstalls the plugin with no warning or error and exits 0", func() { 122 session := helpers.CF("uninstall-plugin", "banana-plugin-name-1") 123 Eventually(session).Should(Exit(0)) 124 }) 125 }) 126 }) 127 })