@@ -1015,14 +1015,15 @@ func TestAtomicRelease_Reconcile_Scenarios(t *testing.T) {
1015
1015
1016
1016
func TestAtomicRelease_actionForState (t * testing.T ) {
1017
1017
tests := []struct {
1018
- name string
1019
- releases []* helmrelease.Release
1020
- spec func (spec * v2.HelmReleaseSpec )
1021
- status func (releases []* helmrelease.Release ) v2.HelmReleaseStatus
1022
- state ReleaseState
1023
- want ActionReconciler
1024
- wantEvent * corev1.Event
1025
- wantErr error
1018
+ name string
1019
+ releases []* helmrelease.Release
1020
+ annotations map [string ]string
1021
+ spec func (spec * v2.HelmReleaseSpec )
1022
+ status func (releases []* helmrelease.Release ) v2.HelmReleaseStatus
1023
+ state ReleaseState
1024
+ want ActionReconciler
1025
+ wantEvent * corev1.Event
1026
+ wantErr error
1026
1027
}{
1027
1028
{
1028
1029
name : "in-sync release does not trigger any action" ,
@@ -1036,6 +1037,22 @@ func TestAtomicRelease_actionForState(t *testing.T) {
1036
1037
state : ReleaseState {Status : ReleaseStatusInSync },
1037
1038
want : nil ,
1038
1039
},
1040
+ {
1041
+ name : "in-sync release with force annotation triggers upgrade action" ,
1042
+ state : ReleaseState {Status : ReleaseStatusInSync },
1043
+ annotations : map [string ]string {
1044
+ meta .ReconcileRequestAnnotation : "force" ,
1045
+ v2 .ForceRequestAnnotation : "force" ,
1046
+ },
1047
+ status : func (releases []* helmrelease.Release ) v2.HelmReleaseStatus {
1048
+ return v2.HelmReleaseStatus {
1049
+ History : v2.Snapshots {
1050
+ {Version : 1 },
1051
+ },
1052
+ }
1053
+ },
1054
+ want : & Upgrade {},
1055
+ },
1039
1056
{
1040
1057
name : "locked release triggers unlock action" ,
1041
1058
state : ReleaseState {Status : ReleaseStatusLocked },
@@ -1046,6 +1063,20 @@ func TestAtomicRelease_actionForState(t *testing.T) {
1046
1063
state : ReleaseState {Status : ReleaseStatusAbsent },
1047
1064
want : & Install {},
1048
1065
},
1066
+ {
1067
+ name : "absent release without remaining retries and force annotation triggers install" ,
1068
+ annotations : map [string ]string {
1069
+ meta .ReconcileRequestAnnotation : "force" ,
1070
+ v2 .ForceRequestAnnotation : "force" ,
1071
+ },
1072
+ state : ReleaseState {Status : ReleaseStatusAbsent },
1073
+ status : func (releases []* helmrelease.Release ) v2.HelmReleaseStatus {
1074
+ return v2.HelmReleaseStatus {
1075
+ InstallFailures : 1 ,
1076
+ }
1077
+ },
1078
+ want : & Install {},
1079
+ },
1049
1080
{
1050
1081
name : "absent release without remaining retries returns error" ,
1051
1082
state : ReleaseState {Status : ReleaseStatusAbsent },
@@ -1181,6 +1212,22 @@ func TestAtomicRelease_actionForState(t *testing.T) {
1181
1212
},
1182
1213
want : & Upgrade {},
1183
1214
},
1215
+ {
1216
+ name : "out-of-sync release with no remaining retries and force annotation triggers upgrade" ,
1217
+ state : ReleaseState {
1218
+ Status : ReleaseStatusOutOfSync ,
1219
+ },
1220
+ annotations : map [string ]string {
1221
+ meta .ReconcileRequestAnnotation : "force" ,
1222
+ v2 .ForceRequestAnnotation : "force" ,
1223
+ },
1224
+ status : func (releases []* helmrelease.Release ) v2.HelmReleaseStatus {
1225
+ return v2.HelmReleaseStatus {
1226
+ UpgradeFailures : 1 ,
1227
+ }
1228
+ },
1229
+ want : & Upgrade {},
1230
+ },
1184
1231
{
1185
1232
name : "out-of-sync release with no remaining retries returns error" ,
1186
1233
state : ReleaseState {
@@ -1220,6 +1267,21 @@ func TestAtomicRelease_actionForState(t *testing.T) {
1220
1267
},
1221
1268
want : & Upgrade {},
1222
1269
},
1270
+ {
1271
+ name : "failed release with exhausted retries and force annotation triggers upgrade" ,
1272
+ state : ReleaseState {Status : ReleaseStatusFailed },
1273
+ annotations : map [string ]string {
1274
+ meta .ReconcileRequestAnnotation : "force" ,
1275
+ v2 .ForceRequestAnnotation : "force" ,
1276
+ },
1277
+ status : func (releases []* helmrelease.Release ) v2.HelmReleaseStatus {
1278
+ return v2.HelmReleaseStatus {
1279
+ LastAttemptedReleaseAction : v2 .ReleaseActionUpgrade ,
1280
+ UpgradeFailures : 1 ,
1281
+ }
1282
+ },
1283
+ want : & Upgrade {},
1284
+ },
1223
1285
{
1224
1286
name : "failed release with exhausted retries returns error" ,
1225
1287
state : ReleaseState {Status : ReleaseStatusFailed },
@@ -1370,6 +1432,9 @@ func TestAtomicRelease_actionForState(t *testing.T) {
1370
1432
g := NewWithT (t )
1371
1433
1372
1434
obj := & v2.HelmRelease {
1435
+ ObjectMeta : metav1.ObjectMeta {
1436
+ Annotations : tt .annotations ,
1437
+ },
1373
1438
Spec : v2.HelmReleaseSpec {
1374
1439
ReleaseName : mockReleaseName ,
1375
1440
TargetNamespace : mockReleaseNamespace ,
0 commit comments