Mult Port + TCP Calibration (SSH DEAD)
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"net"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
type carrierTestConn struct {
|
||||
mu sync.Mutex
|
||||
writes int
|
||||
buf bytes.Buffer
|
||||
closed bool
|
||||
}
|
||||
|
||||
func (c *carrierTestConn) Read([]byte) (int, error) { return 0, io.EOF }
|
||||
func (c *carrierTestConn) Write(p []byte) (int, error) {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
if c.closed {
|
||||
return 0, net.ErrClosed
|
||||
}
|
||||
c.writes++
|
||||
return c.buf.Write(p)
|
||||
}
|
||||
func (c *carrierTestConn) Close() error { c.mu.Lock(); c.closed = true; c.mu.Unlock(); return nil }
|
||||
func (c *carrierTestConn) LocalAddr() net.Addr { return dummyAddr("local") }
|
||||
func (c *carrierTestConn) RemoteAddr() net.Addr { return dummyAddr("remote") }
|
||||
func (c *carrierTestConn) SetDeadline(time.Time) error { return nil }
|
||||
func (c *carrierTestConn) SetReadDeadline(time.Time) error { return nil }
|
||||
func (c *carrierTestConn) SetWriteDeadline(time.Time) error { return nil }
|
||||
|
||||
func TestSSHCarrierCombinesPacketWrites(t *testing.T) {
|
||||
raw := &carrierTestConn{}
|
||||
conn := newSSHCarrierConn(raw, 128*1024, 512*1024, 5*time.Millisecond)
|
||||
want := make([]byte, 0, 128*1024)
|
||||
for i := 0; i < 4; i++ {
|
||||
part := bytes.Repeat([]byte{byte(i + 1)}, 32*1024)
|
||||
want = append(want, part...)
|
||||
if n, err := conn.Write(part); err != nil || n != len(part) {
|
||||
t.Fatalf("Write %d = %d, %v", i, n, err)
|
||||
}
|
||||
}
|
||||
if err := conn.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
raw.mu.Lock()
|
||||
got := append([]byte(nil), raw.buf.Bytes()...)
|
||||
writes := raw.writes
|
||||
raw.mu.Unlock()
|
||||
if !bytes.Equal(got, want) {
|
||||
t.Fatal("carrier changed byte order/content")
|
||||
}
|
||||
if writes >= 4 {
|
||||
t.Fatalf("expected packet writes to be combined, raw writes=%d", writes)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user