f-19: test: ajouter des test

Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
GnomeZworc 2026-03-31 20:03:52 +02:00
commit c7d20b4124
Signed by: nicolas.boufideline
GPG key ID: 4406BBBF8845D632
4 changed files with 593 additions and 0 deletions

153
pkg/db/kv/kv_test.go Normal file
View file

@ -0,0 +1,153 @@
package kv
import (
"errors"
"testing"
"github.com/dgraph-io/badger/v4"
)
// newTestDB ouvre une base BadgerDB dans un répertoire temporaire.
// La base est fermée automatiquement en fin de test.
func newTestDB(t *testing.T) *badger.DB {
t.Helper()
db := InitDB(Config{Path: t.TempDir()}, false)
t.Cleanup(func() { db.Close() })
return db
}
// --- InitDB ---
func TestInitDB_ValidPath(t *testing.T) {
db := newTestDB(t)
if db == nil {
t.Fatal("InitDB devrait retourner une DB non-nil")
}
}
func TestInitDB_InvalidPath_Panics(t *testing.T) {
defer func() {
if r := recover(); r == nil {
t.Fatal("InitDB avec un chemin invalide devrait paniquer")
}
}()
InitDB(Config{Path: "/chemin/inexistant/absolu"}, false)
}
// --- AddInDB ---
func TestAddInDB_NewKey(t *testing.T) {
db := newTestDB(t)
if err := AddInDB(db, "vpc/test", "valeur"); err != nil {
t.Fatalf("AddInDB a échoué : %v", err)
}
}
func TestAddInDB_OverwriteExistingKey(t *testing.T) {
db := newTestDB(t)
AddInDB(db, "vpc/test", "premiere")
if err := AddInDB(db, "vpc/test", "deuxieme"); err != nil {
t.Fatalf("AddInDB (écrasement) a échoué : %v", err)
}
val, _ := GetFromDB(db, "vpc/test")
if val != "deuxieme" {
t.Errorf("valeur attendue %q, obtenu %q", "deuxieme", val)
}
}
// --- GetFromDB ---
func TestGetFromDB_ExistingKey(t *testing.T) {
db := newTestDB(t)
AddInDB(db, "vpc/foo", "bar")
val, err := GetFromDB(db, "vpc/foo")
if err != nil {
t.Fatalf("GetFromDB a échoué : %v", err)
}
if val != "bar" {
t.Errorf("valeur attendue %q, obtenu %q", "bar", val)
}
}
func TestGetFromDB_MissingKey(t *testing.T) {
db := newTestDB(t)
_, err := GetFromDB(db, "inexistant")
if !errors.Is(err, badger.ErrKeyNotFound) {
t.Errorf("erreur attendue ErrKeyNotFound, obtenu : %v", err)
}
}
func TestGetFromDB_EmptyValue(t *testing.T) {
db := newTestDB(t)
AddInDB(db, "vpc/vide", "")
val, err := GetFromDB(db, "vpc/vide")
if err != nil {
t.Fatalf("GetFromDB a échoué : %v", err)
}
if val != "" {
t.Errorf("valeur attendue vide, obtenu %q", val)
}
}
// --- DeleteInDB ---
func TestDeleteInDB_SimpleKey(t *testing.T) {
db := newTestDB(t)
AddInDB(db, "vpc/a", "v")
if err := DeleteInDB(db, "vpc/a"); err != nil {
t.Fatalf("DeleteInDB a échoué : %v", err)
}
_, err := GetFromDB(db, "vpc/a")
if !errors.Is(err, badger.ErrKeyNotFound) {
t.Errorf("la clé devrait être supprimée, obtenu : %v", err)
}
}
func TestDeleteInDB_WithSubkeys(t *testing.T) {
db := newTestDB(t)
// Clé parente + sous-clés (préfixe "vpc/net1/")
AddInDB(db, "vpc/net1", "parent")
AddInDB(db, "vpc/net1/ip", "10.0.0.1")
AddInDB(db, "vpc/net1/gw", "10.0.0.254")
if err := DeleteInDB(db, "vpc/net1"); err != nil {
t.Fatalf("DeleteInDB a échoué : %v", err)
}
for _, key := range []string{"vpc/net1", "vpc/net1/ip", "vpc/net1/gw"} {
_, err := GetFromDB(db, key)
if !errors.Is(err, badger.ErrKeyNotFound) {
t.Errorf("clé %q devrait être supprimée, obtenu : %v", key, err)
}
}
}
func TestDeleteInDB_DoesNotDeleteSiblings(t *testing.T) {
db := newTestDB(t)
AddInDB(db, "vpc/net1", "a")
AddInDB(db, "vpc/net2", "b") // ne doit pas être supprimée
DeleteInDB(db, "vpc/net1")
val, err := GetFromDB(db, "vpc/net2")
if err != nil {
t.Fatalf("vpc/net2 ne devrait pas être supprimée : %v", err)
}
if val != "b" {
t.Errorf("valeur attendue %q, obtenu %q", "b", val)
}
}
func TestDeleteInDB_MissingKey(t *testing.T) {
db := newTestDB(t)
// Supprimer une clé inexistante ne doit pas crasher
if err := DeleteInDB(db, "inexistant"); err != nil {
t.Logf("DeleteInDB clé inexistante retourne : %v (non bloquant)", err)
}
}