diff --git a/pkg/cars/os/main.go b/pkg/cars/os/main.go index b5f9d8b..ce47259 100644 --- a/pkg/cars/os/main.go +++ b/pkg/cars/os/main.go @@ -54,7 +54,7 @@ var symbols = map[string]iconColor { "opensuse-leap": { icon: "\uf314", color: "113", }, // nf-linux-opensuse "opensuse-tumbleweed": { icon: "\uf314", color: "113", }, // nf-linux-opensuse "raspbian": { icon: "\uf315", color: "125", }, // nf-linux-raspberry_pi - "redhat": { icon: "\ue7bb", color: "1", }, // nf-dev-redhat + "rhel": { icon: "\ue7bb", color: "1", }, // nf-dev-redhat "sabayon": { icon: "\uf317", color: "255", }, // nf-linux-sabayon "slackware": { icon: "\uf318", color: "63", }, // nf-linux-slackware "sles": { icon: "\uf314", color: "113", }, // nf-linux-opensuse @@ -68,13 +68,16 @@ var osName string // Path to the os-release file. var osReleaseFile = "/etc/os-release" +// OS type +var goos = runtime.GOOS + // Returns the OS name. func getOsName() string { if osName != "" { return osName } - osName = runtime.GOOS + osName = goos if _, err := os.Stat(osReleaseFile); ! os.IsNotExist(err) { file, err := os.Open(osReleaseFile) @@ -92,8 +95,12 @@ func getOsName() string { line := scanner.Text() if len(line) > 3 && line[:3] == "ID=" { - osName = strings.Replace( + id := strings.Replace( strings.Replace(line[3:], "\"", "", -1), "'", "", -1) + + if _, ok := symbols[id]; ok { + osName = id + } } } } diff --git a/pkg/cars/os/main_test.go b/pkg/cars/os/main_test.go index 8716758..74a26ac 100644 --- a/pkg/cars/os/main_test.go +++ b/pkg/cars/os/main_test.go @@ -1,37 +1,69 @@ package os import ( + "io/ioutil" + "log" "os" "testing" ) func TestInitDefault(t *testing.T) { tests := []struct { + goos string name string - osRelease string + osReleaseFile string expectedOutput string }{ { + goos: "linux", name: "linux", - osRelease: "/proc/1/environ", + osReleaseFile: "/proc/1/environ", expectedOutput: "\uf17c", }, { + goos: "linux", name: "unknown", - osRelease: "/etc/os-release", - expectedOutput: "?", + expectedOutput: "\uf17c", + }, + { + goos: "linux", + name: "arch", + expectedOutput: "\uf303", }, { + goos: "unknown", name: "unknown", - osRelease: "/etc/os-release", + osReleaseFile: "/etc/os-release.unknown", expectedOutput: "?", }, } for i, test := range tests { - os.Setenv("GBT_CAR_OS_NAME", test.name) - osReleaseFile = test.osRelease osName = "" + goos = test.goos + + if test.osReleaseFile == "" { + content := []byte("ID=" + test.name) + tmpfile, err := ioutil.TempFile("", "test") + + if err != nil { + log.Fatal(err) + } + + osReleaseFile = tmpfile.Name() + + defer os.Remove(tmpfile.Name()) + + if _, err := tmpfile.Write(content); err != nil { + log.Fatal(err) + } + + if err := tmpfile.Close(); err != nil { + log.Fatal(err) + } + } else { + osReleaseFile = test.osReleaseFile + } car := Car{}