cache_test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package discover
  2. import (
  3. "reflect"
  4. "testing"
  5. "time"
  6. "github.com/syncthing/syncthing/lib/protocol"
  7. )
  8. func TestCacheUnique(t *testing.T) {
  9. direct := []string{"tcp://192.0.2.42:22000", "tcp://192.0.2.43:22000"}
  10. relays := []Relay{{URL: "relay://192.0.2.44:443"}, {URL: "tcp://192.0.2.45:443"}}
  11. c := NewCachingMux()
  12. c.ServeBackground()
  13. defer c.Stop()
  14. // Add a fake discovery service and verify we get it's answers through the
  15. // cache.
  16. f1 := &fakeDiscovery{direct, relays}
  17. c.Add(f1, time.Minute, 0)
  18. dir, rel, err := c.Lookup(protocol.LocalDeviceID)
  19. if err != nil {
  20. t.Fatal(err)
  21. }
  22. if !reflect.DeepEqual(dir, direct) {
  23. t.Errorf("Incorrect direct; %+v != %+v", dir, direct)
  24. }
  25. if !reflect.DeepEqual(rel, relays) {
  26. t.Errorf("Incorrect relays; %+v != %+v", rel, relays)
  27. }
  28. // Add one more that answers in the same way and check that we don't
  29. // duplicate or otherwise mess up the responses now.
  30. f2 := &fakeDiscovery{direct, relays}
  31. c.Add(f2, time.Minute, 0)
  32. dir, rel, err = c.Lookup(protocol.LocalDeviceID)
  33. if err != nil {
  34. t.Fatal(err)
  35. }
  36. if !reflect.DeepEqual(dir, direct) {
  37. t.Errorf("Incorrect direct; %+v != %+v", dir, direct)
  38. }
  39. if !reflect.DeepEqual(rel, relays) {
  40. t.Errorf("Incorrect relays; %+v != %+v", rel, relays)
  41. }
  42. }
  43. type fakeDiscovery struct {
  44. direct []string
  45. relays []Relay
  46. }
  47. func (f *fakeDiscovery) Lookup(deviceID protocol.DeviceID) (direct []string, relays []Relay, err error) {
  48. return f.direct, f.relays, nil
  49. }
  50. func (f *fakeDiscovery) Error() error {
  51. return nil
  52. }
  53. func (f *fakeDiscovery) String() string {
  54. return "fake"
  55. }
  56. func (f *fakeDiscovery) Cache() map[protocol.DeviceID]CacheEntry {
  57. return nil
  58. }