github.com/jfrog/jfrog-cli-core/v2@v2.52.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  }