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 }