staros/os_test.go
starainrt d93a851d1b
feat: 完善 staros 系统能力并更新 wincmd 发布版依赖
- 重构 sysconf 为文档模型 INI Parser 与 Config Framework
- 强化 hosts 解析、插入校验、写回与异常输入处理
- 完善 StarCmd 生命周期、等待 API、流式输出与 IO 重定向
- 扩展跨平台文件时间、文件锁、内存、进程与网络能力
- 将 Windows 进程适配更新到 b612.me/wincmd v0.1.0
- 移除本地 wincmd/win32api replace,改用发布版依赖
- 将最低 Go 版本提升到 1.18
- 补充 hosts、sysconf、FileLock、StarCmd 与平台适配回归测试
2026-06-09 18:10:19 +08:00

111 lines
2.6 KiB
Go

package staros
import (
"errors"
"os/user"
"strconv"
"testing"
"time"
)
func Test_Disk(t *testing.T) {
disk, err := DiskUsageE(".")
if err != nil {
t.Fatal(err)
}
if disk.All == 0 {
t.Fatal("expected non-zero total disk size")
}
if disk.Used+disk.Free != disk.All {
t.Fatalf("expected used + free == all, got used=%d free=%d all=%d", disk.Used, disk.Free, disk.All)
}
}
func TestCpuUsageDoesNotPanic(t *testing.T) {
_ = CpuUsage(time.Millisecond)
}
func TestWhoamiGID(t *testing.T) {
_, gid, _, _, _, err := Whoami()
if errors.Is(err, ERR_UNSUPPORTED) {
t.Skip(err)
}
if err != nil {
t.Fatal(err)
}
current, err := user.Current()
if err != nil {
t.Fatal(err)
}
expected, err := strconv.Atoi(current.Gid)
if err != nil {
t.Fatal(err)
}
if gid != expected {
t.Fatalf("expected gid %d, got %d", expected, gid)
}
}
func TestIdentityLookupFunctions(t *testing.T) {
current, err := user.Current()
if err != nil {
t.Skipf("user.Current unavailable: %v", err)
}
wantUID, uidErr := strconv.ParseUint(current.Uid, 10, 32)
wantGID, gidErr := strconv.ParseUint(current.Gid, 10, 32)
uid, gid, home, err := GetUidGid(current.Username)
if uidErr == nil && gidErr == nil {
if err != nil {
t.Fatalf("GetUidGid failed: %v", err)
}
if uid != uint32(wantUID) || gid != uint32(wantGID) || home != current.HomeDir {
t.Fatalf("GetUidGid mismatch: uid=%d gid=%d home=%q", uid, gid, home)
}
} else if err == nil {
t.Fatalf("GetUidGid should reject non-numeric ids: uid=%q gid=%q", current.Uid, current.Gid)
}
uid, err = GetUid(current.Username)
if uidErr == nil {
if err != nil {
t.Fatalf("GetUid failed: %v", err)
}
if uid != uint32(wantUID) {
t.Fatalf("GetUid mismatch: got=%d want=%d", uid, wantUID)
}
} else if err == nil {
t.Fatalf("GetUid should reject non-numeric uid %q", current.Uid)
}
gid, err = GetGid(current.Username)
if gidErr == nil {
if err != nil {
t.Fatalf("GetGid failed: %v", err)
}
if gid != uint32(wantGID) {
t.Fatalf("GetGid mismatch: got=%d want=%d", gid, wantGID)
}
} else if err == nil {
t.Fatalf("GetGid should reject non-numeric gid %q", current.Gid)
}
group, err := user.LookupGroupId(current.Gid)
if err != nil {
t.Skipf("user.LookupGroupId unavailable: %v", err)
}
groupID, groupErr := strconv.ParseUint(group.Gid, 10, 32)
gotGroupID, err := GetGidByName(group.Name)
if groupErr == nil {
if err != nil {
t.Fatalf("GetGidByName failed: %v", err)
}
if gotGroupID != uint32(groupID) {
t.Fatalf("GetGidByName mismatch: got=%d want=%d", gotGroupID, groupID)
}
} else if err == nil {
t.Fatalf("GetGidByName should reject non-numeric gid %q", group.Gid)
}
}