|
|
@@ -4,6 +4,7 @@ import (
|
|
|
"bufio"
|
|
|
"bytes"
|
|
|
"encoding/hex"
|
|
|
+ "io"
|
|
|
"io/ioutil"
|
|
|
"net"
|
|
|
"reflect"
|
|
|
@@ -237,3 +238,58 @@ func TestNewPeer(t *testing.T) {
|
|
|
// Should not hang.
|
|
|
p.Disconnect(DiscAlreadyConnected)
|
|
|
}
|
|
|
+
|
|
|
+func TestEOFSignal(t *testing.T) {
|
|
|
+ rb := make([]byte, 10)
|
|
|
+
|
|
|
+ // empty reader
|
|
|
+ eof := make(chan struct{}, 1)
|
|
|
+ sig := &eofSignal{new(bytes.Buffer), 0, eof}
|
|
|
+ if n, err := sig.Read(rb); n != 0 || err != io.EOF {
|
|
|
+ t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
|
|
|
+ }
|
|
|
+ select {
|
|
|
+ case <-eof:
|
|
|
+ default:
|
|
|
+ t.Error("EOF chan not signaled")
|
|
|
+ }
|
|
|
+
|
|
|
+ // count before error
|
|
|
+ eof = make(chan struct{}, 1)
|
|
|
+ sig = &eofSignal{bytes.NewBufferString("aaaaaaaa"), 4, eof}
|
|
|
+ if n, err := sig.Read(rb); n != 8 || err != nil {
|
|
|
+ t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
|
|
|
+ }
|
|
|
+ select {
|
|
|
+ case <-eof:
|
|
|
+ default:
|
|
|
+ t.Error("EOF chan not signaled")
|
|
|
+ }
|
|
|
+
|
|
|
+ // error before count
|
|
|
+ eof = make(chan struct{}, 1)
|
|
|
+ sig = &eofSignal{bytes.NewBufferString("aaaa"), 999, eof}
|
|
|
+ if n, err := sig.Read(rb); n != 4 || err != nil {
|
|
|
+ t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
|
|
|
+ }
|
|
|
+ if n, err := sig.Read(rb); n != 0 || err != io.EOF {
|
|
|
+ t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
|
|
|
+ }
|
|
|
+ select {
|
|
|
+ case <-eof:
|
|
|
+ default:
|
|
|
+ t.Error("EOF chan not signaled")
|
|
|
+ }
|
|
|
+
|
|
|
+ // no signal if neither occurs
|
|
|
+ eof = make(chan struct{}, 1)
|
|
|
+ sig = &eofSignal{bytes.NewBufferString("aaaaaaaaaaaaaaaaaaaaa"), 999, eof}
|
|
|
+ if n, err := sig.Read(rb); n != 10 || err != nil {
|
|
|
+ t.Errorf("Read returned unexpected values: (%v, %v)", n, err)
|
|
|
+ }
|
|
|
+ select {
|
|
|
+ case <-eof:
|
|
|
+ t.Error("unexpected EOF signal")
|
|
|
+ default:
|
|
|
+ }
|
|
|
+}
|