github.com/minio/madmin-go@v1.7.5/kernel/kernel_test.go (about) 1 // 2 // MinIO Object Storage (c) 2022 MinIO, Inc. 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 //go:build linux 18 // +build linux 19 20 package kernel 21 22 import "testing" 23 24 var testData = []struct { 25 success bool 26 releaseString string 27 kernelVersion uint32 28 }{ 29 {true, "4.1.2-3", 262402}, 30 {true, "4.8.14-200.fc24.x86_64", 264206}, 31 {true, "4.1.2-3foo", 262402}, 32 {true, "4.1.2foo-1", 262402}, 33 {true, "4.1.2-rkt-v1", 262402}, 34 {true, "4.1.2rkt-v1", 262402}, 35 {true, "4.1.2-3 foo", 262402}, 36 {true, "3.10.0-1062.el7.x86_64", 199168}, 37 {true, "3.0.0", 196608}, 38 {true, "2.6.32", 132640}, 39 {true, "5.13.0-30-generic", 331008}, 40 {true, "5.10.0-1052-oem", 330240}, 41 {false, "foo 4.1.2-3", 0}, 42 {true, "4.1.2", 262402}, 43 {false, ".4.1.2", 0}, 44 {false, "4.1.", 0}, 45 {false, "4.1", 0}, 46 } 47 48 func TestVersionFromRelease(t *testing.T) { 49 for _, test := range testData { 50 version, err := VersionFromRelease(test.releaseString) 51 if err != nil && test.success { 52 t.Errorf("expected %q to success: %s", test.releaseString, err) 53 } else if err == nil && !test.success { 54 t.Errorf("expected %q to fail", test.releaseString) 55 } 56 if version != test.kernelVersion { 57 t.Errorf("expected kernel version %d, got %d", test.kernelVersion, version) 58 } 59 } 60 } 61 62 func TestParseDebianVersion(t *testing.T) { 63 for _, tc := range []struct { 64 success bool 65 releaseString string 66 kernelVersion uint32 67 }{ 68 // 4.9.168 69 {true, "Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16)", 264616}, 70 // 4.9.88 71 {true, "Linux ip-10-0-75-49 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Linux", 264536}, 72 // 3.0.4 73 {true, "Linux version 3.16.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 4.9.2 (Debian 4.9.2-10+deb8u2) ) #1 SMP Debian 3.16.68-1 (2019-05-22)", 200772}, 74 // Invalid 75 {false, "Linux version 4.9.125-linuxkit (root@659b6d51c354) (gcc version 6.4.0 (Alpine 6.4.0) ) #1 SMP Fri Sep 7 08:20:28 UTC 2018", 0}, 76 } { 77 var version uint32 78 release, err := parseDebianRelease(tc.releaseString) 79 if err == nil { 80 version, err = VersionFromRelease(release) 81 } 82 if err != nil && tc.success { 83 t.Errorf("expected %q to success: %s", tc.releaseString, err) 84 } else if err == nil && !tc.success { 85 t.Errorf("expected %q to fail", tc.releaseString) 86 } 87 if version != tc.kernelVersion { 88 t.Errorf("expected kernel version %d, got %d", tc.kernelVersion, version) 89 } 90 } 91 }