github.com/jfrog/jfrog-cli-core/v2@v2.51.0/utils/tests/utils.go (about) 1 package tests 2 3 import ( 4 "bytes" 5 "errors" 6 "fmt" 7 "os" 8 "path/filepath" 9 "strings" 10 11 xrayUtils "github.com/jfrog/jfrog-client-go/xray/services/utils" 12 13 "github.com/jfrog/jfrog-cli-core/v2/utils/coreutils" 14 corelog "github.com/jfrog/jfrog-cli-core/v2/utils/log" 15 "github.com/jfrog/jfrog-client-go/utils/io/fileutils" 16 "github.com/jfrog/jfrog-client-go/utils/log" 17 ) 18 19 // Set HomeDir to desired location. 20 // Caller is responsible to set the old home location back. 21 func SetJfrogHome() (cleanUp func(), err error) { 22 homePath, err := fileutils.CreateTempDir() 23 if err != nil { 24 log.Error(err) 25 os.Exit(1) 26 } 27 28 homePath, err = filepath.Abs(homePath) 29 if err != nil { 30 return func() {}, err 31 } 32 33 err = os.Setenv(coreutils.HomeDir, homePath) 34 if err != nil { 35 return func() {}, err 36 } 37 38 return func() { cleanUpUnitTestsJfrogHome(homePath) }, nil 39 } 40 41 func cleanUpUnitTestsJfrogHome(homeDir string) { 42 homePath, err := filepath.Abs(homeDir) 43 if err != nil { 44 log.Error(err) 45 os.Exit(1) 46 } 47 errorOccurred := false 48 if err := fileutils.RemoveTempDir(homePath); err != nil { 49 errorOccurred = true 50 log.Error(err) 51 } 52 if err := os.Unsetenv(coreutils.HomeDir); err != nil { 53 errorOccurred = true 54 log.Error(err) 55 } 56 if errorOccurred { 57 os.Exit(1) 58 } 59 } 60 61 func ValidateListsIdentical(expected, actual []string) error { 62 if len(actual) != len(expected) { 63 return fmt.Errorf("unexpected behavior, \nexpected: [%s], \nfound: [%s]", strings.Join(expected, ", "), strings.Join(actual, ", ")) 64 } 65 err := compare(expected, actual) 66 return err 67 } 68 69 func compare(expected, actual []string) error { 70 for _, v := range expected { 71 for i, r := range actual { 72 if v == r { 73 break 74 } 75 if i == len(actual)-1 { 76 return errors.New("Missing file : " + v) 77 } 78 } 79 } 80 return nil 81 } 82 83 // CompareTree returns true iff the two trees contain the same nodes (regardless of their order) 84 func CompareTree(expected, actual *xrayUtils.GraphNode) bool { 85 if expected.Id != actual.Id { 86 return false 87 } 88 // Make sure all children are equal, when order doesn't matter 89 for _, expectedNode := range expected.Nodes { 90 found := false 91 for _, actualNode := range actual.Nodes { 92 if CompareTree(expectedNode, actualNode) { 93 found = true 94 break 95 } 96 } 97 // After iterating over all B's nodes, non match nodeA so the tree aren't equals. 98 if !found { 99 return false 100 } 101 } 102 return true 103 } 104 105 // Set new logger with output redirection to a buffer. 106 // Caller is responsible to set the old log back. 107 func RedirectLogOutputToBuffer() (outputBuffer, stderrBuffer *bytes.Buffer, previousLog log.Log) { 108 stderrBuffer, outputBuffer = &bytes.Buffer{}, &bytes.Buffer{} 109 previousLog = log.Logger 110 newLog := log.NewLogger(corelog.GetCliLogLevel(), nil) 111 newLog.SetOutputWriter(outputBuffer) 112 newLog.SetLogsWriter(stderrBuffer, 0) 113 log.SetLogger(newLog) 114 return outputBuffer, stderrBuffer, previousLog 115 }