2016-01-03 21:56:19 +01:00
|
|
|
// Copyright (C) 2016 The Syncthing Authors.
|
|
|
|
//
|
|
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
|
|
// You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
2016-01-14 11:06:36 +01:00
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/syncthing/syncthing/lib/config"
|
|
|
|
"github.com/syncthing/syncthing/lib/protocol"
|
|
|
|
"github.com/thejerf/suture"
|
|
|
|
)
|
2016-01-03 21:56:19 +01:00
|
|
|
|
|
|
|
func TestCSRFToken(t *testing.T) {
|
|
|
|
t1 := newCsrfToken()
|
|
|
|
t2 := newCsrfToken()
|
|
|
|
|
|
|
|
t3 := newCsrfToken()
|
|
|
|
if !validCsrfToken(t3) {
|
|
|
|
t.Fatal("t3 should be valid")
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := 0; i < 250; i++ {
|
|
|
|
if i%5 == 0 {
|
|
|
|
// t1 and t2 should remain valid by virtue of us checking them now
|
|
|
|
// and then.
|
|
|
|
if !validCsrfToken(t1) {
|
|
|
|
t.Fatal("t1 should be valid at iteration", i)
|
|
|
|
}
|
|
|
|
if !validCsrfToken(t2) {
|
|
|
|
t.Fatal("t2 should be valid at iteration", i)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// The newly generated token is always valid
|
|
|
|
t4 := newCsrfToken()
|
|
|
|
if !validCsrfToken(t4) {
|
|
|
|
t.Fatal("t4 should be valid at iteration", i)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if validCsrfToken(t3) {
|
|
|
|
t.Fatal("t3 should have expired by now")
|
|
|
|
}
|
|
|
|
}
|
2016-01-14 11:06:36 +01:00
|
|
|
|
|
|
|
func TestStopAfterBrokenConfig(t *testing.T) {
|
|
|
|
baseDirs["config"] = "../../test/h1" // to load HTTPS keys
|
|
|
|
expandLocations()
|
|
|
|
|
|
|
|
cfg := config.Configuration{
|
|
|
|
GUI: config.GUIConfiguration{
|
|
|
|
RawAddress: "127.0.0.1:0",
|
|
|
|
RawUseTLS: false,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
w := config.Wrap("/dev/null", cfg)
|
|
|
|
|
|
|
|
srv, err := newAPIService(protocol.LocalDeviceID, w, "", nil, nil, nil, nil, nil, nil)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
srv.started = make(chan struct{})
|
|
|
|
|
|
|
|
sup := suture.NewSimple("test")
|
|
|
|
sup.Add(srv)
|
|
|
|
sup.ServeBackground()
|
|
|
|
|
|
|
|
<-srv.started
|
|
|
|
|
|
|
|
// Service is now running, listening on a random port on localhost. Now we
|
|
|
|
// request a config change to a completely invalid listen address. The
|
|
|
|
// commit will fail and the service will be in a broken state.
|
|
|
|
|
|
|
|
newCfg := config.Configuration{
|
|
|
|
GUI: config.GUIConfiguration{
|
|
|
|
RawAddress: "totally not a valid address",
|
|
|
|
RawUseTLS: false,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
if srv.CommitConfiguration(cfg, newCfg) {
|
|
|
|
t.Fatal("Config commit should have failed")
|
|
|
|
}
|
|
|
|
|
|
|
|
// Nonetheless, it should be fine to Stop() it without panic.
|
|
|
|
|
|
|
|
sup.Stop()
|
|
|
|
}
|