@@ -322,17 +322,19 @@ var _ = Describe("ActionClient", func() {
322322
323323 var _ = Describe ("ActionClient methods" , func () {
324324 var (
325- obj client.Object
326- cl client.Client
327- ac ActionInterface
328- vals = chartutil.Values {"service" : map [string ]interface {}{"type" : "NodePort" }}
325+ obj client.Object
326+ cl client.Client
327+ actionCfgGetter ActionConfigGetter
328+ ac ActionInterface
329+ vals = chartutil.Values {"service" : map [string ]interface {}{"type" : "NodePort" }}
329330 )
330331 BeforeEach (func () {
331332 obj = testutil .BuildTestCR (gvk )
332333
333- actionConfigGetter , err := NewActionConfigGetter (cfg , rm )
334+ var err error
335+ actionCfgGetter , err = NewActionConfigGetter (cfg , rm )
334336 Expect (err ).ShouldNot (HaveOccurred ())
335- acg , err := NewActionClientGetter (actionConfigGetter )
337+ acg , err := NewActionClientGetter (actionCfgGetter )
336338 Expect (err ).ToNot (HaveOccurred ())
337339 ac , err = acg .ActionClientFor (context .Background (), obj )
338340 Expect (err ).ToNot (HaveOccurred ())
@@ -373,14 +375,32 @@ var _ = Describe("ActionClient", func() {
373375 })
374376 It ("should uninstall a failed install" , func () {
375377 By ("failing to install the release" , func () {
376- chrt := testutil .MustLoadChart ("../../pkg/internal/testdata/test-chart-1.2.0.tgz" )
377- chrt .Templates [2 ].Data = append (chrt .Templates [2 ].Data , []byte ("\n gibberish" )... )
378+ vals := chartutil.Values {"service" : map [string ]interface {}{"type" : "FooBar" }}
378379 r , err := ac .Install (obj .GetName (), obj .GetNamespace (), & chrt , vals )
379380 Expect (err ).To (HaveOccurred ())
380- Expect (r ).To (BeNil ())
381+ Expect (r ).NotTo (BeNil ())
381382 })
382383 verifyNoRelease (cl , obj .GetNamespace (), obj .GetName (), nil )
383384 })
385+ When ("failure uninstall is disabled" , func () {
386+ BeforeEach (func () {
387+ acg , err := NewActionClientGetter (actionCfgGetter , WithFailureRollbacks (false ))
388+ Expect (err ).ToNot (HaveOccurred ())
389+ ac , err = acg .ActionClientFor (context .Background (), obj )
390+ Expect (err ).ToNot (HaveOccurred ())
391+ })
392+ It ("should not uninstall a failed install" , func () {
393+ vals := chartutil.Values {"service" : map [string ]interface {}{"type" : "FooBar" }}
394+ returnedRelease , err := ac .Install (obj .GetName (), obj .GetNamespace (), & chrt , vals )
395+ Expect (err ).To (HaveOccurred ())
396+ Expect (returnedRelease ).ToNot (BeNil ())
397+ Expect (returnedRelease .Info .Status ).To (Equal (release .StatusFailed ))
398+ latestRelease , err := ac .Get (obj .GetName ())
399+ Expect (err ).ToNot (HaveOccurred ())
400+ Expect (latestRelease ).ToNot (BeNil ())
401+ Expect (latestRelease .Version ).To (Equal (returnedRelease .Version ))
402+ })
403+ })
384404 When ("using an option function that returns an error" , func () {
385405 It ("should fail" , func () {
386406 opt := func (* action.Install ) error { return errors .New ("expect this error" ) }
@@ -484,17 +504,36 @@ var _ = Describe("ActionClient", func() {
484504 verifyRelease (cl , obj , rel )
485505 })
486506 It ("should rollback a failed upgrade" , func () {
487- By ("failing to install the release" , func () {
507+ By ("failing to upgrade the release" , func () {
488508 vals := chartutil.Values {"service" : map [string ]interface {}{"type" : "FooBar" }}
489509 r , err := ac .Upgrade (obj .GetName (), obj .GetNamespace (), & chrt , vals )
490510 Expect (err ).To (HaveOccurred ())
491- Expect (r ).To (BeNil ())
511+ Expect (r ).ToNot (BeNil ())
492512 })
493513 tmp := * installedRelease
494514 rollbackRelease := & tmp
495515 rollbackRelease .Version = installedRelease .Version + 2
496516 verifyRelease (cl , obj , rollbackRelease )
497517 })
518+ When ("failure rollback is disabled" , func () {
519+ BeforeEach (func () {
520+ acg , err := NewActionClientGetter (actionCfgGetter , WithFailureRollbacks (false ))
521+ Expect (err ).ToNot (HaveOccurred ())
522+ ac , err = acg .ActionClientFor (context .Background (), obj )
523+ Expect (err ).ToNot (HaveOccurred ())
524+ })
525+ It ("should not rollback a failed upgrade" , func () {
526+ vals := chartutil.Values {"service" : map [string ]interface {}{"type" : "FooBar" }}
527+ returnedRelease , err := ac .Upgrade (obj .GetName (), obj .GetNamespace (), & chrt , vals )
528+ Expect (err ).To (HaveOccurred ())
529+ Expect (returnedRelease ).ToNot (BeNil ())
530+ Expect (returnedRelease .Info .Status ).To (Equal (release .StatusFailed ))
531+ latestRelease , err := ac .Get (obj .GetName ())
532+ Expect (err ).ToNot (HaveOccurred ())
533+ Expect (latestRelease ).ToNot (BeNil ())
534+ Expect (latestRelease .Version ).To (Equal (returnedRelease .Version ))
535+ })
536+ })
498537 When ("using an option function that returns an error" , func () {
499538 It ("should fail" , func () {
500539 opt := func (* action.Upgrade ) error { return errors .New ("expect this error" ) }
0 commit comments