| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- package model
- import (
- "testing"
- "github.com/calmh/syncthing/protocol"
- )
- var testcases = []struct {
- local, remote protocol.ClusterConfigMessage
- err string
- }{
- {
- local: protocol.ClusterConfigMessage{},
- remote: protocol.ClusterConfigMessage{},
- err: "",
- },
- {
- local: protocol.ClusterConfigMessage{ClientName: "a", ClientVersion: "b"},
- remote: protocol.ClusterConfigMessage{ClientName: "c", ClientVersion: "d"},
- err: "",
- },
- {
- local: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "foo"},
- },
- },
- remote: protocol.ClusterConfigMessage{ClientName: "c", ClientVersion: "d"},
- err: `remote is missing repository "foo"`,
- },
- {
- local: protocol.ClusterConfigMessage{ClientName: "c", ClientVersion: "d"},
- remote: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "foo"},
- },
- },
- err: `remote has extra repository "foo"`,
- },
- {
- local: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "foo"},
- {ID: "bar"},
- },
- },
- remote: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "foo"},
- {ID: "bar"},
- },
- },
- err: "",
- },
- {
- local: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "quux"},
- {ID: "foo"},
- {ID: "bar"},
- },
- },
- remote: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "bar"},
- {ID: "quux"},
- },
- },
- err: `remote is missing repository "foo"`,
- },
- {
- local: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "quux"},
- {ID: "bar"},
- },
- },
- remote: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "bar"},
- {ID: "foo"},
- {ID: "quux"},
- },
- },
- err: `remote has extra repository "foo"`,
- },
- {
- local: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {
- ID: "foo",
- Nodes: []protocol.Node{
- {ID: "a"},
- },
- },
- {ID: "bar"},
- },
- },
- remote: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {ID: "foo"},
- {ID: "bar"},
- },
- },
- err: "",
- },
- {
- local: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {
- ID: "foo",
- Nodes: []protocol.Node{
- {ID: "a"},
- },
- },
- {ID: "bar"},
- },
- },
- remote: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {
- ID: "foo",
- Nodes: []protocol.Node{
- {ID: "a"},
- {ID: "b"},
- },
- },
- {ID: "bar"},
- },
- },
- err: "",
- },
- {
- local: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {
- ID: "foo",
- Nodes: []protocol.Node{
- {
- ID: "a",
- Flags: protocol.FlagShareReadOnly,
- },
- },
- },
- {ID: "bar"},
- },
- },
- remote: protocol.ClusterConfigMessage{
- Repositories: []protocol.Repository{
- {
- ID: "foo",
- Nodes: []protocol.Node{
- {
- ID: "a",
- Flags: protocol.FlagShareTrusted,
- },
- },
- },
- {ID: "bar"},
- },
- },
- err: `remote has different sharing flags for node "a" in repository "foo"`,
- },
- }
- func TestCompareClusterConfig(t *testing.T) {
- for i, tc := range testcases {
- err := compareClusterConfig(tc.local, tc.remote)
- switch {
- case tc.err == "" && err != nil:
- t.Errorf("#%d: unexpected error: %v", i, err)
- case tc.err != "" && err == nil:
- t.Errorf("#%d: unexpected nil error", i)
- case tc.err != "" && err != nil && tc.err != err.Error():
- t.Errorf("#%d: incorrect error: %q != %q", i, err, tc.err)
- }
- }
- }
|