@@ -868,3 +868,80 @@ func TestDomainDeviceListFromXMLPreservesDiskOrderByTargetDev(t *testing.T) {
868868 t .Fatalf ("unexpected second disk volume: %s/%s" , secondVolume .Pool .ValueString (), secondVolume .Volume .ValueString ())
869869 }
870870}
871+
872+ func TestDomainSerialFromXMLPreservesPlannedAliasWhenXMLAliasIsOmitted (t * testing.T ) {
873+ ctx := context .Background ()
874+
875+ alias := DomainAliasModel {
876+ Name : types .StringValue ("serial0" ),
877+ }
878+ aliasObject , diags := types .ObjectValueFrom (ctx , DomainAliasAttributeTypes (), alias )
879+ if diags .HasError () {
880+ t .Fatalf ("alias ObjectValueFrom failed: %s" , diags .Errors ()[0 ].Summary ())
881+ }
882+
883+ plan := & DomainSerialModel {
884+ Source : types .ObjectNull (DomainChardevSourceAttributeTypes ()),
885+ Protocol : types .ObjectNull (DomainChardevProtocolAttributeTypes ()),
886+ Target : types .ObjectNull (DomainSerialTargetAttributeTypes ()),
887+ Log : types .ObjectNull (DomainChardevLogAttributeTypes ()),
888+ ACPI : types .ObjectNull (DomainDeviceACPIAttributeTypes ()),
889+ Alias : aliasObject ,
890+ Address : types .ObjectNull (DomainAddressAttributeTypes ()),
891+ }
892+
893+ model , err := DomainSerialFromXML (ctx , & libvirtxml.DomainSerial {}, plan )
894+ if err != nil {
895+ t .Fatalf ("DomainSerialFromXML failed: %v" , err )
896+ }
897+ if model .Alias .IsNull () {
898+ t .Fatal ("Alias should be preserved when planned and omitted from XML" )
899+ }
900+
901+ var got DomainAliasModel
902+ if diags := model .Alias .As (ctx , & got , basetypes.ObjectAsOptions {}); diags .HasError () {
903+ t .Fatalf ("alias As failed: %s" , diags .Errors ()[0 ].Summary ())
904+ }
905+ if got .Name .IsNull () || got .Name .ValueString () != "serial0" {
906+ t .Fatalf ("expected alias name serial0, got %v" , got .Name )
907+ }
908+ }
909+
910+ func TestDomainConsoleFromXMLPreservesPlannedAliasWhenXMLAliasIsOmitted (t * testing.T ) {
911+ ctx := context .Background ()
912+
913+ alias := DomainAliasModel {
914+ Name : types .StringValue ("serial0" ),
915+ }
916+ aliasObject , diags := types .ObjectValueFrom (ctx , DomainAliasAttributeTypes (), alias )
917+ if diags .HasError () {
918+ t .Fatalf ("alias ObjectValueFrom failed: %s" , diags .Errors ()[0 ].Summary ())
919+ }
920+
921+ plan := & DomainConsoleModel {
922+ TTY : types .StringNull (),
923+ Source : types .ObjectNull (DomainChardevSourceAttributeTypes ()),
924+ Protocol : types .ObjectNull (DomainChardevProtocolAttributeTypes ()),
925+ Target : types .ObjectNull (DomainConsoleTargetAttributeTypes ()),
926+ Log : types .ObjectNull (DomainChardevLogAttributeTypes ()),
927+ ACPI : types .ObjectNull (DomainDeviceACPIAttributeTypes ()),
928+ Alias : aliasObject ,
929+ Address : types .ObjectNull (DomainAddressAttributeTypes ()),
930+ }
931+
932+ model , err := DomainConsoleFromXML (ctx , & libvirtxml.DomainConsole {}, plan )
933+ if err != nil {
934+ t .Fatalf ("DomainConsoleFromXML failed: %v" , err )
935+ }
936+ if model .Alias .IsNull () {
937+ t .Fatal ("Alias should be preserved when planned and omitted from XML" )
938+ }
939+
940+ var got DomainAliasModel
941+ if diags := model .Alias .As (ctx , & got , basetypes.ObjectAsOptions {}); diags .HasError () {
942+ t .Fatalf ("alias As failed: %s" , diags .Errors ()[0 ].Summary ())
943+ }
944+ if got .Name .IsNull () || got .Name .ValueString () != "serial0" {
945+ t .Fatalf ("expected alias name serial0, got %v" , got .Name )
946+ }
947+ }
0 commit comments