mirror of
https://github.com/henrygd/beszel.git
synced 2025-10-30 01:57:04 +00:00
236 lines
5.8 KiB
Go
236 lines
5.8 KiB
Go
//go:build testing
|
|
// +build testing
|
|
|
|
package agent
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/henrygd/beszel/internal/entities/system"
|
|
"github.com/shirou/gopsutil/v4/disk"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestParseFilesystemEntry(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
expectedFs string
|
|
expectedName string
|
|
}{
|
|
{
|
|
name: "simple device name",
|
|
input: "sda1",
|
|
expectedFs: "sda1",
|
|
expectedName: "",
|
|
},
|
|
{
|
|
name: "device with custom name",
|
|
input: "sda1__my-storage",
|
|
expectedFs: "sda1",
|
|
expectedName: "my-storage",
|
|
},
|
|
{
|
|
name: "full device path with custom name",
|
|
input: "/dev/sdb1__backup-drive",
|
|
expectedFs: "/dev/sdb1",
|
|
expectedName: "backup-drive",
|
|
},
|
|
{
|
|
name: "NVMe device with custom name",
|
|
input: "nvme0n1p2__fast-ssd",
|
|
expectedFs: "nvme0n1p2",
|
|
expectedName: "fast-ssd",
|
|
},
|
|
{
|
|
name: "whitespace trimmed",
|
|
input: " sda2__trimmed-name ",
|
|
expectedFs: "sda2",
|
|
expectedName: "trimmed-name",
|
|
},
|
|
{
|
|
name: "empty custom name",
|
|
input: "sda3__",
|
|
expectedFs: "sda3",
|
|
expectedName: "",
|
|
},
|
|
{
|
|
name: "empty device name",
|
|
input: "__just-custom",
|
|
expectedFs: "",
|
|
expectedName: "just-custom",
|
|
},
|
|
{
|
|
name: "multiple underscores in custom name",
|
|
input: "sda1__my_custom_drive",
|
|
expectedFs: "sda1",
|
|
expectedName: "my_custom_drive",
|
|
},
|
|
{
|
|
name: "custom name with spaces",
|
|
input: "sda1__My Storage Drive",
|
|
expectedFs: "sda1",
|
|
expectedName: "My Storage Drive",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
fsEntry := strings.TrimSpace(tt.input)
|
|
var fs, customName string
|
|
if parts := strings.SplitN(fsEntry, "__", 2); len(parts) == 2 {
|
|
fs = strings.TrimSpace(parts[0])
|
|
customName = strings.TrimSpace(parts[1])
|
|
} else {
|
|
fs = fsEntry
|
|
}
|
|
|
|
assert.Equal(t, tt.expectedFs, fs)
|
|
assert.Equal(t, tt.expectedName, customName)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestInitializeDiskInfoWithCustomNames(t *testing.T) {
|
|
// Set up environment variables
|
|
oldEnv := os.Getenv("EXTRA_FILESYSTEMS")
|
|
defer func() {
|
|
if oldEnv != "" {
|
|
os.Setenv("EXTRA_FILESYSTEMS", oldEnv)
|
|
} else {
|
|
os.Unsetenv("EXTRA_FILESYSTEMS")
|
|
}
|
|
}()
|
|
|
|
// Test with custom names
|
|
os.Setenv("EXTRA_FILESYSTEMS", "sda1__my-storage,/dev/sdb1__backup-drive,nvme0n1p2")
|
|
|
|
// Mock disk partitions (we'll just test the parsing logic)
|
|
// Since the actual disk operations are system-dependent, we'll focus on the parsing
|
|
testCases := []struct {
|
|
envValue string
|
|
expectedFs []string
|
|
expectedNames map[string]string
|
|
}{
|
|
{
|
|
envValue: "sda1__my-storage,sdb1__backup-drive",
|
|
expectedFs: []string{"sda1", "sdb1"},
|
|
expectedNames: map[string]string{
|
|
"sda1": "my-storage",
|
|
"sdb1": "backup-drive",
|
|
},
|
|
},
|
|
{
|
|
envValue: "sda1,nvme0n1p2__fast-ssd",
|
|
expectedFs: []string{"sda1", "nvme0n1p2"},
|
|
expectedNames: map[string]string{
|
|
"nvme0n1p2": "fast-ssd",
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run("env_"+tc.envValue, func(t *testing.T) {
|
|
os.Setenv("EXTRA_FILESYSTEMS", tc.envValue)
|
|
|
|
// Create mock partitions that would match our test cases
|
|
partitions := []disk.PartitionStat{}
|
|
for _, fs := range tc.expectedFs {
|
|
if strings.HasPrefix(fs, "/dev/") {
|
|
partitions = append(partitions, disk.PartitionStat{
|
|
Device: fs,
|
|
Mountpoint: fs,
|
|
})
|
|
} else {
|
|
partitions = append(partitions, disk.PartitionStat{
|
|
Device: "/dev/" + fs,
|
|
Mountpoint: "/" + fs,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Test the parsing logic by calling the relevant part
|
|
// We'll create a simplified version to test just the parsing
|
|
extraFilesystems := tc.envValue
|
|
for _, fsEntry := range strings.Split(extraFilesystems, ",") {
|
|
// Parse the entry
|
|
fsEntry = strings.TrimSpace(fsEntry)
|
|
var fs, customName string
|
|
if parts := strings.SplitN(fsEntry, "__", 2); len(parts) == 2 {
|
|
fs = strings.TrimSpace(parts[0])
|
|
customName = strings.TrimSpace(parts[1])
|
|
} else {
|
|
fs = fsEntry
|
|
}
|
|
|
|
// Verify the device is in our expected list
|
|
assert.Contains(t, tc.expectedFs, fs, "parsed device should be in expected list")
|
|
|
|
// Check if custom name should exist
|
|
if expectedName, exists := tc.expectedNames[fs]; exists {
|
|
assert.Equal(t, expectedName, customName, "custom name should match expected")
|
|
} else {
|
|
assert.Empty(t, customName, "custom name should be empty when not expected")
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestFsStatsWithCustomNames(t *testing.T) {
|
|
// Test that FsStats properly stores custom names
|
|
fsStats := &system.FsStats{
|
|
Mountpoint: "/mnt/storage",
|
|
Name: "my-custom-storage",
|
|
DiskTotal: 100.0,
|
|
DiskUsed: 50.0,
|
|
}
|
|
|
|
assert.Equal(t, "my-custom-storage", fsStats.Name)
|
|
assert.Equal(t, "/mnt/storage", fsStats.Mountpoint)
|
|
assert.Equal(t, 100.0, fsStats.DiskTotal)
|
|
assert.Equal(t, 50.0, fsStats.DiskUsed)
|
|
}
|
|
|
|
func TestExtraFsKeyGeneration(t *testing.T) {
|
|
// Test the logic for generating ExtraFs keys with custom names
|
|
testCases := []struct {
|
|
name string
|
|
deviceName string
|
|
customName string
|
|
expectedKey string
|
|
}{
|
|
{
|
|
name: "with custom name",
|
|
deviceName: "sda1",
|
|
customName: "my-storage",
|
|
expectedKey: "my-storage",
|
|
},
|
|
{
|
|
name: "without custom name",
|
|
deviceName: "sda1",
|
|
customName: "",
|
|
expectedKey: "sda1",
|
|
},
|
|
{
|
|
name: "empty custom name falls back to device",
|
|
deviceName: "nvme0n1p2",
|
|
customName: "",
|
|
expectedKey: "nvme0n1p2",
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
// Simulate the key generation logic from agent.go
|
|
key := tc.deviceName
|
|
if tc.customName != "" {
|
|
key = tc.customName
|
|
}
|
|
assert.Equal(t, tc.expectedKey, key)
|
|
})
|
|
}
|
|
}
|