progressreader_test.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package progress // import "github.com/docker/docker/pkg/progress"
  2. import (
  3. "bytes"
  4. "io"
  5. "testing"
  6. )
  7. func TestOutputOnPrematureClose(t *testing.T) {
  8. content := []byte("TESTING")
  9. reader := io.NopCloser(bytes.NewReader(content))
  10. progressChan := make(chan Progress, 10)
  11. pr := NewProgressReader(reader, ChanOutput(progressChan), int64(len(content)), "Test", "Read")
  12. part := make([]byte, 4)
  13. _, err := io.ReadFull(pr, part)
  14. if err != nil {
  15. pr.Close()
  16. t.Fatal(err)
  17. }
  18. drainLoop:
  19. for {
  20. select {
  21. case <-progressChan:
  22. default:
  23. break drainLoop
  24. }
  25. }
  26. pr.Close()
  27. select {
  28. case <-progressChan:
  29. default:
  30. t.Fatalf("Expected some output when closing prematurely")
  31. }
  32. }
  33. func TestCompleteSilently(t *testing.T) {
  34. content := []byte("TESTING")
  35. reader := io.NopCloser(bytes.NewReader(content))
  36. progressChan := make(chan Progress, 10)
  37. pr := NewProgressReader(reader, ChanOutput(progressChan), int64(len(content)), "Test", "Read")
  38. out, err := io.ReadAll(pr)
  39. if err != nil {
  40. pr.Close()
  41. t.Fatal(err)
  42. }
  43. if string(out) != "TESTING" {
  44. pr.Close()
  45. t.Fatalf("Unexpected output %q from reader", string(out))
  46. }
  47. drainLoop:
  48. for {
  49. select {
  50. case <-progressChan:
  51. default:
  52. break drainLoop
  53. }
  54. }
  55. pr.Close()
  56. select {
  57. case <-progressChan:
  58. t.Fatalf("Should have closed silently when read is complete")
  59. default:
  60. }
  61. }