github.com/jfrog/jfrog-client-go@v1.40.2/utils/io/content/contentwriter_test.go (about) 1 package content 2 3 import ( 4 "encoding/json" 5 "io" 6 "os" 7 "sync" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 type outputRecord struct { 14 IntKey int `json:"intKey"` 15 StrKey string `json:"strKey"` 16 BoolKey bool `json:"boolKey"` 17 } 18 19 var records = []outputRecord{ 20 {1, "1", true}, 21 {2, "2", false}, 22 {3, "3", true}, 23 {4, "4", false}, 24 {5, "5", false}, 25 {6, "6", true}, 26 {7, "7", true}, 27 {8, "8", true}, 28 {9, "9", false}, 29 {10, "10", false}, 30 {11, "11", false}, 31 {12, "12", true}, 32 {13, "13", false}, 33 {14, "14", true}, 34 {15, "15", true}, 35 {16, "16", true}, 36 {17, "17", false}, 37 {18, "18", true}, 38 {19, "19", false}, 39 {20, "20", false}, 40 {21, "21", true}, 41 {22, "22", true}, 42 {23, "23", true}, 43 {24, "24", false}, 44 {25, "25", false}, 45 {26, "26", false}, 46 {27, "27", true}, 47 {28, "28", false}, 48 {29, "29", true}, 49 {30, "30", true}, 50 } 51 52 type Response struct { 53 Arr []outputRecord `json:"arr"` 54 } 55 56 func writeTestRecords(t *testing.T, cw *ContentWriter) { 57 var sendersWaiter sync.WaitGroup 58 for i := 0; i < len(records); i += 3 { 59 sendersWaiter.Add(1) 60 go func(start, end int) { 61 defer sendersWaiter.Done() 62 for j := start; j < end; j++ { 63 cw.Write(records[j]) 64 } 65 }(i, i+3) 66 } 67 sendersWaiter.Wait() 68 assert.NoError(t, cw.Close()) 69 } 70 71 func TestContentWriter(t *testing.T) { 72 writer, err := NewContentWriter("arr", true, false) 73 assert.NoError(t, err) 74 writeTestRecords(t, writer) 75 of, err := os.Open(writer.GetFilePath()) 76 assert.NoError(t, err) 77 byteValue, _ := io.ReadAll(of) 78 var response Response 79 assert.NoError(t, json.Unmarshal(byteValue, &response)) 80 assert.NoError(t, of.Close()) 81 assert.NoError(t, writer.RemoveOutputFilePath()) 82 for i := range records { 83 assert.Contains(t, response.Arr, records[i], "record %s missing", records[i].StrKey) 84 } 85 } 86 87 func TestContentReaderAfterWriter(t *testing.T) { 88 writer, err := NewContentWriter(DefaultKey, true, false) 89 assert.NoError(t, err) 90 writeTestRecords(t, writer) 91 reader := NewContentReader(writer.GetFilePath(), DefaultKey) 92 defer closeAndAssert(t, reader) 93 recordCount := 0 94 for item := new(outputRecord); reader.NextRecord(item) == nil; item = new(outputRecord) { 95 assert.Contains(t, records, *item, "record %s missing", item.StrKey) 96 recordCount++ 97 } 98 assert.NoError(t, reader.GetError(), "Couldn't get reader error") 99 assert.Equal(t, len(records), recordCount, "The amount of records were read (%d) is different then expected", recordCount) 100 }