github.com/loafoe/cli@v7.1.0+incompatible/command/v7/enable_ssh_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 9 "code.cloudfoundry.org/cli/command/commandfakes" 10 . "code.cloudfoundry.org/cli/command/v7" 11 "code.cloudfoundry.org/cli/command/v7/v7fakes" 12 "code.cloudfoundry.org/cli/resources" 13 "code.cloudfoundry.org/cli/util/ui" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("enable-ssh Command", func() { 20 var ( 21 cmd EnableSSHCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeEnableSSHActor *v7fakes.FakeActor 26 27 binaryName string 28 currentUserName string 29 executeErr error 30 ) 31 32 BeforeEach(func() { 33 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 34 fakeConfig = new(commandfakes.FakeConfig) 35 fakeSharedActor = new(commandfakes.FakeSharedActor) 36 fakeEnableSSHActor = new(v7fakes.FakeActor) 37 38 cmd = EnableSSHCommand{ 39 BaseCommand: BaseCommand{ 40 UI: testUI, 41 Config: fakeConfig, 42 SharedActor: fakeSharedActor, 43 Actor: fakeEnableSSHActor, 44 }, 45 } 46 47 cmd.RequiredArgs.AppName = "some-app" 48 49 binaryName = "faceman" 50 fakeConfig.BinaryNameReturns(binaryName) 51 currentUserName = "some-user" 52 fakeConfig.CurrentUserNameReturns(currentUserName, nil) 53 }) 54 55 JustBeforeEach(func() { 56 executeErr = cmd.Execute(nil) 57 }) 58 59 When("checking target fails", func() { 60 BeforeEach(func() { 61 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 62 }) 63 64 It("returns an error", func() { 65 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: "faceman"})) 66 67 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 68 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 69 Expect(checkTargetedOrg).To(BeTrue()) 70 Expect(checkTargetedSpace).To(BeTrue()) 71 }) 72 }) 73 74 When("the user is logged in", func() { 75 When("no errors occur", func() { 76 BeforeEach(func() { 77 fakeEnableSSHActor.GetApplicationByNameAndSpaceReturns( 78 resources.Application{Name: "some-app", GUID: "some-app-guid"}, 79 v7action.Warnings{"some-get-app-warnings"}, 80 nil, 81 ) 82 fakeEnableSSHActor.GetAppFeatureReturns( 83 resources.ApplicationFeature{Enabled: false, Name: "ssh"}, 84 v7action.Warnings{"some-feature-warnings"}, 85 nil, 86 ) 87 fakeEnableSSHActor.UpdateAppFeatureReturns( 88 v7action.Warnings{"some-update-ssh-warnings"}, 89 nil, 90 ) 91 fakeEnableSSHActor.GetSSHEnabledReturns( 92 ccv3.SSHEnabled{Enabled: true, Reason: ""}, 93 v7action.Warnings{"some-get-ssh-enabled-warnings"}, 94 nil, 95 ) 96 }) 97 98 It("enables ssh on the app", func() { 99 Expect(executeErr).ToNot(HaveOccurred()) 100 101 Expect(fakeEnableSSHActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1)) 102 103 appName, spaceGUID := fakeEnableSSHActor.GetApplicationByNameAndSpaceArgsForCall(0) 104 Expect(appName).To(Equal(cmd.RequiredArgs.AppName)) 105 Expect(spaceGUID).To(Equal(cmd.Config.TargetedSpace().GUID)) 106 107 Expect(fakeEnableSSHActor.GetAppFeatureCallCount()).To(Equal(1)) 108 109 appGUID, featureName := fakeEnableSSHActor.GetAppFeatureArgsForCall(0) 110 Expect(appGUID).To(Equal("some-app-guid")) 111 Expect(featureName).To(Equal("ssh")) 112 113 Expect(fakeEnableSSHActor.UpdateAppFeatureCallCount()).To(Equal(1)) 114 app, enabled, featureName := fakeEnableSSHActor.UpdateAppFeatureArgsForCall(0) 115 Expect(app.Name).To(Equal("some-app")) 116 Expect(enabled).To(Equal(true)) 117 Expect(featureName).To(Equal("ssh")) 118 119 Expect(fakeEnableSSHActor.GetSSHEnabledCallCount()).To(Equal(1)) 120 121 Expect(testUI.Err).To(Say("some-get-app-warnings")) 122 Expect(testUI.Err).To(Say("some-feature-warnings")) 123 Expect(testUI.Err).To(Say("some-update-ssh-warnings")) 124 Expect(testUI.Err).To(Say("some-get-ssh-enabled-warnings")) 125 Expect(testUI.Out).To(Say(`Enabling ssh support for app %s as %s\.\.\.`, appName, currentUserName)) 126 Expect(testUI.Out).To(Say("OK")) 127 }) 128 129 When("SSH is disabled at a level above the app level", func() { 130 BeforeEach(func() { 131 fakeEnableSSHActor.GetSSHEnabledReturns( 132 ccv3.SSHEnabled{Enabled: false, Reason: "get-ssh-reason"}, 133 v7action.Warnings{"some-get-ssh-enabled-warnings"}, 134 nil, 135 ) 136 }) 137 138 It("indicates that the feature was not enabled", func() { 139 Expect(fakeEnableSSHActor.GetSSHEnabledCallCount()).To(Equal(1)) 140 Expect(testUI.Out).To(Say("TIP: Ensure ssh is also enabled on the space and global level.")) 141 Expect(executeErr).ToNot(HaveOccurred()) 142 }) 143 }) 144 }) 145 146 When("app ssh is already enabled", func() { 147 BeforeEach(func() { 148 fakeEnableSSHActor.UpdateAppFeatureReturns( 149 v7action.Warnings{"ssh support for app 'some-app' is already enabled.", "some-other-warnings"}, 150 nil, 151 ) 152 fakeEnableSSHActor.GetAppFeatureReturns( 153 resources.ApplicationFeature{Enabled: true, Name: "ssh"}, 154 v7action.Warnings{}, 155 nil, 156 ) 157 }) 158 159 It("shows the app ssh is already enabled", func() { 160 Expect(testUI.Out).To(Say("ssh support for app 'some-app' is already enabled.")) 161 Expect(testUI.Out).To(Say("OK")) 162 }) 163 }) 164 165 When("an error occurs", func() { 166 When("GetApp action errors", func() { 167 When("no user is found", func() { 168 var returnedErr error 169 170 BeforeEach(func() { 171 returnedErr = actionerror.ApplicationNotFoundError{Name: "some-app"} 172 fakeEnableSSHActor.GetApplicationByNameAndSpaceReturns( 173 resources.Application{}, 174 nil, 175 returnedErr) 176 }) 177 178 It("returns the same error", func() { 179 Expect(executeErr).To(HaveOccurred()) 180 Expect(executeErr).To(MatchError(returnedErr)) 181 }) 182 }) 183 }) 184 185 When("GetAppFeature action errors", func() { 186 returnedErr := errors.New("some-error") 187 BeforeEach(func() { 188 189 fakeEnableSSHActor.GetAppFeatureReturns( 190 resources.ApplicationFeature{}, 191 nil, 192 returnedErr, 193 ) 194 }) 195 196 It("returns the same error", func() { 197 Expect(executeErr).To(HaveOccurred()) 198 Expect(executeErr).To(MatchError(returnedErr)) 199 }) 200 }) 201 202 When("Enable ssh action errors", func() { 203 var returnedErr error 204 205 BeforeEach(func() { 206 returnedErr = errors.New("some-error") 207 fakeEnableSSHActor.GetApplicationByNameAndSpaceReturns( 208 resources.Application{Name: "some-app"}, 209 v7action.Warnings{"some-warning"}, 210 nil, 211 ) 212 fakeEnableSSHActor.UpdateAppFeatureReturns(nil, returnedErr) 213 }) 214 215 It("returns the same error", func() { 216 Expect(executeErr).To(MatchError(returnedErr)) 217 }) 218 }) 219 }) 220 }) 221 })