github.com/hashicorp/packer@v1.14.3/packer/progressbar_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package packer 5 6 import ( 7 "bytes" 8 "io" 9 "testing" 10 11 "golang.org/x/sync/errgroup" 12 ) 13 14 // The following tests rarelly just happen. So we run them 100 times. 15 16 func TestProgressTracking_open_close(t *testing.T) { 17 var bar *UiProgressBar 18 19 tracker := bar.TrackProgress("1,", 1, 42, io.NopCloser(nil)) 20 tracker.Close() 21 22 tracker = bar.TrackProgress("2,", 1, 42, io.NopCloser(nil)) 23 tracker.Close() 24 } 25 26 func TestProgressTracking_multi_open_close(t *testing.T) { 27 var bar *UiProgressBar 28 g := errgroup.Group{} 29 30 for i := 0; i < 100; i++ { 31 g.Go(func() error { 32 tracker := bar.TrackProgress("file,", 1, 42, io.NopCloser(nil)) 33 return tracker.Close() 34 }) 35 } 36 if err := g.Wait(); err != nil { 37 t.Fatal(err) 38 } 39 } 40 41 func TestProgressTracking_races(t *testing.T) { 42 var bar *UiProgressBar 43 g := errgroup.Group{} 44 45 for i := 0; i < 100; i++ { 46 g.Go(func() error { 47 txt := []byte("foobarbaz dolores") 48 b := bytes.NewReader(txt) 49 tracker := bar.TrackProgress("file,", 1, 42, io.NopCloser(b)) 50 51 for i := 0; i < 42; i++ { 52 tracker.Read([]byte("i")) 53 } 54 return tracker.Close() 55 }) 56 } 57 58 if err := g.Wait(); err != nil { 59 t.Fatal(err) 60 } 61 }