mirror of https://github.com/docker/docs.git
143 lines
2.7 KiB
Go
143 lines
2.7 KiB
Go
package beam
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/dotcloud/docker/pkg/testutils"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestInmemRetPipe(t *testing.T) {
|
|
r, w := Pipe()
|
|
defer r.Close()
|
|
defer w.Close()
|
|
wait := make(chan struct{})
|
|
go func() {
|
|
ret, err := w.Send(&Message{Name: "hello", Ret: RetPipe})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
msg, err := ret.Receive(0)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if msg.Name != "this better not crash" {
|
|
t.Fatalf("%#v", msg)
|
|
}
|
|
close(wait)
|
|
}()
|
|
msg, err := r.Receive(Ret)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := msg.Ret.Send(&Message{Name: "this better not crash"}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
<-wait
|
|
}
|
|
|
|
func TestSimpleSend(t *testing.T) {
|
|
r, w := Pipe()
|
|
defer r.Close()
|
|
defer w.Close()
|
|
testutils.Timeout(t, func() {
|
|
go func() {
|
|
msg, err := r.Receive(0)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if msg.Name != "print" {
|
|
t.Fatalf("%#v", *msg)
|
|
}
|
|
if msg.Args[0] != "hello world" {
|
|
t.Fatalf("%#v", *msg)
|
|
}
|
|
}()
|
|
if _, err := w.Send(&Message{Name: "print", Args: []string{"hello world"}}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestSendReply(t *testing.T) {
|
|
r, w := Pipe()
|
|
defer r.Close()
|
|
defer w.Close()
|
|
testutils.Timeout(t, func() {
|
|
// Send
|
|
go func() {
|
|
ret, err := w.Send(&Message{Args: []string{"this is the request"}, Ret: RetPipe})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if ret == nil {
|
|
t.Fatalf("ret = nil\n")
|
|
}
|
|
// Read for a reply
|
|
msg, err := ret.Receive(0)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if msg.Args[0] != "this is the reply" {
|
|
t.Fatalf("%#v", msg)
|
|
}
|
|
}()
|
|
// Receive a message with mode=Ret
|
|
msg, err := r.Receive(Ret)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if msg.Args[0] != "this is the request" {
|
|
t.Fatalf("%#v", msg)
|
|
}
|
|
if msg.Ret == nil {
|
|
t.Fatalf("%#v", msg)
|
|
}
|
|
// Send a reply
|
|
_, err = msg.Ret.Send(&Message{Args: []string{"this is the reply"}})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestSendFile(t *testing.T) {
|
|
r, w := Pipe()
|
|
defer r.Close()
|
|
defer w.Close()
|
|
tmp, err := ioutil.TempFile("", "beam-test-")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(tmp.Name())
|
|
fmt.Fprintf(tmp, "hello world\n")
|
|
tmp.Sync()
|
|
tmp.Seek(0, 0)
|
|
testutils.Timeout(t, func() {
|
|
go func() {
|
|
_, err := w.Send(&Message{Name: "file", Args: []string{"path=" + tmp.Name()}, Att: tmp})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}()
|
|
msg, err := r.Receive(0)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if msg.Name != "file" {
|
|
t.Fatalf("%#v", msg)
|
|
}
|
|
if msg.Args[0] != "path="+tmp.Name() {
|
|
t.Fatalf("%#v", msg)
|
|
}
|
|
txt, err := ioutil.ReadAll(msg.Att)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if string(txt) != "hello world\n" {
|
|
t.Fatalf("%s\n", txt)
|
|
}
|
|
})
|
|
}
|