basic_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package safesocket
  4. import (
  5. "fmt"
  6. "path/filepath"
  7. "runtime"
  8. "testing"
  9. )
  10. func TestBasics(t *testing.T) {
  11. // Make the socket in a temp dir rather than the cwd
  12. // so that the test can be run from a mounted filesystem (#2367).
  13. dir := t.TempDir()
  14. var sock string
  15. if runtime.GOOS != "windows" {
  16. sock = filepath.Join(dir, "test")
  17. } else {
  18. sock = fmt.Sprintf(`\\.\pipe\tailscale-test`)
  19. }
  20. l, err := Listen(sock)
  21. if err != nil {
  22. t.Fatal(err)
  23. }
  24. errs := make(chan error, 2)
  25. go func() {
  26. s, err := l.Accept()
  27. if err != nil {
  28. errs <- err
  29. return
  30. }
  31. l.Close()
  32. s.Write([]byte("hello"))
  33. b := make([]byte, 1024)
  34. n, err := s.Read(b)
  35. if err != nil {
  36. errs <- err
  37. return
  38. }
  39. t.Logf("server read %d bytes.", n)
  40. if string(b[:n]) != "world" {
  41. errs <- fmt.Errorf("got %#v, expected %#v\n", string(b[:n]), "world")
  42. return
  43. }
  44. s.Close()
  45. errs <- nil
  46. }()
  47. go func() {
  48. s := DefaultConnectionStrategy(sock)
  49. c, err := Connect(s)
  50. if err != nil {
  51. errs <- err
  52. return
  53. }
  54. c.Write([]byte("world"))
  55. b := make([]byte, 1024)
  56. n, err := c.Read(b)
  57. if err != nil {
  58. errs <- err
  59. return
  60. }
  61. if string(b[:n]) != "hello" {
  62. errs <- fmt.Errorf("got %#v, expected %#v\n", string(b[:n]), "hello")
  63. }
  64. c.Close()
  65. errs <- nil
  66. }()
  67. for i := 0; i < 2; i++ {
  68. if err := <-errs; err != nil {
  69. t.Fatal(err)
  70. }
  71. }
  72. }