github.com/cobalt77/jfrog-client-go@v0.14.5/artifactory/services/utils/searchutil_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"fmt"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/cobalt77/jfrog-client-go/utils"
     9  	"github.com/cobalt77/jfrog-client-go/utils/io/content"
    10  	"github.com/cobalt77/jfrog-client-go/utils/io/fileutils"
    11  	"github.com/cobalt77/jfrog-client-go/utils/log"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestGetFullUrl(t *testing.T) {
    16  	assertUrl("Repo", "some/path", "name", "Repo/some/path/name", t)
    17  	assertUrl("", "some/path", "name", "some/path/name", t)
    18  	assertUrl("Repo", "", "name", "Repo/name", t)
    19  	assertUrl("Repo", "some/path", "", "Repo/some/path", t)
    20  	assertUrl("", "some/path", "", "some/path", t)
    21  	assertUrl("", "", "", "", t)
    22  }
    23  
    24  func assertUrl(repo, path, name, fullUrl string, t *testing.T) {
    25  	testItem := ResultItem{Repo: repo, Path: path, Name: name}
    26  	if fullUrl != testItem.GetItemRelativePath() {
    27  		t.Error("Unexpected URL built. Expected: `" + fullUrl + "` Got `" + testItem.GetItemRelativePath() + "`")
    28  	}
    29  }
    30  
    31  func TestReduceTopChainDirResult(t *testing.T) {
    32  	testDataPath, err := getBaseTestDir()
    33  	assert.NoError(t, err)
    34  
    35  	// Single folder.
    36  	reader := content.NewContentReader(filepath.Join(testDataPath, "reduce_top_chain_step1.json"), content.DefaultKey)
    37  	resultReader, err := ReduceTopChainDirResult(reader)
    38  	assert.NoError(t, err)
    39  	isMatch, err := fileutils.FilesIdentical(filepath.Join(testDataPath, "reduce_top_chain_results_a.json"), resultReader.GetFilePath())
    40  	assert.NoError(t, err)
    41  	assert.True(t, isMatch)
    42  	assert.NoError(t, resultReader.Close())
    43  
    44  	// Two different folders not sorted.
    45  	reader = content.NewContentReader(filepath.Join(testDataPath, "reduce_top_chain_step2.json"), content.DefaultKey)
    46  	resultReader, err = ReduceTopChainDirResult(reader)
    47  	assert.NoError(t, err)
    48  	isMatch, err = fileutils.FilesIdentical(filepath.Join(testDataPath, "reduce_top_chain_results_b.json"), resultReader.GetFilePath())
    49  	assert.NoError(t, err)
    50  	assert.True(t, isMatch)
    51  	assert.NoError(t, resultReader.Close())
    52  
    53  	// One folder contains another, should reduce results.
    54  	reader = content.NewContentReader(filepath.Join(testDataPath, "reduce_top_chain_step3.json"), content.DefaultKey)
    55  	resultReader, err = ReduceTopChainDirResult(reader)
    56  	assert.NoError(t, err)
    57  	isMatch, err = fileutils.FilesIdentical(filepath.Join(testDataPath, "reduce_top_chain_results_b.json"), resultReader.GetFilePath())
    58  	assert.NoError(t, err)
    59  	assert.True(t, isMatch)
    60  	assert.NoError(t, resultReader.Close())
    61  
    62  	oldMaxSize := utils.MaxBufferSize
    63  	defer func() { utils.MaxBufferSize = oldMaxSize }()
    64  	//Test buffer + sort
    65  	utils.MaxBufferSize = 3
    66  	reader = content.NewContentReader(filepath.Join(testDataPath, "reduce_top_chain_step4.json"), content.DefaultKey)
    67  	resultReader, err = ReduceTopChainDirResult(reader)
    68  	assert.NoError(t, err)
    69  	isMatch, err = fileutils.FilesIdentical(filepath.Join(testDataPath, "reduce_top_chain_results_c.json"), resultReader.GetFilePath())
    70  	assert.NoError(t, err)
    71  	assert.True(t, isMatch)
    72  	assert.NoError(t, resultReader.Close())
    73  
    74  	//Two files in the same folder and one is a prefix to another.
    75  	reader = content.NewContentReader(filepath.Join(testDataPath, "reduce_top_chain_step5.json"), content.DefaultKey)
    76  	resultReader, err = ReduceTopChainDirResult(reader)
    77  	assert.NoError(t, err)
    78  	isMatch, err = fileutils.FilesIdentical(filepath.Join(testDataPath, "reduce_top_chain_results_d.json"), resultReader.GetFilePath())
    79  	assert.NoError(t, err)
    80  	assert.True(t, isMatch)
    81  	assert.NoError(t, resultReader.Close())
    82  
    83  	//Two files in the same folder and one is a prefix to another and their folder.
    84  	reader = content.NewContentReader(filepath.Join(testDataPath, "reduce_top_chain_step6.json"), content.DefaultKey)
    85  	resultReader, err = ReduceTopChainDirResult(reader)
    86  	assert.NoError(t, err)
    87  	isMatch, err = fileutils.FilesIdentical(filepath.Join(testDataPath, "reduce_top_chain_results_e.json"), resultReader.GetFilePath())
    88  	assert.NoError(t, err)
    89  	assert.True(t, isMatch)
    90  	assert.NoError(t, resultReader.Close())
    91  }
    92  
    93  func TestReduceTopChainDirResultNoResults(t *testing.T) {
    94  	testDataPath, err := getBaseTestDir()
    95  	assert.NoError(t, err)
    96  	reader := content.NewContentReader(filepath.Join(testDataPath, "no_results.json"), content.DefaultKey)
    97  	resultReader, err := ReduceTopChainDirResult(reader)
    98  	assert.NoError(t, err)
    99  	assert.True(t, resultReader.IsEmpty())
   100  }
   101  
   102  func TestReduceTopChainDirResultEmptyRepo(t *testing.T) {
   103  	testDataPath, err := getBaseTestDir()
   104  	assert.NoError(t, err)
   105  	reader := content.NewContentReader(filepath.Join(testDataPath, "reduce_top_chain_empty_repo.json"), content.DefaultKey)
   106  	resultReader, err := ReduceTopChainDirResult(reader)
   107  	assert.NoError(t, err)
   108  	assert.True(t, resultReader.IsEmpty())
   109  	assert.NoError(t, resultReader.Close())
   110  }
   111  
   112  func TestReduceBottomChainDirResult(t *testing.T) {
   113  	testDataPath, err := getBaseTestDir()
   114  	assert.NoError(t, err)
   115  	oldMaxSize := utils.MaxBufferSize
   116  	defer func() { utils.MaxBufferSize = oldMaxSize }()
   117  	for i := 0; i < 2; i++ {
   118  		testResult := []int{1, 2, 2, 2, 3}
   119  		for i := 1; i <= 5; i++ {
   120  			reader := content.NewContentReader(filepath.Join(testDataPath, fmt.Sprintf("reduce_bottom_chain_step%v.json", i)), content.DefaultKey)
   121  			resultReader, err := ReduceBottomChainDirResult(reader)
   122  			assert.NoError(t, err)
   123  			isMatch, err := fileutils.FilesIdentical(filepath.Join(testDataPath, fmt.Sprintf("reduce_bottom_chain_step%vresults.json", testResult[i-1])), resultReader.GetFilePath())
   124  			assert.NoError(t, err)
   125  			assert.True(t, isMatch)
   126  			if isMatch == false {
   127  				l, _ := resultReader.Length()
   128  				log.Debug(fmt.Sprintf("reduce_bottom_chain_step%v.json  length: %v name %v", i, l, resultReader.GetFilePath()))
   129  			} else {
   130  				assert.NoError(t, resultReader.Close())
   131  			}
   132  		}
   133  		utils.MaxBufferSize = 2
   134  	}
   135  }
   136  
   137  func TestMergeIncreasingSortedFiles(t *testing.T) {
   138  	testDataPath, err := getBaseTestDir()
   139  	assert.NoError(t, err)
   140  	var sortedFiles []*content.ContentReader
   141  	for i := 1; i <= 3; i++ {
   142  		sortedFiles = append(sortedFiles, content.NewContentReader(filepath.Join(testDataPath, fmt.Sprintf("buffer_file_ascending_order_%v.json", i)), content.DefaultKey))
   143  	}
   144  	resultReader, err := MergeSortedFiles(sortedFiles, true)
   145  	assert.NoError(t, err)
   146  	isMatch, err := fileutils.FilesIdentical(resultReader.GetFilePath(), filepath.Join(testDataPath, "merged_buffer_ascending_order.json"))
   147  	assert.NoError(t, err)
   148  	assert.True(t, isMatch)
   149  	assert.NoError(t, resultReader.Close())
   150  }
   151  
   152  func TestMergeDecreasingSortedFiles(t *testing.T) {
   153  	testDataPath, err := getBaseTestDir()
   154  	assert.NoError(t, err)
   155  	var sortedFiles []*content.ContentReader
   156  	for i := 1; i <= 3; i++ {
   157  		sortedFiles = append(sortedFiles, content.NewContentReader(filepath.Join(testDataPath, fmt.Sprintf("buffer_file_descending_order_%v.json", i)), content.DefaultKey))
   158  	}
   159  	resultReader, err := MergeSortedFiles(sortedFiles, false)
   160  	assert.NoError(t, err)
   161  	isMatch, err := fileutils.FilesIdentical(resultReader.GetFilePath(), filepath.Join(testDataPath, "merged_buffer_descending_order.json"))
   162  	assert.NoError(t, err)
   163  	assert.True(t, isMatch)
   164  	assert.NoError(t, resultReader.Close())
   165  }