go_ntp/ntp_test.go
2024-05-10 21:55:26 +02:00

111 lines
2.8 KiB
Go

package go_ntp_test
import (
"fmt"
"regexp"
"testing"
ntp "git.sa-roci.de/oss/go_ntp"
server "github.com/coreos/mantle/network/ntp"
)
var (
testCases = []struct {
ntpServers []string
expectedError string
createLocal bool
}{
{
ntpServers: []string{},
expectedError: `no time servers defined`,
},
{
ntpServers: []string{
"127.0.0.1",
},
expectedError: `read udp 127\.0\.0\.1:\d+->127\.0\.0\.1:123:`,
},
{
ntpServers: ntp.GetDefaultServers(),
},
{
ntpServers: []string{
"127.0.0.1:1880",
},
createLocal: true,
},
}
)
func TestGetCurrentTime(t *testing.T) {
for i, testCase := range testCases {
var srv *server.Server
if testCase.createLocal {
var err error
if srv, err = server.NewServer("127.0.0.1:1880"); err == nil {
go srv.Serve()
} else {
t.Errorf("TestGetCurrentTime: test case %d: could not create local NTP server: %s", i+1, err)
continue
}
}
if synced, err := ntp.GetCurrentTime(testCase.ntpServers...); err == nil {
if testCase.expectedError == "" {
fmt.Printf("TestGetCurrentTime: test case %d: retrieved NTP time: %s\n", i+1, synced)
} else {
t.Errorf("TestGetCurrentTime: test case %d: expected error (%s) did not occur", i+1, testCase.expectedError)
}
} else {
if testCase.expectedError == "" {
t.Errorf("TestGetCurrentTime: test case %d: got unexpected error (%s)", i+1, err.Error())
} else {
tester := regexp.MustCompile(testCase.expectedError)
if !tester.MatchString(err.Error()) {
t.Errorf("TestGetCurrentTime: test case %d: expected error to match '%s' but got '%s'", i+1, testCase.expectedError, err.Error())
}
}
}
if srv != nil {
srv.Close()
}
}
}
func TestGetLocalOffset(t *testing.T) {
for i, testCase := range testCases {
var srv *server.Server
if testCase.createLocal {
var err error
if srv, err = server.NewServer("127.0.0.1:1880"); err == nil {
go srv.Serve()
} else {
t.Errorf("TestGetLocalOffset: test case %d: could not create local NTP server: %s", i+1, err)
continue
}
}
if offset, err := ntp.GetLocalOffset(testCase.ntpServers...); err == nil {
if testCase.expectedError == "" {
fmt.Printf("TestGetCurrentTime: test case %d: retrieved NTP time offset: %s\n", i+1, offset)
} else {
t.Errorf("TestGetCurrentTime: test case %d: expected error (%s) did not occur", i+1, testCase.expectedError)
}
} else {
if testCase.expectedError == "" {
t.Errorf("TestGetCurrentTime: test case %d: got unexpected error (%s)", i+1, err.Error())
} else {
tester := regexp.MustCompile(testCase.expectedError)
if !tester.MatchString(err.Error()) {
t.Errorf("TestGetCurrentTime: test case %d: expected error to match '%s' but got '%s'", i+1, testCase.expectedError, err.Error())
}
}
}
if srv != nil {
srv.Close()
}
}
}