145 lines
4.0 KiB
Go
145 lines
4.0 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestArchInstallConfigGeneration(t *testing.T) {
|
|
config := &InstallConfig{
|
|
Disk: "/dev/sda",
|
|
EnableLUKS: true,
|
|
Hostname: "miasma-test",
|
|
Username: "testuser",
|
|
RootPassword: "rootpass",
|
|
UserPassword: "userpass",
|
|
Timezone: "UTC",
|
|
Locale: "en_US.UTF-8",
|
|
}
|
|
|
|
archConfig := config.ToArchInstall()
|
|
|
|
// Test that the config has the expected structure
|
|
if archConfig.Version == "" {
|
|
t.Error("Version should not be empty")
|
|
}
|
|
|
|
if archConfig.Bootloader != "Systemd-boot" {
|
|
t.Errorf("Expected bootloader to be 'Systemd-boot', got '%s'", archConfig.Bootloader)
|
|
}
|
|
|
|
if len(archConfig.Kernels) != 1 || archConfig.Kernels[0] != "linux-hardened" {
|
|
t.Errorf("Expected kernels to contain 'linux-hardened', got %v", archConfig.Kernels)
|
|
}
|
|
|
|
if archConfig.Hostname != "miasma-test" {
|
|
t.Errorf("Expected hostname 'miasma-test', got '%s'", archConfig.Hostname)
|
|
}
|
|
|
|
// Test disk configuration
|
|
if len(archConfig.DiskConfig.DeviceModifications) != 1 {
|
|
t.Errorf("Expected 1 device modification, got %d", len(archConfig.DiskConfig.DeviceModifications))
|
|
}
|
|
|
|
deviceMod := archConfig.DiskConfig.DeviceModifications[0]
|
|
if deviceMod.Device != "/dev/sda" {
|
|
t.Errorf("Expected device '/dev/sda', got '%s'", deviceMod.Device)
|
|
}
|
|
|
|
if len(deviceMod.Partitions) != 2 {
|
|
t.Errorf("Expected 2 partitions, got %d", len(deviceMod.Partitions))
|
|
}
|
|
|
|
// Test profile configuration
|
|
if archConfig.ProfileConfig.Profile.Main != "Desktop" {
|
|
t.Errorf("Expected profile main 'Desktop', got '%s'", archConfig.ProfileConfig.Profile.Main)
|
|
}
|
|
|
|
// Test user configuration
|
|
if len(archConfig.AuthConfig.Users) != 1 {
|
|
t.Errorf("Expected 1 user, got %d", len(archConfig.AuthConfig.Users))
|
|
}
|
|
|
|
user := archConfig.AuthConfig.Users[0]
|
|
if user.Username != "testuser" {
|
|
t.Errorf("Expected username 'testuser', got '%s'", user.Username)
|
|
}
|
|
|
|
// Test package list
|
|
expectedPackages := []string{
|
|
"base", "base-devel", "linux-hardened", "linux-firmware", "btrfs-progs",
|
|
"neovim", "zsh", "alacritty", "tmux", "git", "opendoas",
|
|
"firejail", "apparmor", "nftables", "hardened-malloc",
|
|
"chromium", "xwayland-satellite",
|
|
"cosmic-session", "cosmic-greeter", "cosmic-files",
|
|
"cosmic-edit", "cosmic-term", "cosmic-store", "cosmic-settings",
|
|
}
|
|
|
|
for _, pkg := range expectedPackages {
|
|
found := false
|
|
for _, installedPkg := range archConfig.Packages {
|
|
if installedPkg == pkg {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
t.Errorf("Expected package '%s' in package list", pkg)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSaveConfigurationFiles(t *testing.T) {
|
|
config := &InstallConfig{
|
|
Disk: "/dev/sda",
|
|
EnableLUKS: false,
|
|
Hostname: "miasma-test",
|
|
Username: "testuser",
|
|
RootPassword: "rootpass",
|
|
UserPassword: "userpass",
|
|
Timezone: "UTC",
|
|
Locale: "en_US.UTF-8",
|
|
}
|
|
|
|
// Test saving configuration
|
|
err := config.SaveArchInstallConfig("/tmp/test_user_config.json")
|
|
if err != nil {
|
|
t.Fatalf("Failed to save user configuration: %v", err)
|
|
}
|
|
|
|
// Test saving credentials
|
|
err = config.SaveUserCredentials("/tmp/test_user_creds.json")
|
|
if err != nil {
|
|
t.Fatalf("Failed to save user credentials: %v", err)
|
|
}
|
|
|
|
// Verify the files were created
|
|
if _, err := os.Stat("/tmp/test_user_config.json"); os.IsNotExist(err) {
|
|
t.Error("User configuration file was not created")
|
|
}
|
|
|
|
if _, err := os.Stat("/tmp/test_user_creds.json"); os.IsNotExist(err) {
|
|
t.Error("User credentials file was not created")
|
|
}
|
|
|
|
// Verify the configuration file content
|
|
data, err := os.ReadFile("/tmp/test_user_config.json")
|
|
if err != nil {
|
|
t.Fatalf("Failed to read configuration file: %v", err)
|
|
}
|
|
|
|
var parsedConfig ArchInstallConfig
|
|
err = json.Unmarshal(data, &parsedConfig)
|
|
if err != nil {
|
|
t.Fatalf("Failed to parse configuration file: %v", err)
|
|
}
|
|
|
|
if parsedConfig.Hostname != "miasma-test" {
|
|
t.Errorf("Expected hostname 'miasma-test', got '%s'", parsedConfig.Hostname)
|
|
}
|
|
|
|
// Clean up test files
|
|
os.Remove("/tmp/test_user_config.json")
|
|
os.Remove("/tmp/test_user_creds.json")
|
|
} |