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() } } }