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  }