parent
							
								
									4f073167b2
								
							
						
					
					
						commit
						751e549253
					
				
							
								
								
									
										104
									
								
								app_test.go
								
								
								
								
							
							
						
						
									
										104
									
								
								app_test.go
								
								
								
								
							|  | @ -198,3 +198,107 @@ releases: | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // See https://github.com/roboll/helmfile/issues/322
 | ||||||
|  | func TestFindAndIterateOverDesiredStates_Selectors(t *testing.T) { | ||||||
|  | 	absPaths := map[string]string{ | ||||||
|  | 		".": "/path/to", | ||||||
|  | 		"/path/to/helmfile.d": "/path/to/helmfile.d", | ||||||
|  | 	} | ||||||
|  | 	dirs := map[string]bool{ | ||||||
|  | 		"helmfile.d": true, | ||||||
|  | 	} | ||||||
|  | 	files := map[string]string{ | ||||||
|  | 		"helmfile.yaml": ` | ||||||
|  | helmfiles: | ||||||
|  | - helmfile.d/a*.yaml | ||||||
|  | - helmfile.d/b*.yaml | ||||||
|  | `, | ||||||
|  | 		"/path/to/helmfile.d/a1.yaml": ` | ||||||
|  | releases: | ||||||
|  | - name: zipkin | ||||||
|  |   chart: stable/zipkin | ||||||
|  | `, | ||||||
|  | 		"/path/to/helmfile.d/a2.yaml": ` | ||||||
|  | releases: | ||||||
|  | - name: prometheus | ||||||
|  |   chart: stable/prometheus | ||||||
|  | `, | ||||||
|  | 		"/path/to/helmfile.d/b.yaml": ` | ||||||
|  | releases: | ||||||
|  | - name: grafana | ||||||
|  |   chart: stable/grafana | ||||||
|  | `, | ||||||
|  | 	} | ||||||
|  | 	globMatches := map[string][]string{ | ||||||
|  | 		"/path/to/helmfile.d/a*.yaml": []string{"/path/to/helmfile.d/a1.yaml", "/path/to/helmfile.d/a2.yaml"}, | ||||||
|  | 		"/path/to/helmfile.d/b*.yaml": []string{"/path/to/helmfile.d/b.yaml"}, | ||||||
|  | 	} | ||||||
|  | 	fileExistsAt := func(path string) bool { | ||||||
|  | 		_, ok := files[path] | ||||||
|  | 		return ok | ||||||
|  | 	} | ||||||
|  | 	directoryExistsAt := func(path string) bool { | ||||||
|  | 		_, ok := dirs[path] | ||||||
|  | 		return ok | ||||||
|  | 	} | ||||||
|  | 	readFile := func(filename string) ([]byte, error) { | ||||||
|  | 		str, ok := files[filename] | ||||||
|  | 		if !ok { | ||||||
|  | 			return []byte(nil), fmt.Errorf("no file found: %s", filename) | ||||||
|  | 		} | ||||||
|  | 		return []byte(str), nil | ||||||
|  | 	} | ||||||
|  | 	glob := func(pattern string) ([]string, error) { | ||||||
|  | 		matches, ok := globMatches[pattern] | ||||||
|  | 		if !ok { | ||||||
|  | 			return []string(nil), fmt.Errorf("no file matched: %s", pattern) | ||||||
|  | 		} | ||||||
|  | 		return matches, nil | ||||||
|  | 	} | ||||||
|  | 	abs := func(path string) (string, error) { | ||||||
|  | 		a, ok := absPaths[path] | ||||||
|  | 		if !ok { | ||||||
|  | 			return "", fmt.Errorf("abs: unexpected path: %s", path) | ||||||
|  | 		} | ||||||
|  | 		return a, nil | ||||||
|  | 	} | ||||||
|  | 	app := &app{ | ||||||
|  | 		readFile:          readFile, | ||||||
|  | 		glob:              glob, | ||||||
|  | 		abs:               abs, | ||||||
|  | 		fileExistsAt:      fileExistsAt, | ||||||
|  | 		directoryExistsAt: directoryExistsAt, | ||||||
|  | 		kubeContext:       "default", | ||||||
|  | 		logger:            helmexec.NewLogger(os.Stderr, "debug"), | ||||||
|  | 	} | ||||||
|  | 	noop := func(st *state.HelmState, helm helmexec.Interface) []error { | ||||||
|  | 		return []error{} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	testcases := []struct { | ||||||
|  | 		label     string | ||||||
|  | 		expectErr bool | ||||||
|  | 		errMsg    string | ||||||
|  | 	}{ | ||||||
|  | 		{label: "name=prometheus", expectErr: false}, | ||||||
|  | 		{label: "name=", expectErr: true, errMsg: "Malformed label: name=. Expected label in form k=v or k!=v"}, | ||||||
|  | 		{label: "name!=", expectErr: true, errMsg: "Malformed label: name!=. Expected label in form k=v or k!=v"}, | ||||||
|  | 		{label: "name", expectErr: true, errMsg: "Malformed label: name. Expected label in form k=v or k!=v"}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for _, testcase := range testcases { | ||||||
|  | 		err := app.FindAndIterateOverDesiredStates( | ||||||
|  | 			"helmfile.yaml", noop, "", []string{testcase.label}, "default", | ||||||
|  | 		) | ||||||
|  | 		if testcase.expectErr { | ||||||
|  | 			if err == nil { | ||||||
|  | 				t.Errorf("error expected but not happened for name=%s", testcase.label) | ||||||
|  | 			} else if err.Error() != testcase.errMsg { | ||||||
|  | 				t.Errorf("unexpected error message: expected=\"%s\", actual=\"%s\"", testcase.errMsg, err.Error()) | ||||||
|  | 			} | ||||||
|  | 		} else if !testcase.expectErr && err != nil { | ||||||
|  | 			t.Errorf("unexpected error for name=%s: %v", testcase.label, err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								main.go
								
								
								
								
							
							
						
						
									
										3
									
								
								main.go
								
								
								
								
							|  | @ -751,8 +751,7 @@ func (a *app) loadDesiredStateFromYaml(yaml []byte, file string, namespace strin | ||||||
| 	if len(labels) > 0 { | 	if len(labels) > 0 { | ||||||
| 		err = st.FilterReleases(labels) | 		err = st.FilterReleases(labels) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			log.Print(err) | 			return nil, false, err | ||||||
| 			return nil, true, nil |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -62,7 +62,7 @@ func ParseLabels(l string) (LabelFilter, error) { | ||||||
| 			kv := strings.Split(label, "=") | 			kv := strings.Split(label, "=") | ||||||
| 			lf.positiveLabels = append(lf.positiveLabels, kv) | 			lf.positiveLabels = append(lf.positiveLabels, kv) | ||||||
| 		} else { // malformed case
 | 		} else { // malformed case
 | ||||||
| 			err = fmt.Errorf("Malformed label: %s. Expected label in form k=v or k!=v", label) | 			return lf, fmt.Errorf("Malformed label: %s. Expected label in form k=v or k!=v", label) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return lf, err | 	return lf, err | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue