nip/tests/test_variant_database.nim

125 lines
3.2 KiB
Nim

## test_variant_database.nim
## Tests for variant database operations
import std/[unittest, tables, times, os]
import ../src/nimpak/variant_database
import ../src/nimpak/variant_types
suite "Variant Database Operations":
setup:
# Create temporary test database
let testDbPath = "/tmp/test_variant_db_" & $epochTime().int
let db = newVariantDatabase(testDbPath)
teardown:
# Clean up test database
try:
removeDir(testDbPath)
except:
discard
test "Create and save variant record":
var domains = initTable[string, seq[string]]()
domains["init"] = @["dinit"]
domains["graphics"] = @["wayland", "vulkan"]
let toolchain = newToolchainInfo("gcc", "13.2.0")
let target = newTargetInfo("x86_64", "linux")
let success = db.createVariantRecord(
"blake2b-abc123def456",
"firefox",
"118.0",
domains,
"/Programs/firefox/118.0-abc123def456",
toolchain,
target
)
check success == true
check db.countVariants() == 1
check db.hasVariant("blake2b-abc123def456")
test "Query variant by fingerprint":
var domains = initTable[string, seq[string]]()
domains["init"] = @["systemd"]
let toolchain = newToolchainInfo("clang", "16.0.0")
let target = newTargetInfo("aarch64", "linux")
discard db.createVariantRecord(
"blake2b-xyz789abc012",
"vim",
"9.0.2",
domains,
"/Programs/vim/9.0.2-xyz789abc012",
toolchain,
target
)
let result = db.queryVariantByFingerprint("blake2b-xyz789abc012")
check result.found == true
check result.record.packageName == "vim"
check result.record.version == "9.0.2"
check result.record.fingerprint == "blake2b-xyz789abc012"
check result.record.toolchain.name == "clang"
check result.record.target.arch == "aarch64"
test "Delete variant record":
var domains = initTable[string, seq[string]]()
domains["init"] = @["dinit"]
let toolchain = newToolchainInfo("gcc", "13.2.0")
let target = newTargetInfo("x86_64", "linux")
discard db.createVariantRecord(
"blake2b-delete001",
"htop",
"3.2.2",
domains,
"/Programs/htop/3.2.2-delete001",
toolchain,
target
)
check db.hasVariant("blake2b-delete001") == true
let deleted = db.deleteVariantRecord("blake2b-delete001")
check deleted == true
check db.hasVariant("blake2b-delete001") == false
test "Persistence - save and load":
var domains = initTable[string, seq[string]]()
domains["init"] = @["dinit"]
domains["graphics"] = @["wayland"]
let toolchain = newToolchainInfo("gcc", "13.2.0")
let target = newTargetInfo("x86_64", "linux")
discard db.createVariantRecord(
"blake2b-persist001",
"firefox",
"118.0",
domains,
"/Programs/firefox/118.0-persist001",
toolchain,
target
)
# Create a new database instance and load
let db2 = newVariantDatabase(db.dbPath)
db2.loadVariants()
check db2.countVariants() == 1
check db2.hasVariant("blake2b-persist001")
let result = db2.queryVariantByFingerprint("blake2b-persist001")
check result.found == true
check result.record.packageName == "firefox"
when isMainModule:
echo "Running variant database tests..."