basic_test.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package safesocket
  5. import (
  6. "fmt"
  7. "testing"
  8. )
  9. func TestBasics(t *testing.T) {
  10. l, port, err := Listen("COOKIE", "Tailscale", "test", 0)
  11. if err != nil {
  12. t.Fatal(err)
  13. }
  14. errs := make(chan error, 2)
  15. go func() {
  16. s, err := l.Accept()
  17. if err != nil {
  18. errs <- err
  19. return
  20. }
  21. l.Close()
  22. s.Write([]byte("hello"))
  23. b := make([]byte, 1024)
  24. n, err := s.Read(b)
  25. if err != nil {
  26. errs <- err
  27. return
  28. }
  29. fmt.Printf("server read %d bytes.\n", n)
  30. if string(b[:n]) != "world" {
  31. errs <- fmt.Errorf("got %#v, expected %#v\n", string(b[:n]), "world")
  32. return
  33. }
  34. s.Close()
  35. errs <- nil
  36. }()
  37. go func() {
  38. c, err := Connect("COOKIE", "Tailscale", "test", port)
  39. if err != nil {
  40. errs <- err
  41. return
  42. }
  43. c.Write([]byte("world"))
  44. b := make([]byte, 1024)
  45. n, err := c.Read(b)
  46. if err != nil {
  47. errs <- err
  48. return
  49. }
  50. if string(b[:n]) != "hello" {
  51. errs <- fmt.Errorf("got %#v, expected %#v\n", string(b[:n]), "hello")
  52. }
  53. c.Close()
  54. errs <- nil
  55. }()
  56. for i := 0; i < 2; i++ {
  57. if err := <-errs; err != nil {
  58. t.Fatal(err)
  59. }
  60. }
  61. }