util_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package model
  2. import (
  3. "testing"
  4. "github.com/calmh/syncthing/protocol"
  5. )
  6. var testcases = []struct {
  7. local, remote protocol.ClusterConfigMessage
  8. err string
  9. }{
  10. {
  11. local: protocol.ClusterConfigMessage{},
  12. remote: protocol.ClusterConfigMessage{},
  13. err: "",
  14. },
  15. {
  16. local: protocol.ClusterConfigMessage{ClientName: "a", ClientVersion: "b"},
  17. remote: protocol.ClusterConfigMessage{ClientName: "c", ClientVersion: "d"},
  18. err: "",
  19. },
  20. {
  21. local: protocol.ClusterConfigMessage{
  22. Repositories: []protocol.Repository{
  23. {ID: "foo"},
  24. {ID: "bar"},
  25. },
  26. },
  27. remote: protocol.ClusterConfigMessage{
  28. Repositories: []protocol.Repository{
  29. {ID: "foo"},
  30. {ID: "bar"},
  31. },
  32. },
  33. err: "",
  34. },
  35. {
  36. local: protocol.ClusterConfigMessage{
  37. Repositories: []protocol.Repository{
  38. {
  39. ID: "foo",
  40. Nodes: []protocol.Node{
  41. {ID: "a"},
  42. },
  43. },
  44. {ID: "bar"},
  45. },
  46. },
  47. remote: protocol.ClusterConfigMessage{
  48. Repositories: []protocol.Repository{
  49. {ID: "foo"},
  50. {ID: "bar"},
  51. },
  52. },
  53. err: "",
  54. },
  55. {
  56. local: protocol.ClusterConfigMessage{
  57. Repositories: []protocol.Repository{
  58. {
  59. ID: "foo",
  60. Nodes: []protocol.Node{
  61. {ID: "a"},
  62. },
  63. },
  64. {ID: "bar"},
  65. },
  66. },
  67. remote: protocol.ClusterConfigMessage{
  68. Repositories: []protocol.Repository{
  69. {
  70. ID: "foo",
  71. Nodes: []protocol.Node{
  72. {ID: "a"},
  73. {ID: "b"},
  74. },
  75. },
  76. {ID: "bar"},
  77. },
  78. },
  79. err: "",
  80. },
  81. {
  82. local: protocol.ClusterConfigMessage{
  83. Repositories: []protocol.Repository{
  84. {
  85. ID: "foo",
  86. Nodes: []protocol.Node{
  87. {
  88. ID: "a",
  89. Flags: protocol.FlagShareReadOnly,
  90. },
  91. },
  92. },
  93. {ID: "bar"},
  94. },
  95. },
  96. remote: protocol.ClusterConfigMessage{
  97. Repositories: []protocol.Repository{
  98. {
  99. ID: "foo",
  100. Nodes: []protocol.Node{
  101. {
  102. ID: "a",
  103. Flags: protocol.FlagShareTrusted,
  104. },
  105. },
  106. },
  107. {ID: "bar"},
  108. },
  109. },
  110. err: `remote has different sharing flags for node "a" in repository "foo"`,
  111. },
  112. }
  113. func TestCompareClusterConfig(t *testing.T) {
  114. for i, tc := range testcases {
  115. err := compareClusterConfig(tc.local, tc.remote)
  116. switch {
  117. case tc.err == "" && err != nil:
  118. t.Errorf("#%d: unexpected error: %v", i, err)
  119. case tc.err != "" && err == nil:
  120. t.Errorf("#%d: unexpected nil error", i)
  121. case tc.err != "" && err != nil && tc.err != err.Error():
  122. t.Errorf("#%d: incorrect error: %q != %q", i, err, tc.err)
  123. }
  124. }
  125. }