1// +build !windows 2 3package kernel // import "github.com/docker/docker/pkg/parsers/kernel" 4 5import ( 6 "fmt" 7 "testing" 8) 9 10func assertParseRelease(t *testing.T, release string, b *VersionInfo, result int) { 11 var ( 12 a *VersionInfo 13 ) 14 a, _ = ParseRelease(release) 15 16 if r := CompareKernelVersion(*a, *b); r != result { 17 t.Fatalf("Unexpected kernel version comparison result for (%v,%v). Found %d, expected %d", release, b, r, result) 18 } 19 if a.Flavor != b.Flavor { 20 t.Fatalf("Unexpected parsed kernel flavor. Found %s, expected %s", a.Flavor, b.Flavor) 21 } 22} 23 24// TestParseRelease tests the ParseRelease() function 25func TestParseRelease(t *testing.T) { 26 assertParseRelease(t, "3.8.0", &VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0) 27 assertParseRelease(t, "3.4.54.longterm-1", &VersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: ".longterm-1"}, 0) 28 assertParseRelease(t, "3.4.54.longterm-1", &VersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: ".longterm-1"}, 0) 29 assertParseRelease(t, "3.8.0-19-generic", &VersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "-19-generic"}, 0) 30 assertParseRelease(t, "3.10.0-862.2.3.el7.x86_64", &VersionInfo{Kernel: 3, Major: 10, Minor: 0, Flavor: "-862.2.3.el7.x86_64"}, 0) 31 assertParseRelease(t, "3.12.8tag", &VersionInfo{Kernel: 3, Major: 12, Minor: 8, Flavor: "tag"}, 0) 32 assertParseRelease(t, "3.12-1-amd64", &VersionInfo{Kernel: 3, Major: 12, Minor: 0, Flavor: "-1-amd64"}, 0) 33 assertParseRelease(t, "3.8.0", &VersionInfo{Kernel: 4, Major: 8, Minor: 0}, -1) 34 // Errors 35 invalids := []string{ 36 "3", 37 "a", 38 "a.a", 39 "a.a.a-a", 40 } 41 for _, invalid := range invalids { 42 expectedMessage := fmt.Sprintf("Can't parse kernel version %v", invalid) 43 if _, err := ParseRelease(invalid); err == nil || err.Error() != expectedMessage { 44 45 } 46 } 47} 48 49func assertKernelVersion(t *testing.T, a, b VersionInfo, result int) { 50 if r := CompareKernelVersion(a, b); r != result { 51 t.Fatalf("Unexpected kernel version comparison result. Found %d, expected %d", r, result) 52 } 53} 54 55// TestCompareKernelVersion tests the CompareKernelVersion() function 56func TestCompareKernelVersion(t *testing.T) { 57 assertKernelVersion(t, 58 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 59 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 60 0) 61 assertKernelVersion(t, 62 VersionInfo{Kernel: 2, Major: 6, Minor: 0}, 63 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 64 -1) 65 assertKernelVersion(t, 66 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 67 VersionInfo{Kernel: 2, Major: 6, Minor: 0}, 68 1) 69 assertKernelVersion(t, 70 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 71 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 72 0) 73 assertKernelVersion(t, 74 VersionInfo{Kernel: 3, Major: 8, Minor: 5}, 75 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 76 1) 77 assertKernelVersion(t, 78 VersionInfo{Kernel: 3, Major: 0, Minor: 20}, 79 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 80 -1) 81 assertKernelVersion(t, 82 VersionInfo{Kernel: 3, Major: 7, Minor: 20}, 83 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 84 -1) 85 assertKernelVersion(t, 86 VersionInfo{Kernel: 3, Major: 8, Minor: 20}, 87 VersionInfo{Kernel: 3, Major: 7, Minor: 0}, 88 1) 89 assertKernelVersion(t, 90 VersionInfo{Kernel: 3, Major: 8, Minor: 20}, 91 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 92 1) 93 assertKernelVersion(t, 94 VersionInfo{Kernel: 3, Major: 8, Minor: 0}, 95 VersionInfo{Kernel: 3, Major: 8, Minor: 20}, 96 -1) 97} 98