server_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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 ipnserver_test
  5. import (
  6. "context"
  7. "fmt"
  8. "path/filepath"
  9. "strings"
  10. "testing"
  11. "tailscale.com/ipn"
  12. "tailscale.com/ipn/ipnserver"
  13. "tailscale.com/net/tsdial"
  14. "tailscale.com/safesocket"
  15. "tailscale.com/wgengine"
  16. )
  17. func TestRunMultipleAccepts(t *testing.T) {
  18. t.Skipf("TODO(bradfitz): finish this test, once other fires are out")
  19. ctx, cancel := context.WithCancel(context.Background())
  20. defer cancel()
  21. td := t.TempDir()
  22. socketPath := filepath.Join(td, "tailscale.sock")
  23. logf := func(format string, args ...interface{}) {
  24. format = strings.TrimRight(format, "\n")
  25. println(fmt.Sprintf(format, args...))
  26. t.Logf(format, args...)
  27. }
  28. s := safesocket.DefaultConnectionStrategy(socketPath)
  29. connect := func() {
  30. for i := 1; i <= 2; i++ {
  31. logf("connect %d ...", i)
  32. c, err := safesocket.Connect(s)
  33. if err != nil {
  34. t.Fatalf("safesocket.Connect: %v\n", err)
  35. }
  36. clientToServer := func(b []byte) {
  37. ipn.WriteMsg(c, b)
  38. }
  39. bc := ipn.NewBackendClient(logf, clientToServer)
  40. prefs := ipn.NewPrefs()
  41. bc.SetPrefs(prefs)
  42. c.Close()
  43. }
  44. }
  45. logTriggerTestf := func(format string, args ...interface{}) {
  46. logf(format, args...)
  47. if strings.HasPrefix(format, "Listening on ") {
  48. connect()
  49. }
  50. }
  51. eng, err := wgengine.NewFakeUserspaceEngine(logf, 0)
  52. if err != nil {
  53. t.Fatal(err)
  54. }
  55. t.Cleanup(eng.Close)
  56. opts := ipnserver.Options{}
  57. t.Logf("pre-Run")
  58. store := new(ipn.MemoryStore)
  59. ln, _, err := safesocket.Listen(socketPath, 0)
  60. if err != nil {
  61. t.Fatal(err)
  62. }
  63. defer ln.Close()
  64. err = ipnserver.Run(ctx, logTriggerTestf, ln, store, nil /* mon */, new(tsdial.Dialer), "dummy_logid", ipnserver.FixedEngine(eng), opts)
  65. t.Logf("ipnserver.Run = %v", err)
  66. }