mirror of https://github.com/docker/docs.git
160 lines
4.4 KiB
Go
160 lines
4.4 KiB
Go
package http2
|
|
|
|
import (
|
|
//"bytes"
|
|
"github.com/docker/libswarm/beam"
|
|
//"github.com/docker/spdystream"
|
|
"io"
|
|
"net"
|
|
"testing"
|
|
)
|
|
|
|
func TestBeamSession(t *testing.T) {
|
|
end := make(chan bool)
|
|
listen := "localhost:7543"
|
|
server, serverErr := runServer(listen, t, end)
|
|
if serverErr != nil {
|
|
t.Fatalf("Error initializing server: %s", serverErr)
|
|
}
|
|
|
|
conn, connErr := net.Dial("tcp", listen)
|
|
if connErr != nil {
|
|
t.Fatalf("Error dialing server: %s", connErr)
|
|
}
|
|
|
|
sender, senderErr := NewStreamSession(conn)
|
|
if senderErr != nil {
|
|
t.Fatalf("Error creating sender: %s", senderErr)
|
|
}
|
|
|
|
// Ls interaction
|
|
receiver, sendErr := sender.Send(&beam.Message{Verb: beam.Ls, Ret: beam.RetPipe})
|
|
if sendErr != nil {
|
|
t.Fatalf("Error sending beam message: %s", sendErr)
|
|
}
|
|
message, receiveErr := receiver.Receive(0)
|
|
if receiveErr != nil {
|
|
t.Fatalf("Error receiving beam message: %s", receiveErr)
|
|
}
|
|
if message.Verb != beam.Set {
|
|
t.Errorf("Unexpected message name:\nActual: %s\nExpected: %s", message.Verb, beam.Ls.String())
|
|
}
|
|
if len(message.Args) != 3 {
|
|
t.Fatalf("Unexpected args length\nActual: %d\nExpected: %d", len(message.Args), 3)
|
|
}
|
|
if message.Args[0] != "file1" {
|
|
t.Errorf("Unexpected arg[0]\nActual: %s\nExpected: %s", message.Args[0], "file1")
|
|
}
|
|
if message.Args[1] != "file2" {
|
|
t.Errorf("Unexpected arg[0]\nActual: %s\nExpected: %s", message.Args[1], "file2")
|
|
}
|
|
if message.Args[2] != string([]byte{0x00, 0x00, 0x00}) {
|
|
t.Errorf("Unexpected arg[0]\nActual: %s\nExpected: %s", message.Args[2], []byte{0x00, 0x00, 0x00})
|
|
}
|
|
|
|
// Attach interactions
|
|
receiver, sendErr = sender.Send(&beam.Message{Verb: beam.Attach, Ret: beam.RetPipe})
|
|
if sendErr != nil {
|
|
t.Fatalf("Error sending beam message: %s", sendErr)
|
|
}
|
|
message, receiveErr = receiver.Receive(beam.Ret)
|
|
if receiveErr != nil {
|
|
t.Fatalf("Error receiving beam message: %s", receiveErr)
|
|
}
|
|
if message.Verb != beam.Ack {
|
|
t.Errorf("Unexpected message name:\nActual: %s\nExpected: %s", message.Verb, beam.Ack.String())
|
|
}
|
|
|
|
// TODO full connect interaction
|
|
//if message.Att == nil {
|
|
// t.Fatalf("Missing attachment on message")
|
|
//}
|
|
|
|
//testBytes := []byte("Hello")
|
|
//n, writeErr := message.Att.Write(testBytes)
|
|
//if writeErr != nil {
|
|
// t.Fatalf("Error writing bytes: %s", writeErr)
|
|
//}
|
|
//if n != 5 {
|
|
// t.Fatalf("Unexpected number of bytes read:\nActual: %d\nExpected: 5", n)
|
|
//}
|
|
|
|
//buf := make([]byte, 10)
|
|
//n, readErr := message.Att.Read(buf)
|
|
//if readErr != nil {
|
|
// t.Fatalf("Error writing bytes: %s", readErr)
|
|
//}
|
|
//if n != 5 {
|
|
// t.Fatalf("Unexpected number of bytes read:\nActual: %d\nExpected: 5", n)
|
|
//}
|
|
//if bytes.Compare(buf[:n], testBytes) != 0 {
|
|
// t.Fatalf("Did not receive expected message:\nActual: %s\nExpectd: %s", buf, testBytes)
|
|
//}
|
|
|
|
closeErr := server.Close()
|
|
if closeErr != nil {
|
|
t.Fatalf("Error closing server: %s", closeErr)
|
|
}
|
|
|
|
closeErr = sender.Close()
|
|
if closeErr != nil {
|
|
t.Fatalf("Error closing sender: %s", closeErr)
|
|
}
|
|
<-end
|
|
}
|
|
|
|
func runServer(listen string, t *testing.T, endChan chan bool) (io.Closer, error) {
|
|
listener, lErr := net.Listen("tcp", listen)
|
|
if lErr != nil {
|
|
return nil, lErr
|
|
}
|
|
|
|
session, sessionErr := NewListenSession(listener, NoAuthenticator)
|
|
if sessionErr != nil {
|
|
t.Fatalf("Error creating session: %s", sessionErr)
|
|
}
|
|
|
|
go session.Serve()
|
|
|
|
go func() {
|
|
defer close(endChan)
|
|
// Ls exchange
|
|
message, receiveErr := session.Receive(beam.Ret)
|
|
if receiveErr != nil {
|
|
t.Fatalf("Error receiving on server: %s", receiveErr)
|
|
}
|
|
if message.Verb != beam.Ls {
|
|
t.Fatalf("Unexpected verb: %s", message.Verb)
|
|
}
|
|
receiver, sendErr := message.Ret.Send(&beam.Message{Verb: beam.Set, Args: []string{"file1", "file2", string([]byte{0x00, 0x00, 0x00})}})
|
|
if sendErr != nil {
|
|
t.Fatalf("Error sending set message: %s", sendErr)
|
|
}
|
|
_, receiveErr = receiver.Receive(0)
|
|
if receiveErr == nil {
|
|
t.Fatalf("No error received from empty receiver")
|
|
}
|
|
if receiveErr != io.EOF {
|
|
t.Fatalf("Expected error from empty receiver: %s", receiveErr)
|
|
}
|
|
|
|
// Connect exchange
|
|
message, receiveErr = session.Receive(beam.Ret)
|
|
if receiveErr != nil {
|
|
t.Fatalf("Error receiving on server: %s", receiveErr)
|
|
}
|
|
if message.Verb != beam.Attach {
|
|
t.Fatalf("Unexpected verb: %s", message.Verb)
|
|
}
|
|
receiver, sendErr = message.Ret.Send(&beam.Message{Verb: beam.Ack})
|
|
if sendErr != nil {
|
|
t.Fatalf("Error sending set message: %s", sendErr)
|
|
}
|
|
|
|
// TODO full connect interaction
|
|
|
|
}()
|
|
|
|
return listener, nil
|
|
}
|