docs/message_test.go

140 lines
2.7 KiB
Go

package libswarm
import (
"io/ioutil"
"reflect"
"testing"
)
func TestVerbArgs(t *testing.T) {
receiver, sender := Pipe()
sentMsg := &Message{Verb: Set, Args: []string{"foo", "bar"}}
go sender.Send(sentMsg)
receivedMsg, err := receiver.Receive(0)
if err != nil {
t.Fatal(err)
}
if receivedMsg == nil {
t.Fatalf("Didn't get a message")
}
if receivedMsg.Verb != sentMsg.Verb {
t.Fatalf("Expected %s, got %s", sentMsg.Verb.String(), receivedMsg.Verb.String())
}
if !reflect.DeepEqual(receivedMsg.Args, sentMsg.Args) {
t.Fatalf("Expected %#v, got %#v", sentMsg.Args, receivedMsg.Args)
}
}
func TestReturnChannel(t *testing.T) {
receiver, sender := Pipe()
replyReceiver, replySender := Pipe()
go func() {
receivedMsg, err := receiver.Receive(0)
if err != nil {
t.Fatal(err)
}
if receivedMsg == nil {
t.Fatalf("Didn't get a message")
}
receivedMsg.Ret.Send(&Message{Verb: Set})
}()
_, err := sender.Send(&Message{Verb: Get, Ret: replySender})
if err != nil {
t.Fatal(err)
}
reply, err := replyReceiver.Receive(0)
if err != nil {
t.Fatal(err)
}
if reply == nil {
t.Fatalf("Didn't get a reply")
}
if reply.Verb != Set {
t.Fatalf("Expected Set, got %s", reply.Verb.String())
}
}
func TestRetPipe(t *testing.T) {
receiver, sender := Pipe()
go func() {
receivedMsg, err := receiver.Receive(0)
if err != nil {
t.Fatal(err)
}
if receivedMsg == nil {
t.Fatalf("Didn't get a message")
}
receivedMsg.Ret.Send(&Message{Verb: Set})
}()
replyReceiver, err := sender.Send(&Message{Verb: Get, Ret: RetPipe})
if err != nil {
t.Fatal(err)
}
reply, err := replyReceiver.Receive(0)
if err != nil {
t.Fatal(err)
}
if reply == nil {
t.Fatalf("Didn't get a reply")
}
if reply.Verb != Set {
t.Fatalf("Expected Set, got %s", reply.Verb.String())
}
}
func TestAttachment(t *testing.T) {
expectedContents := "hello world\n"
f, err := ioutil.TempFile("/tmp", "libswarm-beam-TestAttachment-")
if err != nil {
t.Fatal(err)
}
defer f.Close()
if err = ioutil.WriteFile(f.Name(), []byte(expectedContents), 0700); err != nil {
t.Fatal(err)
}
if err = f.Sync(); err != nil {
t.Fatal(err)
}
receiver, sender := Pipe()
go func() {
msg, err := receiver.Receive(0)
if err != nil {
t.Fatal(err)
}
msg.Ret.Send(&Message{Verb: Connect, Att: f})
}()
ret, err := sender.Send(&Message{Verb: Connect, Ret: RetPipe})
if err != nil {
t.Fatal(err)
}
reply, err := ret.Receive(0)
if err != nil {
t.Fatal(err)
}
if reply.Att == nil {
t.Fatalf("Didn't get an attachment back")
}
contents, err := ioutil.ReadAll(reply.Att)
if err != nil {
t.Fatal(err)
}
if string(contents) != expectedContents {
t.Fatalf("Expected %#v, got %#v", expectedContents, string(contents))
}
}