fixed parsing of the raspberry pi's kernel version

This commit is contained in:
Karan Misra 2014-03-02 01:54:01 +05:30
parent 02defd2cc0
commit d0cc5f4e35
2 changed files with 60 additions and 14 deletions

View File

@ -30,25 +30,34 @@ func nodeName() (string, error) {
return execOutput("uname", "-n")
}
func parseVersion(str string) (major, minor, patch int, err error) {
parts := strings.Split(str, ".")
len := len(parts)
if major, err = strconv.Atoi(parts[0]); err != nil {
return 0, 0, 0, err
}
if minor, err = strconv.Atoi(parts[1]); err != nil {
return 0, 0, 0, err
}
if len > 2 {
part := parts[2]
part = strings.TrimSuffix(part, "+")
if patch, err = strconv.Atoi(part); err != nil {
return 0, 0, 0, err
}
}
return major, minor, patch, err
}
func kernelVersion() (major, minor, patch int, err error) {
output, err := execOutput("uname", "-r")
if err != nil {
return
return 0, 0, 0, err
}
parts := strings.Split(output, ".")
if major, err = strconv.Atoi(parts[0]); err != nil {
return
}
if minor, err = strconv.Atoi(parts[1]); err != nil {
return
}
if patch, err = strconv.Atoi(parts[2]); err != nil {
return
}
return
return parseVersion(output)
}
func Detect() (Host, int, error) {

37
host/detect_test.go Normal file
View File

@ -0,0 +1,37 @@
package host
import "testing"
func TestKernelVersionParse(t *testing.T) {
var tests = []struct {
versionStr string
major, minor, patch int
}{
{
"3.8",
3, 8, 0,
},
{
"3.7",
3, 7, 0,
},
{
"3.8.2",
3, 8, 2,
},
{
"3.8.10+",
3, 8, 10,
},
}
for _, test := range tests {
major, minor, patch, err := parseVersion(test.versionStr)
if err != nil {
t.Errorf("Failed parsing %q: %v", test.versionStr, err)
continue
}
if major != test.major || minor != test.minor || patch != test.patch {
t.Errorf("Parse of %q: got (%v, %v, %v) want (%v, %v, %v)", test.versionStr, major, minor, patch, test.major, test.minor, test.patch)
}
}
}