@@ -28,6 +28,7 @@ import (
28
28
"github.com/go-logr/logr/testing"
29
29
. "github.com/onsi/ginkgo"
30
30
. "github.com/onsi/gomega"
31
+ "helm.sh/helm/v3/pkg/action"
31
32
"helm.sh/helm/v3/pkg/chart"
32
33
"helm.sh/helm/v3/pkg/chartutil"
33
34
"helm.sh/helm/v3/pkg/release"
@@ -450,7 +451,7 @@ var _ = Describe("Reconciler", func() {
450
451
Expect (mgr .GetClient ().Create (ctx , obj )).To (Succeed ())
451
452
})
452
453
453
- When ("requested CR release is not installed " , func () {
454
+ When ("requested CR release is not present " , func () {
454
455
When ("action client getter is not working" , func () {
455
456
It ("returns an error getting the action client" , func () {
456
457
acgErr := errors .New ("broken action client getter: error getting action client" )
@@ -682,9 +683,9 @@ var _ = Describe("Reconciler", func() {
682
683
})
683
684
})
684
685
})
685
- When ("requested CR release is installed " , func () {
686
+ When ("requested CR release is present " , func () {
686
687
var (
687
- installedRelease * release.Release
688
+ currentRelease * release.Release
688
689
)
689
690
BeforeEach (func () {
690
691
// Reconcile once to get the release installed and finalizers added
@@ -693,7 +694,7 @@ var _ = Describe("Reconciler", func() {
693
694
Expect (res ).To (Equal (reconcile.Result {}))
694
695
Expect (err ).To (BeNil ())
695
696
696
- installedRelease , err = ac .Get (obj .GetName ())
697
+ currentRelease , err = ac .Get (obj .GetName ())
697
698
Expect (err ).To (BeNil ())
698
699
})
699
700
When ("action client getter is not working" , func () {
@@ -801,27 +802,78 @@ var _ = Describe("Reconciler", func() {
801
802
Expect (c .Reason ).To (Equal (conditions .ReasonErrorGettingValues ))
802
803
Expect (c .Message ).To (ContainSubstring ("error parsing index" ))
803
804
804
- Expect (objStat .Status .DeployedRelease .Name ).To (Equal (installedRelease .Name ))
805
- Expect (objStat .Status .DeployedRelease .Manifest ).To (Equal (installedRelease .Manifest ))
805
+ Expect (objStat .Status .DeployedRelease .Name ).To (Equal (currentRelease .Name ))
806
+ Expect (objStat .Status .DeployedRelease .Manifest ).To (Equal (currentRelease .Manifest ))
806
807
})
807
808
808
809
By ("verifying the uninstall finalizer is not present on the CR" , func () {
809
810
Expect (controllerutil .ContainsFinalizer (obj , uninstallFinalizer )).To (BeTrue ())
810
811
})
811
812
})
812
813
})
813
- When ("all preconditions are met" , func () {
814
+ When ("requested CR release is not deployed" , func () {
815
+ var actionConf * action.Configuration
816
+ BeforeEach (func () {
817
+ By ("getting the current release and config" , func () {
818
+ var err error
819
+ acg := helmclient .NewActionConfigGetter (mgr .GetConfig (), mgr .GetRESTMapper (), nil )
820
+ actionConf , err = acg .ActionConfigFor (obj )
821
+ Expect (err ).To (BeNil ())
822
+ })
823
+ })
824
+ When ("state is Failed" , func () {
825
+ BeforeEach (func () {
826
+ currentRelease .Info .Status = release .StatusFailed
827
+ Expect (actionConf .Releases .Update (currentRelease )).To (Succeed ())
828
+ })
829
+ It ("upgrades the release" , func () {
830
+ By ("successfully reconciling a request" , func () {
831
+ res , err := r .Reconcile (ctx , req )
832
+ Expect (res ).To (Equal (reconcile.Result {}))
833
+ Expect (err ).To (BeNil ())
834
+ })
835
+ By ("verifying the release" , func () {
836
+ rel , err := ac .Get (obj .GetName ())
837
+ Expect (err ).To (BeNil ())
838
+ Expect (rel ).NotTo (BeNil ())
839
+ Expect (rel .Version ).To (Equal (2 ))
840
+ verifyRelease (ctx , mgr .GetAPIReader (), obj .GetNamespace (), rel )
841
+ })
842
+ })
843
+ })
844
+ When ("state is Superseded" , func () {
845
+ BeforeEach (func () {
846
+ currentRelease .Info .Status = release .StatusSuperseded
847
+ Expect (actionConf .Releases .Update (currentRelease )).To (Succeed ())
848
+ })
849
+ It ("upgrades the release" , func () {
850
+ By ("successfully reconciling a request" , func () {
851
+ res , err := r .Reconcile (ctx , req )
852
+ Expect (res ).To (Equal (reconcile.Result {}))
853
+ Expect (err ).To (BeNil ())
854
+ })
855
+ By ("verifying the release" , func () {
856
+ rel , err := ac .Get (obj .GetName ())
857
+ Expect (err ).To (BeNil ())
858
+ Expect (rel ).NotTo (BeNil ())
859
+ Expect (rel .Version ).To (Equal (2 ))
860
+ verifyRelease (ctx , mgr .GetAPIReader (), obj .GetNamespace (), rel )
861
+ })
862
+ })
863
+ })
864
+ })
865
+ When ("state is Deployed" , func () {
814
866
When ("upgrade fails" , func () {
815
867
BeforeEach (func () {
816
868
ac := helmfake .NewActionClient ()
817
869
ac .HandleGet = func () (* release.Release , error ) {
818
- return & release.Release {Name : "test" , Version : 1 , Manifest : "version : 1" }, nil
870
+ return & release.Release {Name : "test" , Version : 1 , Manifest : "manifest : 1" }, nil
819
871
}
820
872
firstRun := true
821
873
ac .HandleUpgrade = func () (* release.Release , error ) {
822
874
if firstRun {
823
875
firstRun = false
824
- return & release.Release {Name : "test" , Version : 1 , Manifest : "version : 2" }, nil
876
+ return & release.Release {Name : "test" , Version : 1 , Manifest : "manifest : 2" }, nil
825
877
}
826
878
return nil , errors .New ("upgrade failed: foobar" )
827
879
}
@@ -846,7 +898,7 @@ var _ = Describe("Reconciler", func() {
846
898
Expect (objStat .Status .Conditions .IsTrueFor (conditions .TypeDeployed )).To (BeTrue ())
847
899
Expect (objStat .Status .Conditions .IsTrueFor (conditions .TypeReleaseFailed )).To (BeTrue ())
848
900
Expect (objStat .Status .DeployedRelease .Name ).To (Equal ("test" ))
849
- Expect (objStat .Status .DeployedRelease .Manifest ).To (Equal ("version : 1" ))
901
+ Expect (objStat .Status .DeployedRelease .Manifest ).To (Equal ("manifest : 1" ))
850
902
851
903
c := objStat .Status .Conditions .GetCondition (conditions .TypeReleaseFailed )
852
904
Expect (c ).NotTo (BeNil ())
@@ -921,10 +973,10 @@ var _ = Describe("Reconciler", func() {
921
973
BeforeEach (func () {
922
974
ac := helmfake .NewActionClient ()
923
975
ac .HandleGet = func () (* release.Release , error ) {
924
- return & release.Release {Name : "test" , Version : 1 , Manifest : "version : 1" }, nil
976
+ return & release.Release {Name : "test" , Version : 1 , Manifest : "manifest : 1" , Info : & release. Info { Status : release . StatusDeployed } }, nil
925
977
}
926
978
ac .HandleUpgrade = func () (* release.Release , error ) {
927
- return & release.Release {Name : "test" , Version : 1 , Manifest : "version : 1" }, nil
979
+ return & release.Release {Name : "test" , Version : 2 , Manifest : "manifest : 1" , Info : & release. Info { Status : release . StatusDeployed } }, nil
928
980
}
929
981
ac .HandleReconcile = func () error {
930
982
return errors .New ("reconciliation failed: foobar" )
@@ -950,7 +1002,7 @@ var _ = Describe("Reconciler", func() {
950
1002
Expect (objStat .Status .Conditions .IsTrueFor (conditions .TypeDeployed )).To (BeTrue ())
951
1003
Expect (objStat .Status .Conditions .IsFalseFor (conditions .TypeReleaseFailed )).To (BeTrue ())
952
1004
Expect (objStat .Status .DeployedRelease .Name ).To (Equal ("test" ))
953
- Expect (objStat .Status .DeployedRelease .Manifest ).To (Equal ("version : 1" ))
1005
+ Expect (objStat .Status .DeployedRelease .Manifest ).To (Equal ("manifest : 1" ))
954
1006
955
1007
c := objStat .Status .Conditions .GetCondition (conditions .TypeIrreconcilable )
956
1008
Expect (c ).NotTo (BeNil ())
@@ -970,7 +1022,7 @@ var _ = Describe("Reconciler", func() {
970
1022
err error
971
1023
)
972
1024
By ("changing the release resources" , func () {
973
- for _ , resource := range manifestToObjects (installedRelease .Manifest ) {
1025
+ for _ , resource := range manifestToObjects (currentRelease .Manifest ) {
974
1026
key := client .ObjectKeyFromObject (resource )
975
1027
976
1028
u := & unstructured.Unstructured {}
@@ -1032,7 +1084,7 @@ var _ = Describe("Reconciler", func() {
1032
1084
BeforeEach (func () {
1033
1085
ac := helmfake .NewActionClient ()
1034
1086
ac .HandleGet = func () (* release.Release , error ) {
1035
- return & release.Release {Name : "test" , Version : 1 , Manifest : "version : 1" }, nil
1087
+ return & release.Release {Name : "test" , Version : 1 , Manifest : "manifest : 1" }, nil
1036
1088
}
1037
1089
ac .HandleUninstall = func () (* release.UninstallReleaseResponse , error ) {
1038
1090
return nil , errors .New ("uninstall failed: foobar" )
@@ -1062,7 +1114,7 @@ var _ = Describe("Reconciler", func() {
1062
1114
Expect (objStat .Status .Conditions .IsTrueFor (conditions .TypeDeployed )).To (BeTrue ())
1063
1115
Expect (objStat .Status .Conditions .IsTrueFor (conditions .TypeReleaseFailed )).To (BeTrue ())
1064
1116
Expect (objStat .Status .DeployedRelease .Name ).To (Equal ("test" ))
1065
- Expect (objStat .Status .DeployedRelease .Manifest ).To (Equal ("version : 1" ))
1117
+ Expect (objStat .Status .DeployedRelease .Manifest ).To (Equal ("manifest : 1" ))
1066
1118
1067
1119
c := objStat .Status .Conditions .GetCondition (conditions .TypeReleaseFailed )
1068
1120
Expect (c ).NotTo (BeNil ())
@@ -1093,7 +1145,7 @@ var _ = Describe("Reconciler", func() {
1093
1145
})
1094
1146
1095
1147
By ("verifying the release is uninstalled" , func () {
1096
- verifyNoRelease (ctx , mgr .GetClient (), obj .GetNamespace (), obj .GetName (), installedRelease )
1148
+ verifyNoRelease (ctx , mgr .GetClient (), obj .GetNamespace (), obj .GetName (), currentRelease )
1097
1149
})
1098
1150
1099
1151
By ("ensuring the finalizer is removed and the CR is deleted" , func () {
0 commit comments