diff --git a/beam/message_test.go b/beam/message_test.go new file mode 100644 index 0000000000..8987cb199e --- /dev/null +++ b/beam/message_test.go @@ -0,0 +1,139 @@ +package beam + +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)) + } +}