util_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. },
  25. },
  26. remote: protocol.ClusterConfigMessage{ClientName: "c", ClientVersion: "d"},
  27. err: `remote is missing repository "foo"`,
  28. },
  29. {
  30. local: protocol.ClusterConfigMessage{ClientName: "c", ClientVersion: "d"},
  31. remote: protocol.ClusterConfigMessage{
  32. Repositories: []protocol.Repository{
  33. {ID: "foo"},
  34. },
  35. },
  36. err: `remote has extra repository "foo"`,
  37. },
  38. {
  39. local: protocol.ClusterConfigMessage{
  40. Repositories: []protocol.Repository{
  41. {ID: "foo"},
  42. {ID: "bar"},
  43. },
  44. },
  45. remote: protocol.ClusterConfigMessage{
  46. Repositories: []protocol.Repository{
  47. {ID: "foo"},
  48. {ID: "bar"},
  49. },
  50. },
  51. err: "",
  52. },
  53. {
  54. local: protocol.ClusterConfigMessage{
  55. Repositories: []protocol.Repository{
  56. {ID: "quux"},
  57. {ID: "foo"},
  58. {ID: "bar"},
  59. },
  60. },
  61. remote: protocol.ClusterConfigMessage{
  62. Repositories: []protocol.Repository{
  63. {ID: "bar"},
  64. {ID: "quux"},
  65. },
  66. },
  67. err: `remote is missing repository "foo"`,
  68. },
  69. {
  70. local: protocol.ClusterConfigMessage{
  71. Repositories: []protocol.Repository{
  72. {ID: "quux"},
  73. {ID: "bar"},
  74. },
  75. },
  76. remote: protocol.ClusterConfigMessage{
  77. Repositories: []protocol.Repository{
  78. {ID: "bar"},
  79. {ID: "foo"},
  80. {ID: "quux"},
  81. },
  82. },
  83. err: `remote has extra repository "foo"`,
  84. },
  85. {
  86. local: protocol.ClusterConfigMessage{
  87. Repositories: []protocol.Repository{
  88. {
  89. ID: "foo",
  90. Nodes: []protocol.Node{
  91. {ID: "a"},
  92. },
  93. },
  94. {ID: "bar"},
  95. },
  96. },
  97. remote: protocol.ClusterConfigMessage{
  98. Repositories: []protocol.Repository{
  99. {ID: "foo"},
  100. {ID: "bar"},
  101. },
  102. },
  103. err: "",
  104. },
  105. {
  106. local: protocol.ClusterConfigMessage{
  107. Repositories: []protocol.Repository{
  108. {
  109. ID: "foo",
  110. Nodes: []protocol.Node{
  111. {ID: "a"},
  112. },
  113. },
  114. {ID: "bar"},
  115. },
  116. },
  117. remote: protocol.ClusterConfigMessage{
  118. Repositories: []protocol.Repository{
  119. {
  120. ID: "foo",
  121. Nodes: []protocol.Node{
  122. {ID: "a"},
  123. {ID: "b"},
  124. },
  125. },
  126. {ID: "bar"},
  127. },
  128. },
  129. err: "",
  130. },
  131. {
  132. local: protocol.ClusterConfigMessage{
  133. Repositories: []protocol.Repository{
  134. {
  135. ID: "foo",
  136. Nodes: []protocol.Node{
  137. {
  138. ID: "a",
  139. Flags: protocol.FlagShareReadOnly,
  140. },
  141. },
  142. },
  143. {ID: "bar"},
  144. },
  145. },
  146. remote: protocol.ClusterConfigMessage{
  147. Repositories: []protocol.Repository{
  148. {
  149. ID: "foo",
  150. Nodes: []protocol.Node{
  151. {
  152. ID: "a",
  153. Flags: protocol.FlagShareTrusted,
  154. },
  155. },
  156. },
  157. {ID: "bar"},
  158. },
  159. },
  160. err: `remote has different sharing flags for node "a" in repository "foo"`,
  161. },
  162. }
  163. func TestCompareClusterConfig(t *testing.T) {
  164. for i, tc := range testcases {
  165. err := compareClusterConfig(tc.local, tc.remote)
  166. switch {
  167. case tc.err == "" && err != nil:
  168. t.Errorf("#%d: unexpected error: %v", i, err)
  169. case tc.err != "" && err == nil:
  170. t.Errorf("#%d: unexpected nil error", i)
  171. case tc.err != "" && err != nil && tc.err != err.Error():
  172. t.Errorf("#%d: incorrect error: %q != %q", i, err, tc.err)
  173. }
  174. }
  175. }