github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/v3_zdt_restart_command_test.go (about) 1 package v6_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/v3action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 10 "code.cloudfoundry.org/cli/command/commandfakes" 11 "code.cloudfoundry.org/cli/command/flag" 12 "code.cloudfoundry.org/cli/command/translatableerror" 13 . "code.cloudfoundry.org/cli/command/v6" 14 "code.cloudfoundry.org/cli/command/v6/v6fakes" 15 "code.cloudfoundry.org/cli/util/configv3" 16 "code.cloudfoundry.org/cli/util/ui" 17 . "github.com/onsi/ginkgo" 18 . "github.com/onsi/gomega" 19 . "github.com/onsi/gomega/gbytes" 20 ) 21 22 var _ = Describe("v3-zdt-restart Command", func() { 23 var ( 24 cmd V3ZeroDowntimeRestartCommand 25 testUI *ui.UI 26 fakeConfig *commandfakes.FakeConfig 27 fakeSharedActor *commandfakes.FakeSharedActor 28 fakeActor *v6fakes.FakeV3ZeroDowntimeRestartActor 29 binaryName string 30 executeErr error 31 app string 32 ) 33 34 BeforeEach(func() { 35 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 36 fakeConfig = new(commandfakes.FakeConfig) 37 fakeSharedActor = new(commandfakes.FakeSharedActor) 38 fakeActor = new(v6fakes.FakeV3ZeroDowntimeRestartActor) 39 40 binaryName = "faceman" 41 fakeConfig.BinaryNameReturns(binaryName) 42 app = "some-app" 43 44 cmd = V3ZeroDowntimeRestartCommand{ 45 RequiredArgs: flag.AppName{AppName: app}, 46 47 UI: testUI, 48 Config: fakeConfig, 49 SharedActor: fakeSharedActor, 50 Actor: fakeActor, 51 } 52 }) 53 54 JustBeforeEach(func() { 55 executeErr = cmd.Execute(nil) 56 }) 57 58 When("the API version is below the minimum", func() { 59 BeforeEach(func() { 60 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinSupportedV3ClientVersion) 61 }) 62 63 It("returns a MinimumAPIVersionNotMetError", func() { 64 Expect(executeErr).To(MatchError(translatableerror.MinimumCFAPIVersionNotMetError{ 65 CurrentVersion: ccversion.MinSupportedV3ClientVersion, 66 MinimumVersion: ccversion.MinVersionZeroDowntimePushV3, 67 })) 68 }) 69 70 It("displays the experimental warning", func() { 71 Expect(testUI.Err).To(Say("This command is in EXPERIMENTAL stage and may change without notice")) 72 }) 73 }) 74 75 When("checking target fails", func() { 76 BeforeEach(func() { 77 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionZeroDowntimePushV3) 78 fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}) 79 }) 80 81 It("returns an error", func() { 82 Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})) 83 84 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 85 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 86 Expect(checkTargetedOrg).To(BeTrue()) 87 Expect(checkTargetedSpace).To(BeTrue()) 88 }) 89 }) 90 91 When("the user is not logged in", func() { 92 var expectedErr error 93 94 BeforeEach(func() { 95 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionZeroDowntimePushV3) 96 expectedErr = errors.New("some current user error") 97 fakeConfig.CurrentUserReturns(configv3.User{}, expectedErr) 98 }) 99 100 It("return an error", func() { 101 Expect(executeErr).To(Equal(expectedErr)) 102 }) 103 }) 104 105 When("the user is logged in", func() { 106 BeforeEach(func() { 107 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionZeroDowntimePushV3) 108 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 109 Name: "some-org", 110 }) 111 fakeConfig.TargetedSpaceReturns(configv3.Space{ 112 Name: "some-space", 113 GUID: "some-space-guid", 114 }) 115 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 116 }) 117 118 When("the app exists", func() { 119 BeforeEach(func() { 120 fakeActor.GetApplicationByNameAndSpaceReturns( 121 v3action.Application{ 122 GUID: "some-app-guid", 123 State: constant.ApplicationStarted, 124 }, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 125 fakeActor.CreateDeploymentReturns("", v3action.Warnings{"deploy-warning-1", "deploy-warning-2"}, nil) 126 }) 127 128 It("makes a deployment for the app", func() { 129 Expect(executeErr).ToNot(HaveOccurred()) 130 Expect(fakeActor.CreateDeploymentCallCount()).To(Equal(1)) 131 132 Expect(testUI.Err).To(Say("deploy-warning-1")) 133 Expect(testUI.Err).To(Say("deploy-warning-2")) 134 Expect(testUI.Out).To(Say("Starting deployment for app some-app in org some-org / space some-space as steve...")) 135 Expect(testUI.Out).To(Say("Waiting for app to start...")) 136 Expect(testUI.Out).To(Say("OK")) 137 138 Expect(fakeActor.ZeroDowntimePollStartCallCount()).To(Equal(1)) 139 }) 140 141 When("the app is stopped", func() { 142 BeforeEach(func() { 143 fakeActor.GetApplicationByNameAndSpaceReturns( 144 v3action.Application{ 145 GUID: "some-app-guid", 146 State: constant.ApplicationStopped, 147 }, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 148 149 fakeActor.StartApplicationReturns(v3action.Warnings{"start-warning-1", "start-warning-2"}, nil) 150 }) 151 152 It("starts the app", func() { 153 Expect(testUI.Out).To(Say(`Starting app some-app in org some-org / space some-space as steve\.\.\.`)) 154 Expect(testUI.Err).To(Say("start-warning-1")) 155 Expect(testUI.Err).To(Say("start-warning-2")) 156 Expect(testUI.Out).To(Say("OK")) 157 158 Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1)) 159 appName, spaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0) 160 Expect(appName).To(Equal("some-app")) 161 Expect(spaceGUID).To(Equal("some-space-guid")) 162 163 Expect(fakeActor.StartApplicationCallCount()).To(Equal(1)) 164 appGUID := fakeActor.StartApplicationArgsForCall(0) 165 Expect(appGUID).To(Equal("some-app-guid")) 166 }) 167 168 When("it fails to start the app", func() { 169 BeforeEach(func() { 170 fakeActor.StartApplicationReturns(nil, errors.New("lol error")) 171 }) 172 173 It("returns the error", func() { 174 Expect(executeErr).To(MatchError("lol error")) 175 }) 176 }) 177 }) 178 179 When("the app fails to start", func() { 180 BeforeEach(func() { 181 fakeActor.ZeroDowntimePollStartReturns(errors.New("lol error")) 182 }) 183 184 It("returns the error", func() { 185 Expect(executeErr).To(MatchError("lol error")) 186 }) 187 }) 188 }) 189 190 When("it fails to get the app", func() { 191 When("the app isn't found", func() { 192 BeforeEach(func() { 193 fakeActor.GetApplicationByNameAndSpaceReturns(v3action.Application{}, v3action.Warnings{"get-warning-1", "get-warning-2"}, actionerror.ApplicationNotFoundError{Name: app}) 194 }) 195 196 It("says that the app wasn't found", func() { 197 Expect(executeErr).To(Equal(actionerror.ApplicationNotFoundError{Name: app})) 198 Expect(testUI.Out).ToNot(Say("Stopping")) 199 Expect(testUI.Out).ToNot(Say("Starting")) 200 201 Expect(testUI.Err).To(Say("get-warning-1")) 202 Expect(testUI.Err).To(Say("get-warning-2")) 203 204 Expect(fakeActor.StartApplicationCallCount()).To(BeZero(), "Expected StartApplication to not be called") 205 Expect(fakeActor.CreateDeploymentCallCount()).To(BeZero(), "Expected CreateDeployment to not be called") 206 }) 207 }) 208 209 When("it is an unknown error", func() { 210 var expectedErr error 211 212 BeforeEach(func() { 213 expectedErr = errors.New("some get app error") 214 fakeActor.GetApplicationByNameAndSpaceReturns(v3action.Application{State: constant.ApplicationStopped}, v3action.Warnings{"get-warning-1", "get-warning-2"}, expectedErr) 215 }) 216 217 It("says that the app failed to start", func() { 218 Expect(executeErr).To(Equal(expectedErr)) 219 Expect(testUI.Out).ToNot(Say("Stopping")) 220 Expect(testUI.Out).ToNot(Say("Starting")) 221 222 Expect(testUI.Err).To(Say("get-warning-1")) 223 Expect(testUI.Err).To(Say("get-warning-2")) 224 225 Expect(fakeActor.StartApplicationCallCount()).To(BeZero(), "Expected StartApplication to not be called") 226 Expect(fakeActor.CreateDeploymentCallCount()).To(BeZero(), "Expected CreateDeployment to not be called") 227 }) 228 }) 229 }) 230 }) 231 })