github.com/pivotal-cf/go-pivnet/v6@v6.0.2/download/progress_test.go (about)

     1  package download_test
     2  
     3  import (
     4  	"io/ioutil"
     5  	"time"
     6  
     7  	"golang.org/x/sync/errgroup"
     8  
     9  	"github.com/pivotal-cf/go-pivnet/v6/download"
    10  
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Progress", func() {
    16  	var (
    17  		b download.Bar
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		b = download.NewBar()
    22  		b.SetOutput(GinkgoWriter)
    23  	})
    24  
    25  	It("handles concurrent writes without racing", func() {
    26  		total := 10
    27  
    28  		b.SetTotal(int64(total))
    29  		b.Output = ioutil.Discard
    30  		b.Kickoff()
    31  
    32  		var g errgroup.Group
    33  		for i := 0; i < total; i++ {
    34  			g.Go(func() error {
    35  				time.Sleep(10 * time.Millisecond)
    36  
    37  				_, err := b.Write([]byte("a"))
    38  				return err
    39  			})
    40  		}
    41  
    42  		err := g.Wait()
    43  		Expect(err).NotTo(HaveOccurred())
    44  	})
    45  })