| package main |
| |
| import ( |
| "fmt" |
| "io/ioutil" |
| "path/filepath" |
| "regexp" |
| ) |
| |
| var testFuncRegexp *regexp.Regexp |
| |
| func init() { |
| testFuncRegexp = regexp.MustCompile(`(?m)^\s*func\s+\(\w*\s*\*(\w+Suite)\)\s+(Test\w+)`) |
| } |
| |
| func enumerateTestsForBytes(b []byte) ([]string, error) { |
| var tests []string |
| submatches := testFuncRegexp.FindAllSubmatch(b, -1) |
| for _, submatch := range submatches { |
| if len(submatch) == 3 { |
| tests = append(tests, fmt.Sprintf("%s.%s$", submatch[1], submatch[2])) |
| } |
| } |
| return tests, nil |
| } |
| |
| // enumerateTests enumerates valid `-check.f` strings for all the test functions. |
| // Note that we use regexp rather than parsing Go files for performance reason. |
| // (Try `TESTFLAGS=-check.list make test-integration` to see the slowness of parsing) |
| // The files needs to be `gofmt`-ed |
| // |
| // The result will be as follows, but unsorted ('$' is appended because they are regexp for `-check.f`): |
| // "DockerAuthzSuite.TestAuthZPluginAPIDenyResponse$" |
| // "DockerAuthzSuite.TestAuthZPluginAllowEventStream$" |
| // ... |
| // "DockerTrustedSwarmSuite.TestTrustedServiceUpdate$" |
| func enumerateTests(wd string) ([]string, error) { |
| testGoFiles, err := filepath.Glob(filepath.Join(wd, "integration-cli", "*_test.go")) |
| if err != nil { |
| return nil, err |
| } |
| var allTests []string |
| for _, testGoFile := range testGoFiles { |
| b, err := ioutil.ReadFile(testGoFile) |
| if err != nil { |
| return nil, err |
| } |
| tests, err := enumerateTestsForBytes(b) |
| if err != nil { |
| return nil, err |
| } |
| allTests = append(allTests, tests...) |
| } |
| return allTests, nil |
| } |