unix_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package beam
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "testing"
  6. )
  7. func TestSocketPair(t *testing.T) {
  8. a, b, err := SocketPair()
  9. if err != nil {
  10. t.Fatal(err)
  11. }
  12. go func() {
  13. a.Write([]byte("hello world!"))
  14. fmt.Printf("done writing. closing\n")
  15. a.Close()
  16. fmt.Printf("done closing\n")
  17. }()
  18. data, err := ioutil.ReadAll(b)
  19. if err != nil {
  20. t.Fatal(err)
  21. }
  22. fmt.Printf("--> %s\n", data)
  23. fmt.Printf("still open: %v\n", a.Fd())
  24. }
  25. func TestSendUnixSocket(t *testing.T) {
  26. a1, a2, err := USocketPair()
  27. if err != nil {
  28. t.Fatal(err)
  29. }
  30. // defer a1.Close()
  31. // defer a2.Close()
  32. b1, b2, err := USocketPair()
  33. if err != nil {
  34. t.Fatal(err)
  35. }
  36. // defer b1.Close()
  37. // defer b2.Close()
  38. glueA, glueB, err := SocketPair()
  39. if err != nil {
  40. t.Fatal(err)
  41. }
  42. // defer glueA.Close()
  43. // defer glueB.Close()
  44. go func() {
  45. err := b2.Send([]byte("a"), glueB)
  46. if err != nil {
  47. t.Fatal(err)
  48. }
  49. }()
  50. go func() {
  51. err := a2.Send([]byte("b"), glueA)
  52. if err != nil {
  53. t.Fatal(err)
  54. }
  55. }()
  56. connAhdr, connA, err := a1.Receive()
  57. if err != nil {
  58. t.Fatal(err)
  59. }
  60. if string(connAhdr) != "b" {
  61. t.Fatalf("unexpected: %s", connAhdr)
  62. }
  63. connBhdr, connB, err := b1.Receive()
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. if string(connBhdr) != "a" {
  68. t.Fatalf("unexpected: %s", connBhdr)
  69. }
  70. fmt.Printf("received both ends: %v <-> %v\n", connA.Fd(), connB.Fd())
  71. go func() {
  72. fmt.Printf("sending message on %v\n", connA.Fd())
  73. connA.Write([]byte("hello world"))
  74. connA.Sync()
  75. fmt.Printf("closing %v\n", connA.Fd())
  76. connA.Close()
  77. }()
  78. data, err := ioutil.ReadAll(connB)
  79. if err != nil {
  80. t.Fatal(err)
  81. }
  82. fmt.Printf("---> %s\n", data)
  83. }