Modified progress reader to close silently when read is complete.
Closes #13432 Signed-off-by: Moysés Borges <moysesb@gmail.com>
This commit is contained in:
parent
f7309796db
commit
35c5de58c3
2 changed files with 114 additions and 6 deletions
94
progressreader/progressreader_test.go
Normal file
94
progressreader/progressreader_test.go
Normal file
|
@ -0,0 +1,94 @@
|
|||
package progressreader
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/pkg/streamformatter"
|
||||
)
|
||||
|
||||
func TestOutputOnPrematureClose(t *testing.T) {
|
||||
var outBuf bytes.Buffer
|
||||
content := []byte("TESTING")
|
||||
reader := ioutil.NopCloser(bytes.NewReader(content))
|
||||
writer := bufio.NewWriter(&outBuf)
|
||||
|
||||
prCfg := Config{
|
||||
In: reader,
|
||||
Out: writer,
|
||||
Formatter: streamformatter.NewStreamFormatter(),
|
||||
Size: len(content),
|
||||
NewLines: true,
|
||||
ID: "Test",
|
||||
Action: "Read",
|
||||
}
|
||||
pr := New(prCfg)
|
||||
|
||||
part := make([]byte, 4, 4)
|
||||
_, err := io.ReadFull(pr, part)
|
||||
if err != nil {
|
||||
pr.Close()
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := writer.Flush(); err != nil {
|
||||
pr.Close()
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
tlen := outBuf.Len()
|
||||
pr.Close()
|
||||
if err := writer.Flush(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if outBuf.Len() == tlen {
|
||||
t.Fatalf("Expected some output when closing prematurely")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCompleteSilently(t *testing.T) {
|
||||
var outBuf bytes.Buffer
|
||||
content := []byte("TESTING")
|
||||
reader := ioutil.NopCloser(bytes.NewReader(content))
|
||||
writer := bufio.NewWriter(&outBuf)
|
||||
|
||||
prCfg := Config{
|
||||
In: reader,
|
||||
Out: writer,
|
||||
Formatter: streamformatter.NewStreamFormatter(),
|
||||
Size: len(content),
|
||||
NewLines: true,
|
||||
ID: "Test",
|
||||
Action: "Read",
|
||||
}
|
||||
pr := New(prCfg)
|
||||
|
||||
out, err := ioutil.ReadAll(pr)
|
||||
if err != nil {
|
||||
pr.Close()
|
||||
t.Fatal(err)
|
||||
}
|
||||
if string(out) != "TESTING" {
|
||||
pr.Close()
|
||||
t.Fatalf("Unexpected output %q from reader", string(out))
|
||||
}
|
||||
|
||||
if err := writer.Flush(); err != nil {
|
||||
pr.Close()
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
tlen := outBuf.Len()
|
||||
pr.Close()
|
||||
if err := writer.Flush(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if outBuf.Len() > tlen {
|
||||
t.Fatalf("Should have closed silently when read is complete")
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue