github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/pkg/parsers/kernel/kernel_unix_test.go (about)

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