1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package beam
- import (
- "fmt"
- "io/ioutil"
- "testing"
- )
- func TestSocketPair(t *testing.T) {
- a, b, err := SocketPair()
- if err != nil {
- t.Fatal(err)
- }
- go func() {
- a.Write([]byte("hello world!"))
- fmt.Printf("done writing. closing\n")
- a.Close()
- fmt.Printf("done closing\n")
- }()
- data, err := ioutil.ReadAll(b)
- if err != nil {
- t.Fatal(err)
- }
- fmt.Printf("--> %s\n", data)
- fmt.Printf("still open: %v\n", a.Fd())
- }
- func TestSendUnixSocket(t *testing.T) {
- a1, a2, err := USocketPair()
- if err != nil {
- t.Fatal(err)
- }
- // defer a1.Close()
- // defer a2.Close()
- b1, b2, err := USocketPair()
- if err != nil {
- t.Fatal(err)
- }
- // defer b1.Close()
- // defer b2.Close()
- glueA, glueB, err := SocketPair()
- if err != nil {
- t.Fatal(err)
- }
- // defer glueA.Close()
- // defer glueB.Close()
- go func() {
- err := b2.Send([]byte("a"), glueB)
- if err != nil {
- t.Fatal(err)
- }
- }()
- go func() {
- err := a2.Send([]byte("b"), glueA)
- if err != nil {
- t.Fatal(err)
- }
- }()
- connAhdr, connA, err := a1.Receive()
- if err != nil {
- t.Fatal(err)
- }
- if string(connAhdr) != "b" {
- t.Fatalf("unexpected: %s", connAhdr)
- }
- connBhdr, connB, err := b1.Receive()
- if err != nil {
- t.Fatal(err)
- }
- if string(connBhdr) != "a" {
- t.Fatalf("unexpected: %s", connBhdr)
- }
- fmt.Printf("received both ends: %v <-> %v\n", connA.Fd(), connB.Fd())
- go func() {
- fmt.Printf("sending message on %v\n", connA.Fd())
- connA.Write([]byte("hello world"))
- connA.Sync()
- fmt.Printf("closing %v\n", connA.Fd())
- connA.Close()
- }()
- data, err := ioutil.ReadAll(connB)
- if err != nil {
- t.Fatal(err)
- }
- fmt.Printf("---> %s\n", data)
- }
|