github.com/cobalt77/jfrog-client-go@v0.14.5/utils/tests/utils.go (about) 1 package tests 2 3 import ( 4 "bufio" 5 "net" 6 "net/http" 7 "os" 8 "os/exec" 9 "path/filepath" 10 "strings" 11 12 "github.com/cobalt77/jfrog-client-go/utils/io/fileutils" 13 "github.com/cobalt77/jfrog-client-go/utils/log" 14 ) 15 16 type HttpServerHandlers map[string]func(w http.ResponseWriter, r *http.Request) 17 18 func StartHttpServer(handlers HttpServerHandlers) (int, error) { 19 listener, err := net.Listen("tcp", ":0") 20 if err != nil { 21 return 0, err 22 } 23 go func() { 24 httpMux := http.NewServeMux() 25 for k, v := range handlers { 26 httpMux.HandleFunc(k, v) 27 } 28 err = http.Serve(listener, httpMux) 29 if err != nil { 30 panic(err) 31 } 32 }() 33 return listener.Addr().(*net.TCPAddr).Port, nil 34 } 35 36 func GetTestPackages(searchPattern string) []string { 37 // Get all packages with test files. 38 cmd := exec.Command("go", "list", "-f", "{{.ImportPath}} {{.TestGoFiles}}", searchPattern) 39 packages, _ := cmd.Output() 40 41 scanner := bufio.NewScanner(strings.NewReader(string(packages))) 42 var unitTests []string 43 for scanner.Scan() { 44 fields := strings.Split(scanner.Text(), " ") 45 // Skip if package does not contain test files. 46 if len(fields) > 1 && len(fields[1]) > 2 { 47 unitTests = append(unitTests, fields[0]) 48 } 49 } 50 return unitTests 51 } 52 53 func ExcludeTestsPackage(packages []string, packageToExclude string) []string { 54 var res []string 55 for _, packageName := range packages { 56 if packageName != packageToExclude { 57 res = append(res, packageName) 58 } 59 } 60 return res 61 } 62 63 func RunTests(testsPackages []string, hideUnitTestsLog bool) error { 64 if len(testsPackages) == 0 { 65 return nil 66 } 67 testsPackages = append([]string{"test", "-v"}, testsPackages...) 68 cmd := exec.Command("go", testsPackages...) 69 70 if hideUnitTestsLog { 71 tempDirPath, err := getTestsLogsDir() 72 exitOnErr(err) 73 74 f, err := os.Create(filepath.Join(tempDirPath, "unit_tests.log")) 75 exitOnErr(err) 76 77 cmd.Stdout, cmd.Stderr = f, f 78 if err := cmd.Run(); err != nil { 79 log.Error("Unit tests failed, full report available at the following path:", f.Name()) 80 exitOnErr(err) 81 } 82 log.Info("Full unit testing report available at the following path:", f.Name()) 83 return nil 84 } 85 86 cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr 87 if err := cmd.Run(); err != nil { 88 log.Error("Unit tests failed") 89 exitOnErr(err) 90 } 91 92 return nil 93 } 94 95 func getTestsLogsDir() (string, error) { 96 tempDirPath := filepath.Join(os.TempDir(), "jfrog_tests_logs") 97 return tempDirPath, fileutils.CreateDirIfNotExist(tempDirPath) 98 } 99 100 func exitOnErr(err error) { 101 if err != nil { 102 log.Error(err) 103 os.Exit(1) 104 } 105 }