f-34: metadata: add metadata in dispatcher #34

Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
GnomeZworc 2026-08-24 22:19:46 +02:00
commit ae81158b2d
Signed by: nicolas.boufideline
GPG key ID: 4406BBBF8845D632
5 changed files with 221 additions and 15 deletions

90
internal/vm/data_test.go Normal file
View file

@ -0,0 +1,90 @@
package vm
import (
"testing"
"git.g3e.fr/syonad/two/pkg/db/kv"
"github.com/dgraph-io/badger/v4"
)
func newVMInDB(t *testing.T) *badger.DB {
t.Helper()
db := kv.InitDB(kv.Config{Path: t.TempDir()}, false)
t.Cleanup(func() { db.Close() })
kv.AddInDB(db, "vm/vm-1/subnet", "sn-000001")
kv.AddInDB(db, "subnet/sn-000001/vpc", "vp-admin")
kv.AddInDB(db, "subnet/sn-000001/interface_ip", "10.1.1.1")
kv.AddInDB(db, "subnet/sn-000001/dhcp/10.1.1.2", "00:22:33:00:01:02")
kv.AddInDB(db, "vm/vm-1/ip", "10.1.1.2")
kv.AddInDB(db, "vm/vm-1/metadata_port", "8081")
kv.AddInDB(db, "vm/vm-1/disk/vda", "/data/root.qcow2")
kv.AddInDB(db, "vm/vm-1/memory", "2048")
kv.AddInDB(db, "vm/vm-1/cpus", "2")
return db
}
func TestLoadVM_NoDocuments(t *testing.T) {
db := newVMInDB(t)
d, err := loadVM(db, "vm-1")
if err != nil {
t.Fatalf("loadVM : %v", err)
}
if d.documents != nil {
t.Errorf("aucun document en base, la map doit rester nil : %v", d.documents)
}
}
func TestLoadVM_ReadsDocuments(t *testing.T) {
db := newVMInDB(t)
userData := "#cloud-config\npackages:\n - nginx\n"
kv.AddInDB(db, "vm/vm-1/metadata/user-data", userData)
kv.AddInDB(db, "vm/vm-1/metadata/network-config", "version: 2\n")
d, err := loadVM(db, "vm-1")
if err != nil {
t.Fatalf("loadVM : %v", err)
}
if len(d.documents) != 2 {
t.Fatalf("2 documents attendus, obtenu %d : %v", len(d.documents), d.documents)
}
if d.documents["user-data"] != userData {
t.Errorf("user-data altéré au passage en base :\nattendu %q\nobtenu %q", userData, d.documents["user-data"])
}
if d.documents["network-config"] != "version: 2\n" {
t.Errorf("network-config inattendu : %q", d.documents["network-config"])
}
}
func TestLoadVM_DocumentKeysAreStrippedOfPrefix(t *testing.T) {
db := newVMInDB(t)
kv.AddInDB(db, "vm/vm-1/metadata/vendor-data", "v")
d, err := loadVM(db, "vm-1")
if err != nil {
t.Fatalf("loadVM : %v", err)
}
for key := range d.documents {
if key != "vendor-data" {
t.Errorf("clé de document attendue %q, obtenue %q — le préfixe doit être retiré", "vendor-data", key)
}
}
}
func TestLoadVM_EmptyDocumentIsPreserved(t *testing.T) {
db := newVMInDB(t)
kv.AddInDB(db, "vm/vm-1/metadata/user-data", "")
d, err := loadVM(db, "vm-1")
if err != nil {
t.Fatalf("loadVM : %v", err)
}
content, ok := d.documents["user-data"]
if !ok {
t.Fatal("un document vide doit survivre au passage en base : c'est une demande de ne rien servir")
}
if content != "" {
t.Errorf("contenu attendu vide, obtenu %q", content)
}
}