fix: more stringent condition checking (#869)
The code requires `foo.enabled` condition pattern but didn't check the latter part. Signed-off-by: Dejan Benedik <dejan.benedik@3fs.si>
This commit is contained in:
		
							parent
							
								
									c498af3f52
								
							
						
					
					
						commit
						47328f31aa
					
				|  | @ -2208,7 +2208,7 @@ func ConditionEnabled(r ReleaseSpec, values map[string]interface{}) (bool, error | |||
| 		return true, nil | ||||
| 	} | ||||
| 	conditionSplit := strings.Split(r.Condition, ".") | ||||
| 	if len(conditionSplit) != 2 { | ||||
| 	if len(conditionSplit) != 2 || conditionSplit[1] != "enabled" { | ||||
| 		return false, fmt.Errorf("Condition value must be in the form 'foo.enabled' where 'foo' can be modified as necessary") | ||||
| 	} | ||||
| 	if v, ok := values[conditionSplit[0]]; ok { | ||||
|  |  | |||
|  | @ -2436,6 +2436,110 @@ func TestHelmState_TestReleasesNoCleanUp(t *testing.T) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestConditionEnabled(t *testing.T) { | ||||
| 	tests := []struct { | ||||
| 		name      string | ||||
| 		condition string | ||||
| 		values    map[string]interface{} | ||||
| 		want      bool | ||||
| 		wantErr   bool | ||||
| 		wantPanic bool | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name:      "enabled", | ||||
| 			condition: "foo.enabled", | ||||
| 			values: map[string]interface{}{ | ||||
| 				"foo": map[string]interface{}{ | ||||
| 					"enabled": true, | ||||
| 				}, | ||||
| 			}, | ||||
| 			want: true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "disabled", | ||||
| 			condition: "foo.enabled", | ||||
| 			values: map[string]interface{}{ | ||||
| 				"foo": map[string]interface{}{ | ||||
| 					"enabled": false, | ||||
| 				}, | ||||
| 			}, | ||||
| 			want: false, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "missing enabled", | ||||
| 			condition: "foo.enabled", | ||||
| 			values: map[string]interface{}{ | ||||
| 				"foo": map[string]interface{}{ | ||||
| 					"something else": false, | ||||
| 				}, | ||||
| 			}, | ||||
| 			want: false, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "foo nil", | ||||
| 			condition: "foo.enabled", | ||||
| 			values: map[string]interface{}{ | ||||
| 				"foo": nil, | ||||
| 			}, | ||||
| 			wantPanic: true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "foo missing", | ||||
| 			condition: "foo.enabled", | ||||
| 			values:    map[string]interface{}{}, | ||||
| 			wantPanic: true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "wrong suffix", | ||||
| 			condition: "services.foo_enabled", | ||||
| 			want:      false, | ||||
| 			wantErr:   true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "too short condition", | ||||
| 			condition: "rnd42", | ||||
| 			want:      false, | ||||
| 			wantErr:   true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "too long condition", | ||||
| 			condition: "rnd42.really.enabled", | ||||
| 			want:      false, | ||||
| 			wantErr:   true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name:      "empty", | ||||
| 			condition: "", | ||||
| 			want:      true, | ||||
| 		}, | ||||
| 	} | ||||
| 	for i := range tests { | ||||
| 		tt := tests[i] | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			if tt.wantPanic { | ||||
| 				defer func() { | ||||
| 					if r := recover(); r == nil { | ||||
| 						t.Errorf("ConditionEnabled() for %s expected panic", tt.name) | ||||
| 					} | ||||
| 				}() | ||||
| 			} | ||||
| 			res, err := ConditionEnabled(ReleaseSpec{Condition: tt.condition}, tt.values) | ||||
| 			if tt.wantErr { | ||||
| 				if err == nil { | ||||
| 					t.Errorf("ConditionEnabled() for %s expected err response", tt.name) | ||||
| 				} | ||||
| 				return | ||||
| 			} | ||||
| 			if err != nil { | ||||
| 				t.Errorf("ConditionEnabled() for %s unexpected err %v", tt.name, err) | ||||
| 			} | ||||
| 			if res != tt.want { | ||||
| 				t.Errorf("ConditionEnabled() for %s = %v, want %v", tt.name, res, tt.want) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestHelmState_NoReleaseMatched(t *testing.T) { | ||||
| 	releases := []ReleaseSpec{ | ||||
| 		{ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue