@@ -618,3 +618,54 @@ path = "/usr/bin/mon"
618618 assert .Equal (t , defaultMonitorsConfig (), config .Monitors )
619619 })
620620}
621+
622+ func TestParseUruncConfigBytes (t * testing.T ) {
623+ t .Run ("valid toml bytes" , func (t * testing.T ) {
624+ t .Parallel ()
625+ data := []byte (`
626+ [log]
627+ level = "debug"
628+ syslog = true
629+
630+ [monitors.qemu]
631+ default_memory_mb = 512
632+ default_vcpus = 2
633+ ` )
634+ config , err := ParseUruncConfigBytes (data )
635+ assert .NoError (t , err )
636+ assert .Equal (t , "debug" , config .Log .Level )
637+ assert .True (t , config .Log .Syslog )
638+ assert .Equal (t , uint (512 ), config .Monitors ["qemu" ].DefaultMemoryMB )
639+ })
640+
641+ t .Run ("invalid toml bytes returns default config and error" , func (t * testing.T ) {
642+ t .Parallel ()
643+ data := []byte (`invalid toml [syntax` )
644+ config , err := ParseUruncConfigBytes (data )
645+ assert .Error (t , err )
646+ assert .NotNil (t , config )
647+ assert .Equal (t , defaultMonitorsConfig (), config .Monitors )
648+ })
649+ }
650+
651+ func FuzzLoadUruncConfig (f * testing.F ) {
652+ // Seed corpus with valid TOML configurations and edge cases
653+ f .Add ([]byte ("" ))
654+ f .Add ([]byte ("[log]\n level = \" debug\" \n syslog = true\n " ))
655+ f .Add ([]byte ("[monitors.qemu]\n default_memory_mb = 512\n default_vcpus = 2\n path = \" /usr/bin/qemu\" \n " ))
656+ f .Add ([]byte ("[extra_binaries.virtiofsd]\n path = \" /usr/libexec/virtiofsd\" \n options = \" --cache always\" \n " ))
657+ f .Add ([]byte ("[monitors.custom]\n default_memory_mb = 0\n default_vcpus = 0\n " ))
658+
659+ f .Fuzz (func (t * testing.T , data []byte ) {
660+ cfg , err := ParseUruncConfigBytes (data )
661+ if err != nil {
662+ if cfg == nil {
663+ t .Fatalf ("ParseUruncConfigBytes returned nil config on error" )
664+ }
665+ return
666+ }
667+ // Invariant: parsed config must produce valid map representation without panics
668+ _ = cfg .Map ()
669+ })
670+ }
671+
0 commit comments