mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge branch 'pr-5353'
This commit is contained in:
commit
0c5375146a
1 changed files with 151 additions and 0 deletions
|
@ -25,6 +25,30 @@ func TestSocketPair(t *testing.T) {
|
||||||
fmt.Printf("still open: %v\n", a.Fd())
|
fmt.Printf("still open: %v\n", a.Fd())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUSocketPair(t *testing.T) {
|
||||||
|
a, b, err := USocketPair()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
data := "hello world!"
|
||||||
|
go func() {
|
||||||
|
a.Write([]byte(data))
|
||||||
|
a.Close()
|
||||||
|
}()
|
||||||
|
res := make([]byte, 1024)
|
||||||
|
size, err := b.Read(res)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if size != len(data) {
|
||||||
|
t.Fatal("Unexpected size")
|
||||||
|
}
|
||||||
|
if string(res[0:size]) != data {
|
||||||
|
t.Fatal("Unexpected data")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSendUnixSocket(t *testing.T) {
|
func TestSendUnixSocket(t *testing.T) {
|
||||||
a1, a2, err := USocketPair()
|
a1, a2, err := USocketPair()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -83,4 +107,131 @@ func TestSendUnixSocket(t *testing.T) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
fmt.Printf("---> %s\n", data)
|
fmt.Printf("---> %s\n", data)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure we get proper segmenting of messages
|
||||||
|
func TestSendSegmenting(t *testing.T) {
|
||||||
|
a, b, err := USocketPair()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer a.Close()
|
||||||
|
defer b.Close()
|
||||||
|
|
||||||
|
extrafd1, extrafd2, err := SocketPair()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
extrafd2.Close()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
a.Send([]byte("message 1"), nil)
|
||||||
|
a.Send([]byte("message 2"), extrafd1)
|
||||||
|
a.Send([]byte("message 3"), nil)
|
||||||
|
}()
|
||||||
|
|
||||||
|
msg1, file1, err := b.Receive()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if string(msg1) != "message 1" {
|
||||||
|
t.Fatal("unexpected msg1:", string(msg1))
|
||||||
|
}
|
||||||
|
if file1 != nil {
|
||||||
|
t.Fatal("unexpectedly got file1")
|
||||||
|
}
|
||||||
|
|
||||||
|
msg2, file2, err := b.Receive()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if string(msg2) != "message 2" {
|
||||||
|
t.Fatal("unexpected msg2:", string(msg2))
|
||||||
|
}
|
||||||
|
if file2 == nil {
|
||||||
|
t.Fatal("didn't get file2")
|
||||||
|
}
|
||||||
|
file2.Close()
|
||||||
|
|
||||||
|
msg3, file3, err := b.Receive()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if string(msg3) != "message 3" {
|
||||||
|
t.Fatal("unexpected msg3:", string(msg3))
|
||||||
|
}
|
||||||
|
if file3 != nil {
|
||||||
|
t.Fatal("unexpectedly got file3")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test sending a zero byte message
|
||||||
|
func TestSendEmpty(t *testing.T) {
|
||||||
|
a, b, err := USocketPair()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer a.Close()
|
||||||
|
defer b.Close()
|
||||||
|
go func() {
|
||||||
|
a.Send([]byte{}, nil)
|
||||||
|
}()
|
||||||
|
|
||||||
|
msg, file, err := b.Receive()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if len(msg) != 0 {
|
||||||
|
t.Fatalf("unexpected non-empty message: %v", msg)
|
||||||
|
}
|
||||||
|
if file != nil {
|
||||||
|
t.Fatal("unexpectedly got file")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func makeLarge(size int) []byte {
|
||||||
|
res := make([]byte, size)
|
||||||
|
for i := range res {
|
||||||
|
res[i] = byte(i % 255)
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func verifyLarge(data []byte, size int) bool {
|
||||||
|
if len(data) != size {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i := range data {
|
||||||
|
if data[i] != byte(i%255) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test sending a large message
|
||||||
|
func TestSendLarge(t *testing.T) {
|
||||||
|
a, b, err := USocketPair()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer a.Close()
|
||||||
|
defer b.Close()
|
||||||
|
go func() {
|
||||||
|
a.Send(makeLarge(100000), nil)
|
||||||
|
}()
|
||||||
|
|
||||||
|
msg, file, err := b.Receive()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !verifyLarge(msg, 100000) {
|
||||||
|
t.Fatalf("unexpected message (size %d)", len(msg))
|
||||||
|
}
|
||||||
|
if file != nil {
|
||||||
|
t.Fatal("unexpectedly got file")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue