github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/cmd/util/ledger/reporters/reporter_output_test.go (about) 1 package reporters_test 2 3 import ( 4 "os" 5 "path" 6 "sync" 7 "testing" 8 9 "github.com/rs/zerolog" 10 "github.com/stretchr/testify/require" 11 12 "github.com/onflow/flow-go/cmd/util/ledger/reporters" 13 ) 14 15 func TestReportFileWriter(t *testing.T) { 16 dir := t.TempDir() 17 18 filename := path.Join(dir, "test.json") 19 log := zerolog.Logger{} 20 21 requireFileContains := func(t *testing.T, expected string) { 22 dat, err := os.ReadFile(filename) 23 require.NoError(t, err) 24 25 require.Equal(t, []byte(expected), dat) 26 } 27 28 type testData struct { 29 TestField string 30 } 31 32 t.Run("Open & Close - empty json array", func(t *testing.T) { 33 rw := reporters.NewReportFileWriter(filename, log) 34 rw.Close() 35 36 requireFileContains(t, "[]") 37 }) 38 t.Run("Open & Write One & Close - json array with one element", func(t *testing.T) { 39 rw := reporters.NewReportFileWriter(filename, log) 40 rw.Write(testData{TestField: "something"}) 41 rw.Close() 42 43 requireFileContains(t, "[{\"TestField\":\"something\"}]") 44 }) 45 t.Run("Open & Write Many & Close - json array with many elements", func(t *testing.T) { 46 rw := reporters.NewReportFileWriter(filename, log) 47 rw.Write(testData{TestField: "something0"}) 48 rw.Write(testData{TestField: "something1"}) 49 rw.Write(testData{TestField: "something2"}) 50 51 rw.Close() 52 53 requireFileContains(t, 54 "[{\"TestField\":\"something0\"},{\"TestField\":\"something1\"},{\"TestField\":\"something2\"}]") 55 }) 56 57 t.Run("Open & Write Many in threads & Close", func(t *testing.T) { 58 rw := reporters.NewReportFileWriter(filename, log) 59 60 wg := &sync.WaitGroup{} 61 for i := 0; i < 3; i++ { 62 wg.Add(1) 63 go func() { 64 rw.Write(testData{TestField: "something"}) 65 wg.Done() 66 }() 67 } 68 69 wg.Wait() 70 71 rw.Close() 72 73 requireFileContains(t, 74 "[{\"TestField\":\"something\"},{\"TestField\":\"something\"},{\"TestField\":\"something\"}]") 75 }) 76 }