syncthing/config/config_test.go

284 lines
6.9 KiB
Go
Raw Normal View History

2014-06-01 22:50:14 +02:00
// Copyright (C) 2014 Jakob Borg and other contributors. All rights reserved.
// Use of this source code is governed by an MIT-style license that can be
// found in the LICENSE file.
2014-05-15 02:18:09 +02:00
package config
2014-03-04 22:17:28 +01:00
import (
"bytes"
"io"
2014-04-22 12:06:32 +02:00
"os"
2014-03-04 22:17:28 +01:00
"reflect"
"testing"
)
func TestDefaultValues(t *testing.T) {
expected := OptionsConfiguration{
2014-05-14 17:43:49 +02:00
ListenAddress: []string{"0.0.0.0:22000"},
2014-03-04 22:17:28 +01:00
GlobalAnnServer: "announce.syncthing.net:22025",
GlobalAnnEnabled: true,
LocalAnnEnabled: true,
LocalAnnPort: 21025,
2014-03-04 22:17:28 +01:00
ParallelRequests: 16,
MaxSendKbps: 0,
RescanIntervalS: 60,
ReconnectIntervalS: 60,
2014-05-15 05:47:11 +02:00
MaxChangeKbps: 10000,
StartBrowser: true,
2014-04-18 13:39:51 +02:00
UPnPEnabled: true,
2014-03-04 22:17:28 +01:00
}
2014-05-15 02:18:09 +02:00
cfg, err := Load(bytes.NewReader(nil), "nodeID")
2014-03-04 22:17:28 +01:00
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 TestNodeConfig(t *testing.T) {
v1data := []byte(`
<configuration version="1">
<repository id="test" directory="~/Sync">
<node id="NODE1" name="node one">
<address>a</address>
</node>
<node id="NODE2" name="node two">
<address>b</address>
</node>
</repository>
<options>
<readOnly>true</readOnly>
</options>
</configuration>
`)
v2data := []byte(`
<configuration version="2">
<repository id="test" directory="~/Sync" ro="true">
<node id="NODE1"/>
<node id="NODE2"/>
</repository>
<node id="NODE1" name="node one">
<address>a</address>
</node>
<node id="NODE2" name="node two">
<address>b</address>
</node>
</configuration>
`)
for i, data := range [][]byte{v1data, v2data} {
cfg, err := Load(bytes.NewReader(data), "NODE1")
if err != nil {
t.Error(err)
}
expectedRepos := []RepositoryConfiguration{
{
ID: "test",
Directory: "~/Sync",
Nodes: []NodeConfiguration{{NodeID: "NODE1"}, {NodeID: "NODE2"}},
ReadOnly: true,
},
}
expectedNodes := []NodeConfiguration{
{
NodeID: "NODE1",
Name: "node one",
Addresses: []string{"a"},
},
{
NodeID: "NODE2",
Name: "node two",
Addresses: []string{"b"},
},
}
expectedNodeIDs := []string{"NODE1", "NODE2"}
if cfg.Version != 2 {
t.Errorf("%d: Incorrect version %d != 2", i, cfg.Version)
}
if !reflect.DeepEqual(cfg.Repositories, expectedRepos) {
t.Errorf("%d: Incorrect Repositories\n A: %#v\n E: %#v", i, cfg.Repositories, expectedRepos)
}
if !reflect.DeepEqual(cfg.Nodes, expectedNodes) {
t.Errorf("%d: Incorrect Nodes\n A: %#v\n E: %#v", i, cfg.Nodes, expectedNodes)
}
if !reflect.DeepEqual(cfg.Repositories[0].NodeIDs(), expectedNodeIDs) {
t.Errorf("%d: Incorrect NodeIDs\n A: %#v\n E: %#v", i, cfg.Repositories[0].NodeIDs(), expectedNodeIDs)
}
}
}
2014-03-04 22:17:28 +01:00
func TestNoListenAddress(t *testing.T) {
data := []byte(`<configuration version="1">
<repository directory="~/Sync">
<node id="..." name="...">
<address>dynamic</address>
</node>
</repository>
<options>
<listenAddress></listenAddress>
</options>
</configuration>
`)
2014-05-15 02:18:09 +02:00
cfg, err := Load(bytes.NewReader(data), "nodeID")
2014-03-04 22:17:28 +01:00
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(`<configuration version="2">
2014-03-04 22:17:28 +01:00
<repository directory="~/Sync">
<node id="..." name="...">
<address>dynamic</address>
</node>
</repository>
<options>
<listenAddress>:23000</listenAddress>
<allowDelete>false</allowDelete>
<globalAnnounceServer>syncthing.nym.se:22025</globalAnnounceServer>
<globalAnnounceEnabled>false</globalAnnounceEnabled>
<localAnnounceEnabled>false</localAnnounceEnabled>
<localAnnouncePort>42123</localAnnouncePort>
2014-03-04 22:17:28 +01:00
<parallelRequests>32</parallelRequests>
<maxSendKbps>1234</maxSendKbps>
<rescanIntervalS>600</rescanIntervalS>
<reconnectionIntervalS>6000</reconnectionIntervalS>
<maxChangeKbps>2345</maxChangeKbps>
<startBrowser>false</startBrowser>
2014-04-18 13:39:51 +02:00
<upnpEnabled>false</upnpEnabled>
2014-03-04 22:17:28 +01:00
</options>
</configuration>
`)
expected := OptionsConfiguration{
ListenAddress: []string{":23000"},
GlobalAnnServer: "syncthing.nym.se:22025",
2014-03-04 22:17:28 +01:00
GlobalAnnEnabled: false,
LocalAnnEnabled: false,
LocalAnnPort: 42123,
2014-03-04 22:17:28 +01:00
ParallelRequests: 32,
MaxSendKbps: 1234,
RescanIntervalS: 600,
ReconnectIntervalS: 6000,
MaxChangeKbps: 2345,
StartBrowser: false,
2014-04-18 13:39:51 +02:00
UPnPEnabled: false,
2014-03-04 22:17:28 +01:00
}
2014-05-15 02:18:09 +02:00
cfg, err := Load(bytes.NewReader(data), "nodeID")
2014-03-04 22:17:28 +01:00
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)
}
}
func TestNodeAddresses(t *testing.T) {
data := []byte(`
<configuration version="2">
<node id="n1">
<address>dynamic</address>
</node>
<node id="n2">
<address></address>
</node>
<node id="n3">
</node>
</configuration>
`)
2014-04-22 12:06:32 +02:00
name, _ := os.Hostname()
expected := []NodeConfiguration{
{
NodeID: "N1",
Addresses: []string{"dynamic"},
},
{
NodeID: "N2",
Addresses: []string{"dynamic"},
},
{
NodeID: "N3",
Addresses: []string{"dynamic"},
},
{
NodeID: "N4",
2014-04-22 12:06:32 +02:00
Name: name, // Set when auto created
Addresses: []string{"dynamic"},
},
}
cfg, err := Load(bytes.NewReader(data), "N4")
if err != nil {
t.Error(err)
}
if !reflect.DeepEqual(cfg.Nodes, expected) {
t.Errorf("Nodes differ;\n E: %#v\n A: %#v", expected, cfg.Nodes)
}
}
func TestStripNodeIs(t *testing.T) {
data := []byte(`
<configuration version="2">
<node id="AAAA-BBBB-CCCC">
<address>dynamic</address>
</node>
<node id="AAAA BBBB DDDD">
<address></address>
</node>
<node id="AAAABBBBEEEE">
<address></address>
</node>
<repository directory="~/Sync">
<node id="AAA ABBB-BCC CC" name=""></node>
<node id="AA-AAB BBBD-DDD" name=""></node>
<node id="AAA AB-BBB EEE-E" name=""></node>
</repository>
</configuration>
`)
expected := []NodeConfiguration{
{
NodeID: "AAAABBBBCCCC",
Addresses: []string{"dynamic"},
},
{
NodeID: "AAAABBBBDDDD",
Addresses: []string{"dynamic"},
},
{
NodeID: "AAAABBBBEEEE",
Addresses: []string{"dynamic"},
},
}
cfg, err := Load(bytes.NewReader(data), "n4")
if err != nil {
t.Error(err)
}
for i := range expected {
if !reflect.DeepEqual(cfg.Nodes[i], expected[i]) {
t.Errorf("Nodes[%d] differ;\n E: %#v\n A: %#v", i, expected[i], cfg.Nodes[i])
}
if cfg.Repositories[0].Nodes[i].NodeID != expected[i].NodeID {
t.Errorf("Repo nodes[%d] differ;\n E: %#v\n A: %#v", i, expected[i].NodeID, cfg.Repositories[0].Nodes[i].NodeID)
}
}
}