progressreader_test.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package progressreader
  2. import (
  3. "bufio"
  4. "bytes"
  5. "io"
  6. "io/ioutil"
  7. "testing"
  8. "github.com/docker/docker/pkg/streamformatter"
  9. )
  10. func TestOutputOnPrematureClose(t *testing.T) {
  11. var outBuf bytes.Buffer
  12. content := []byte("TESTING")
  13. reader := ioutil.NopCloser(bytes.NewReader(content))
  14. writer := bufio.NewWriter(&outBuf)
  15. prCfg := Config{
  16. In: reader,
  17. Out: writer,
  18. Formatter: streamformatter.NewStreamFormatter(),
  19. Size: len(content),
  20. NewLines: true,
  21. ID: "Test",
  22. Action: "Read",
  23. }
  24. pr := New(prCfg)
  25. part := make([]byte, 4, 4)
  26. _, err := io.ReadFull(pr, part)
  27. if err != nil {
  28. pr.Close()
  29. t.Fatal(err)
  30. }
  31. if err := writer.Flush(); err != nil {
  32. pr.Close()
  33. t.Fatal(err)
  34. }
  35. tlen := outBuf.Len()
  36. pr.Close()
  37. if err := writer.Flush(); err != nil {
  38. t.Fatal(err)
  39. }
  40. if outBuf.Len() == tlen {
  41. t.Fatalf("Expected some output when closing prematurely")
  42. }
  43. }
  44. func TestCompleteSilently(t *testing.T) {
  45. var outBuf bytes.Buffer
  46. content := []byte("TESTING")
  47. reader := ioutil.NopCloser(bytes.NewReader(content))
  48. writer := bufio.NewWriter(&outBuf)
  49. prCfg := Config{
  50. In: reader,
  51. Out: writer,
  52. Formatter: streamformatter.NewStreamFormatter(),
  53. Size: len(content),
  54. NewLines: true,
  55. ID: "Test",
  56. Action: "Read",
  57. }
  58. pr := New(prCfg)
  59. out, err := ioutil.ReadAll(pr)
  60. if err != nil {
  61. pr.Close()
  62. t.Fatal(err)
  63. }
  64. if string(out) != "TESTING" {
  65. pr.Close()
  66. t.Fatalf("Unexpected output %q from reader", string(out))
  67. }
  68. if err := writer.Flush(); err != nil {
  69. pr.Close()
  70. t.Fatal(err)
  71. }
  72. tlen := outBuf.Len()
  73. pr.Close()
  74. if err := writer.Flush(); err != nil {
  75. t.Fatal(err)
  76. }
  77. if outBuf.Len() > tlen {
  78. t.Fatalf("Should have closed silently when read is complete")
  79. }
  80. }