Better config test (#177)
* Better config test Previously, when using the config test option `-test`, we quit fairly earlier in the process and would not catch a variety of additional parsing errors (such as lighthouse IP addresses, local_range, the new check to make sure static hosts are in the certificate's subnet, etc). * run config test as part of smoke test * don't need privileges for configtest Co-authored-by: Nathan Brown <nate@slack-corp.com>
This commit is contained in:
72
main.go
72
main.go
@ -101,32 +101,35 @@ func Main(configPath string, configTest bool, buildVersion string) {
|
||||
// tun config, listeners, anything modifying the computer should be below
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if configTest {
|
||||
os.Exit(0)
|
||||
}
|
||||
var tun *Tun
|
||||
if !configTest {
|
||||
config.CatchHUP()
|
||||
|
||||
config.CatchHUP()
|
||||
|
||||
// set up our tun dev
|
||||
tun, err := newTun(
|
||||
config.GetString("tun.dev", ""),
|
||||
tunCidr,
|
||||
config.GetInt("tun.mtu", DEFAULT_MTU),
|
||||
routes,
|
||||
unsafeRoutes,
|
||||
config.GetInt("tun.tx_queue", 500),
|
||||
)
|
||||
if err != nil {
|
||||
l.WithError(err).Fatal("Failed to get a tun/tap device")
|
||||
// set up our tun dev
|
||||
tun, err = newTun(
|
||||
config.GetString("tun.dev", ""),
|
||||
tunCidr,
|
||||
config.GetInt("tun.mtu", DEFAULT_MTU),
|
||||
routes,
|
||||
unsafeRoutes,
|
||||
config.GetInt("tun.tx_queue", 500),
|
||||
)
|
||||
if err != nil {
|
||||
l.WithError(err).Fatal("Failed to get a tun/tap device")
|
||||
}
|
||||
}
|
||||
|
||||
// set up our UDP listener
|
||||
udpQueues := config.GetInt("listen.routines", 1)
|
||||
udpServer, err := NewListener(config.GetString("listen.host", "0.0.0.0"), config.GetInt("listen.port", 0), udpQueues > 1)
|
||||
if err != nil {
|
||||
l.WithError(err).Fatal("Failed to open udp listener")
|
||||
var udpServer *udpConn
|
||||
|
||||
if !configTest {
|
||||
udpServer, err = NewListener(config.GetString("listen.host", "0.0.0.0"), config.GetInt("listen.port", 0), udpQueues > 1)
|
||||
if err != nil {
|
||||
l.WithError(err).Fatal("Failed to open udp listener")
|
||||
}
|
||||
udpServer.reloadConfig(config)
|
||||
}
|
||||
udpServer.reloadConfig(config)
|
||||
|
||||
// Set up my internal host map
|
||||
var preferredRanges []*net.IPNet
|
||||
@ -178,14 +181,14 @@ func Main(configPath string, configTest bool, buildVersion string) {
|
||||
*/
|
||||
|
||||
punchy := NewPunchyFromConfig(config)
|
||||
if punchy.Punch {
|
||||
if punchy.Punch && !configTest {
|
||||
l.Info("UDP hole punching enabled")
|
||||
go hostMap.Punchy(udpServer)
|
||||
}
|
||||
|
||||
port := config.GetInt("listen.port", 0)
|
||||
// If port is dynamic, discover it
|
||||
if port == 0 {
|
||||
if port == 0 && !configTest {
|
||||
uPort, err := udpServer.LocalAddr()
|
||||
if err != nil {
|
||||
l.WithError(err).Fatal("Failed to get listening port")
|
||||
@ -306,21 +309,28 @@ func Main(configPath string, configTest bool, buildVersion string) {
|
||||
l.Fatalf("Unknown cipher: %v", ifConfig.Cipher)
|
||||
}
|
||||
|
||||
ifce, err := NewInterface(ifConfig)
|
||||
if err != nil {
|
||||
l.WithError(err).Fatal("Failed to initialize interface")
|
||||
var ifce *Interface
|
||||
if !configTest {
|
||||
ifce, err = NewInterface(ifConfig)
|
||||
if err != nil {
|
||||
l.WithError(err).Fatal("Failed to initialize interface")
|
||||
}
|
||||
|
||||
ifce.RegisterConfigChangeCallbacks(config)
|
||||
|
||||
go handshakeManager.Run(ifce)
|
||||
go lightHouse.LhUpdateWorker(ifce)
|
||||
}
|
||||
|
||||
ifce.RegisterConfigChangeCallbacks(config)
|
||||
|
||||
go handshakeManager.Run(ifce)
|
||||
go lightHouse.LhUpdateWorker(ifce)
|
||||
|
||||
err = startStats(config)
|
||||
err = startStats(config, configTest)
|
||||
if err != nil {
|
||||
l.WithError(err).Fatal("Failed to start stats emitter")
|
||||
}
|
||||
|
||||
if configTest {
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
//TODO: check if we _should_ be emitting stats
|
||||
go ifce.emitStats(config.GetDuration("stats.interval", time.Second*10))
|
||||
|
||||
|
Reference in New Issue
Block a user