nip/tests/test_variant_manager.nim

107 lines
2.8 KiB
Nim

## test_variant_manager.nim
## Tests for variant manager orchestration
import std/[unittest, tables, os, times, strutils]
import ../src/nimpak/variant_manager
import ../src/nimpak/variant_types
import ../src/nimpak/variant_profiles
import ../src/nimpak/config
suite "Variant Manager":
setup:
# Create temporary test database
let testDbPath = "/tmp/test_variant_mgr_" & $epochTime().int
let vm = newVariantManager(testDbPath)
teardown:
# Clean up test database
try:
removeDir(testDbPath)
except:
discard
test "Create variant with domain flags":
var domains = initTable[string, seq[string]]()
domains["init"] = @["dinit"]
domains["graphics"] = @["wayland"] # Exclusive domain - only one value
domains["security"] = @["pie", "relro"] # Non-exclusive - multiple values OK
let compilerFlags = CompilerFlags(
cflags: "-O3",
ldflags: "-Wl,-O1",
makeflags: "-j8"
)
let result = vm.createVariant(
"firefox",
"118.0",
domains,
compilerFlags
)
if not result.success:
echo "Error: ", result.error
check result.success == true
check result.fingerprint.packageName == "firefox"
check result.fingerprint.version == "118.0"
check result.fingerprint.hash.len > 0
test "Create variant from profile":
var profile = newVariantProfile("test-profile", "Test profile")
profile.domains["init"] = @["systemd"]
profile.domains["graphics"] = @["X"]
profile.compilerFlags.cflags = "-O2"
let result = vm.createVariantFromProfile(
"vim",
"9.0.2",
profile
)
check result.success == true
check result.fingerprint.packageName == "vim"
test "List variants for package":
var domains = initTable[string, seq[string]]()
domains["init"] = @["dinit"]
let compilerFlags = CompilerFlags()
discard vm.createVariant("htop", "3.2.2", domains, compilerFlags)
discard vm.createVariant("htop", "3.2.3", domains, compilerFlags)
let variants = vm.listVariants("htop")
check variants.len == 2
test "Calculate variant ID without creating":
var domains = initTable[string, seq[string]]()
domains["init"] = @["dinit"]
domains["graphics"] = @["wayland"]
let compilerFlags = CompilerFlags(cflags: "-O3")
let fingerprint = vm.calculateVariantId(
"git",
"2.41.0",
domains,
compilerFlags
)
check fingerprint.len > 0
check fingerprint.startsWith("blake2b-")
test "Validate domain flags":
var validDomains = initTable[string, seq[string]]()
validDomains["init"] = @["dinit"]
validDomains["graphics"] = @["wayland"]
let validation = vm.validateFlags(validDomains)
check validation.isOk == true
when isMainModule:
echo "Running variant manager tests..."