122 lines
2.8 KiB
Go
122 lines
2.8 KiB
Go
package system
|
|
|
|
import (
|
|
"context"
|
|
"runtime"
|
|
"testing"
|
|
)
|
|
|
|
func TestDetectPackageManager(t *testing.T) {
|
|
tests := []struct {
|
|
distro string
|
|
expected string
|
|
}{
|
|
{"ubuntu", "apt"},
|
|
{"debian", "apt"},
|
|
{"fedora", "dnf"},
|
|
{"centos", "dnf"},
|
|
{"arch", "pacman"},
|
|
{"manjaro", "pacman"},
|
|
{"opensuse", "zypper"},
|
|
{"alpine", "apk"},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
result := detectPackageManager(test.distro)
|
|
if result != test.expected {
|
|
t.Errorf("detectPackageManager(%q) = %q, want %q", test.distro, result, test.expected)
|
|
}
|
|
}
|
|
|
|
unknownResult := detectPackageManager("totally_unknown_distro")
|
|
if unknownResult == "" {
|
|
t.Error("detectPackageManager with unknown distro should return something")
|
|
}
|
|
}
|
|
|
|
func TestDetectSystem(t *testing.T) {
|
|
if runtime.GOOS != "linux" {
|
|
t.Skip("Skipping Linux-specific test on non-Linux system")
|
|
}
|
|
|
|
ctx := context.Background()
|
|
info, err := DetectSystem(ctx)
|
|
if err != nil {
|
|
t.Fatalf("DetectSystem() failed: %v", err)
|
|
}
|
|
|
|
if info.Distribution == "" {
|
|
t.Error("Distribution should not be empty")
|
|
}
|
|
|
|
if info.Architecture == "" {
|
|
t.Error("Architecture should not be empty")
|
|
}
|
|
|
|
if info.PackageManager == "" {
|
|
t.Error("PackageManager should not be empty")
|
|
}
|
|
|
|
// Architecture should match runtime.GOARCH
|
|
if info.Architecture != runtime.GOARCH {
|
|
t.Errorf("Architecture = %q, want %q", info.Architecture, runtime.GOARCH)
|
|
}
|
|
}
|
|
|
|
func TestGetChassisType(t *testing.T) {
|
|
tests := []struct {
|
|
input int
|
|
expected string
|
|
}{
|
|
{1, "Other"},
|
|
{3, "Desktop"},
|
|
{9, "Laptop"},
|
|
{10, "Notebook"},
|
|
{999, "Unknown"}, // Invalid type
|
|
{0, "Unknown"}, // Invalid type
|
|
}
|
|
|
|
for _, test := range tests {
|
|
result := getChassisType(test.input)
|
|
if result != test.expected {
|
|
t.Errorf("getChassisType(%d) = %q, want %q", test.input, result, test.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGatherSystemInfo(t *testing.T) {
|
|
if runtime.GOOS != "linux" {
|
|
t.Skip("Skipping Linux-specific test on non-Linux system")
|
|
}
|
|
|
|
ctx := context.Background()
|
|
sysInfo, err := GatherSystemInfo(ctx)
|
|
if err != nil {
|
|
t.Fatalf("GatherSystemInfo() failed: %v", err)
|
|
}
|
|
|
|
// Basic validation
|
|
if sysInfo.Distribution.ID == "" {
|
|
t.Error("Distribution ID should not be empty")
|
|
}
|
|
|
|
if sysInfo.CPU.Architecture == "" {
|
|
t.Error("CPU Architecture should not be empty")
|
|
}
|
|
|
|
if sysInfo.Memory.Total <= 0 {
|
|
t.Error("Memory Total should be greater than 0")
|
|
}
|
|
|
|
// CPU should have at least 1 core (but may be 0 if /proc/cpuinfo is not accessible in test environment)
|
|
if sysInfo.CPU.Cores < 0 {
|
|
t.Error("CPU Cores should not be negative")
|
|
}
|
|
|
|
// If we can read CPU info, we should have at least 1 core
|
|
// In test environments, this might not be available, so we just log it
|
|
if sysInfo.CPU.Cores == 0 {
|
|
t.Logf("Warning: CPU cores is 0, possibly due to test environment limitations")
|
|
}
|
|
}
|