config_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. package config
  2. import (
  3. "bytes"
  4. "io"
  5. "os"
  6. "reflect"
  7. "testing"
  8. )
  9. func TestDefaultValues(t *testing.T) {
  10. expected := OptionsConfiguration{
  11. ListenAddress: []string{"0.0.0.0:22000"},
  12. GlobalAnnServer: "announce.syncthing.net:22025",
  13. GlobalAnnEnabled: true,
  14. LocalAnnEnabled: true,
  15. ParallelRequests: 16,
  16. MaxSendKbps: 0,
  17. RescanIntervalS: 60,
  18. ReconnectIntervalS: 60,
  19. MaxChangeKbps: 1000,
  20. StartBrowser: true,
  21. UPnPEnabled: true,
  22. }
  23. cfg, err := Load(bytes.NewReader(nil), "nodeID")
  24. if err != io.EOF {
  25. t.Error(err)
  26. }
  27. if !reflect.DeepEqual(cfg.Options, expected) {
  28. t.Errorf("Default config differs;\n E: %#v\n A: %#v", expected, cfg.Options)
  29. }
  30. }
  31. func TestNodeConfig(t *testing.T) {
  32. v1data := []byte(`
  33. <configuration version="1">
  34. <repository id="test" directory="~/Sync">
  35. <node id="node1" name="node one">
  36. <address>a</address>
  37. </node>
  38. <node id="node2" name="node two">
  39. <address>b</address>
  40. </node>
  41. </repository>
  42. <options>
  43. <readOnly>true</readOnly>
  44. </options>
  45. </configuration>
  46. `)
  47. v2data := []byte(`
  48. <configuration version="2">
  49. <repository id="test" directory="~/Sync" ro="true">
  50. <node id="node1"/>
  51. <node id="node2"/>
  52. </repository>
  53. <node id="node1" name="node one">
  54. <address>a</address>
  55. </node>
  56. <node id="node2" name="node two">
  57. <address>b</address>
  58. </node>
  59. </configuration>
  60. `)
  61. for i, data := range [][]byte{v1data, v2data} {
  62. cfg, err := Load(bytes.NewReader(data), "node1")
  63. if err != nil {
  64. t.Error(err)
  65. }
  66. expectedRepos := []RepositoryConfiguration{
  67. {
  68. ID: "test",
  69. Directory: "~/Sync",
  70. Nodes: []NodeConfiguration{{NodeID: "node1"}, {NodeID: "node2"}},
  71. ReadOnly: true,
  72. },
  73. }
  74. expectedNodes := []NodeConfiguration{
  75. {
  76. NodeID: "node1",
  77. Name: "node one",
  78. Addresses: []string{"a"},
  79. },
  80. {
  81. NodeID: "node2",
  82. Name: "node two",
  83. Addresses: []string{"b"},
  84. },
  85. }
  86. expectedNodeIDs := []string{"node1", "node2"}
  87. if cfg.Version != 2 {
  88. t.Errorf("%d: Incorrect version %d != 2", i, cfg.Version)
  89. }
  90. if !reflect.DeepEqual(cfg.Repositories, expectedRepos) {
  91. t.Errorf("%d: Incorrect Repositories\n A: %#v\n E: %#v", i, cfg.Repositories, expectedRepos)
  92. }
  93. if !reflect.DeepEqual(cfg.Nodes, expectedNodes) {
  94. t.Errorf("%d: Incorrect Nodes\n A: %#v\n E: %#v", i, cfg.Nodes, expectedNodes)
  95. }
  96. if !reflect.DeepEqual(cfg.Repositories[0].NodeIDs(), expectedNodeIDs) {
  97. t.Errorf("%d: Incorrect NodeIDs\n A: %#v\n E: %#v", i, cfg.Repositories[0].NodeIDs(), expectedNodeIDs)
  98. }
  99. }
  100. }
  101. func TestNoListenAddress(t *testing.T) {
  102. data := []byte(`<configuration version="1">
  103. <repository directory="~/Sync">
  104. <node id="..." name="...">
  105. <address>dynamic</address>
  106. </node>
  107. </repository>
  108. <options>
  109. <listenAddress></listenAddress>
  110. </options>
  111. </configuration>
  112. `)
  113. cfg, err := Load(bytes.NewReader(data), "nodeID")
  114. if err != nil {
  115. t.Error(err)
  116. }
  117. expected := []string{""}
  118. if !reflect.DeepEqual(cfg.Options.ListenAddress, expected) {
  119. t.Errorf("Unexpected ListenAddress %#v", cfg.Options.ListenAddress)
  120. }
  121. }
  122. func TestOverriddenValues(t *testing.T) {
  123. data := []byte(`<configuration version="2">
  124. <repository directory="~/Sync">
  125. <node id="..." name="...">
  126. <address>dynamic</address>
  127. </node>
  128. </repository>
  129. <options>
  130. <listenAddress>:23000</listenAddress>
  131. <allowDelete>false</allowDelete>
  132. <globalAnnounceServer>syncthing.nym.se:22025</globalAnnounceServer>
  133. <globalAnnounceEnabled>false</globalAnnounceEnabled>
  134. <localAnnounceEnabled>false</localAnnounceEnabled>
  135. <parallelRequests>32</parallelRequests>
  136. <maxSendKbps>1234</maxSendKbps>
  137. <rescanIntervalS>600</rescanIntervalS>
  138. <reconnectionIntervalS>6000</reconnectionIntervalS>
  139. <maxChangeKbps>2345</maxChangeKbps>
  140. <startBrowser>false</startBrowser>
  141. <upnpEnabled>false</upnpEnabled>
  142. </options>
  143. </configuration>
  144. `)
  145. expected := OptionsConfiguration{
  146. ListenAddress: []string{":23000"},
  147. GlobalAnnServer: "syncthing.nym.se:22025",
  148. GlobalAnnEnabled: false,
  149. LocalAnnEnabled: false,
  150. ParallelRequests: 32,
  151. MaxSendKbps: 1234,
  152. RescanIntervalS: 600,
  153. ReconnectIntervalS: 6000,
  154. MaxChangeKbps: 2345,
  155. StartBrowser: false,
  156. UPnPEnabled: false,
  157. }
  158. cfg, err := Load(bytes.NewReader(data), "nodeID")
  159. if err != nil {
  160. t.Error(err)
  161. }
  162. if !reflect.DeepEqual(cfg.Options, expected) {
  163. t.Errorf("Overridden config differs;\n E: %#v\n A: %#v", expected, cfg.Options)
  164. }
  165. }
  166. func TestNodeAddresses(t *testing.T) {
  167. data := []byte(`
  168. <configuration version="2">
  169. <node id="n1">
  170. <address>dynamic</address>
  171. </node>
  172. <node id="n2">
  173. <address></address>
  174. </node>
  175. <node id="n3">
  176. </node>
  177. </configuration>
  178. `)
  179. name, _ := os.Hostname()
  180. expected := []NodeConfiguration{
  181. {
  182. NodeID: "n1",
  183. Addresses: []string{"dynamic"},
  184. },
  185. {
  186. NodeID: "n2",
  187. Addresses: []string{"dynamic"},
  188. },
  189. {
  190. NodeID: "n3",
  191. Addresses: []string{"dynamic"},
  192. },
  193. {
  194. NodeID: "n4",
  195. Name: name, // Set when auto created
  196. Addresses: []string{"dynamic"},
  197. },
  198. }
  199. cfg, err := Load(bytes.NewReader(data), "n4")
  200. if err != nil {
  201. t.Error(err)
  202. }
  203. if !reflect.DeepEqual(cfg.Nodes, expected) {
  204. t.Errorf("Nodes differ;\n E: %#v\n A: %#v", expected, cfg.Nodes)
  205. }
  206. }