diff --git a/cmd/syncthing/config_test.go b/cmd/syncthing/config_test.go
new file mode 100644
index 000000000..801d3d498
--- /dev/null
+++ b/cmd/syncthing/config_test.go
@@ -0,0 +1,113 @@
+package main
+
+import (
+ "bytes"
+ "io"
+ "reflect"
+ "testing"
+)
+
+func TestDefaultValues(t *testing.T) {
+ expected := OptionsConfiguration{
+ ListenAddress: []string{":22000"},
+ ReadOnly: false,
+ AllowDelete: true,
+ FollowSymlinks: true,
+ GUIEnabled: true,
+ GUIAddress: "127.0.0.1:8080",
+ GlobalAnnServer: "announce.syncthing.net:22025",
+ GlobalAnnEnabled: true,
+ LocalAnnEnabled: true,
+ ParallelRequests: 16,
+ MaxSendKbps: 0,
+ RescanIntervalS: 60,
+ ReconnectIntervalS: 60,
+ MaxChangeKbps: 1000,
+ }
+
+ cfg, err := readConfigXML(bytes.NewReader(nil))
+ if err != io.EOF {
+ t.Error(err)
+ }
+
+ if !reflect.DeepEqual(cfg.Options, expected) {
+ t.Errorf("Default config differs;\n E: %#v\n A: %#v", expected, cfg.Options)
+ }
+}
+
+func TestNoListenAddress(t *testing.T) {
+ data := []byte(`
+
+
+ dynamic
+
+
+
+
+
+
+`)
+
+ cfg, err := readConfigXML(bytes.NewReader(data))
+ if err != nil {
+ t.Error(err)
+ }
+
+ expected := []string{""}
+ if !reflect.DeepEqual(cfg.Options.ListenAddress, expected) {
+ t.Errorf("Unexpected ListenAddress %#v", cfg.Options.ListenAddress)
+ }
+}
+
+func TestOverriddenValues(t *testing.T) {
+ data := []byte(`
+
+
+ dynamic
+
+
+
+ :23000
+ true
+ false
+ false
+ false
+ 125.2.2.2:8080
+ syncthing.nym.se:22025
+ false
+ false
+ 32
+ 1234
+ 600
+ 6000
+ 2345
+
+
+`)
+
+ expected := OptionsConfiguration{
+ ListenAddress: []string{":23000"},
+ ReadOnly: true,
+ AllowDelete: false,
+ FollowSymlinks: false,
+ GUIEnabled: false,
+ GUIAddress: "125.2.2.2:8080",
+ GlobalAnnServer: "announce.nym.se:22025",
+ GlobalAnnEnabled: false,
+ LocalAnnEnabled: false,
+ ParallelRequests: 32,
+ MaxSendKbps: 1234,
+ RescanIntervalS: 600,
+ ReconnectIntervalS: 6000,
+ MaxChangeKbps: 2345,
+ }
+
+ cfg, err := readConfigXML(bytes.NewReader(data))
+ if err != nil {
+ t.Error(err)
+ }
+
+ if !reflect.DeepEqual(cfg.Options, expected) {
+ t.Errorf("Overridden config differs;\n E: %#v\n A: %#v", expected, cfg.Options)
+ }
+}