Browse code

Refactored code and added unit tests

- Extracted ParseRelease method from GetKernelVersion to make code
more testable
- Added tests for ParseRelease method

Mohit Soni authored on 2013/08/24 16:24:40
Showing 2 changed files
... ...
@@ -515,9 +515,7 @@ func FindCgroupMountpoint(cgroupType string) (string, error) {
515 515
 
516 516
 func GetKernelVersion() (*KernelVersionInfo, error) {
517 517
 	var (
518
-		flavor               string
519
-		kernel, major, minor int
520
-		err                  error
518
+		err error
521 519
 	)
522 520
 
523 521
 	uts, err := uname()
... ...
@@ -536,7 +534,17 @@ func GetKernelVersion() (*KernelVersionInfo, error) {
536 536
 	// Remove the \x00 from the release for Atoi to parse correctly
537 537
 	release = release[:bytes.IndexByte(release, 0)]
538 538
 
539
-	tmp := strings.SplitN(string(release), "-", 2)
539
+	return ParseRelease(string(release))
540
+}
541
+
542
+func ParseRelease(release string) (*KernelVersionInfo, error) {
543
+	var (
544
+		flavor               string
545
+		kernel, major, minor int
546
+		err                  error
547
+	)
548
+
549
+	tmp := strings.SplitN(release, "-", 2)
540 550
 	tmp2 := strings.Split(tmp[0], ".")
541 551
 
542 552
 	if len(tmp2) > 0 {
... ...
@@ -337,3 +337,21 @@ search dotcloud.net`: true,
337 337
 		}
338 338
 	}
339 339
 }
340
+
341
+func assertParseRelease(t *testing.T, release string, b *KernelVersionInfo, result int) {
342
+	var (
343
+		a *KernelVersionInfo
344
+	)
345
+	a, _ = ParseRelease(release)
346
+
347
+	if r := CompareKernelVersion(a, b); r != result {
348
+		t.Fatalf("Unexpected kernel version comparison result. Found %d, expected %d", r, result)
349
+	}
350
+}
351
+
352
+func TestParseRelease(t *testing.T) {
353
+	assertParseRelease(t, "3.8.0", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0)
354
+	assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54}, 0)
355
+	assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: "1"}, 0)
356
+	assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "19-generic"}, 0)
357
+}