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