package libvirt import ( "bytes" "encoding/xml" "errors" "testing" "github.com/davecgh/go-spew/spew" "github.com/libvirt/libvirt-go-xml" ) func init() { spew.Config.Indent = "\t" } func TestDefaultNetworkMarshall(t *testing.T) { b := newNetworkDef() buf := new(bytes.Buffer) enc := xml.NewEncoder(buf) enc.Indent(" ", " ") if err := enc.Encode(b); err != nil { t.Fatalf("could not marshall this:\n%s", spew.Sdump(b)) } } func TestNetworkDefUnmarshall(t *testing.T) { // some testing XML from the official docs (some unsupported attrs will be just ignored) text := ` my-network
myhost myhostalias ` b, err := newDefNetworkFromXML(text) if err != nil { t.Errorf("could not parse: %s", err) } if b.Name != "my-network" { t.Errorf("wrong network name: '%s'", b.Name) } if b.Domain.Name != "example.com" { t.Errorf("wrong domain name: '%s'", b.Domain.Name) } if b.Forward.Mode != "nat" { t.Errorf("wrong forward mode: '%s'", b.Forward.Mode) } if len(b.Forward.NAT.Addresses) == 0 { t.Errorf("wrong number of addresses: %s", b.Forward.NAT.Addresses) } if b.Forward.NAT.Addresses[0].Start != "1.2.3.4" { t.Errorf("wrong forward start address: %s", b.Forward.NAT.Addresses[0].Start) } if len(b.IPs) == 0 { t.Errorf("wrong number of IPs: %d", len(b.IPs)) } _, err2 := xmlMarshallIndented(b) if err2 != nil { t.Fatalf("marshalling error\n%s", spew.Sdump(b)) } } func TestBrokenNetworkDefUnmarshall(t *testing.T) { // Try unmarshalling some broken xml text := ` ` _, err := newDefNetworkFromXML(text) if err == nil { t.Error("Unmarshal was supposed to fail") } } func TestHasDHCPNoForwardSet(t *testing.T) { net := libvirtxml.Network{} if HasDHCP(net) { t.Error("Expected to not have forward enabled") } } func TestHasDHCPForwardSet(t *testing.T) { createNet := func(mode string) libvirtxml.Network { return libvirtxml.Network{ Forward: &libvirtxml.NetworkForward{ Mode: mode, }, } } for _, mode := range []string{"nat", "route", ""} { net := createNet(mode) if !HasDHCP(net) { t.Errorf( "Expected to have forward enabled with forward set to be '%s'", mode) } } } func TestNetworkFromLibvirtError(t *testing.T) { net := NetworkMock{ GetXMLDescError: errors.New("boom"), } _, err := newDefNetworkfromLibvirt(net) if err == nil { t.Error("Expected error") } } func TestNetworkFromLibvirtWrongResponse(t *testing.T) { net := NetworkMock{ GetXMLDescReply: "wrong xml", } _, err := newDefNetworkfromLibvirt(net) if err == nil { t.Error("Expected error") } } func TestNetworkFromLibvirt(t *testing.T) { net := NetworkMock{ GetXMLDescReply: ` default `, } dn, err := newDefNetworkfromLibvirt(net) if err != nil { t.Errorf("Unexpected error %v", err) } if dn.Forward.Mode != "nat" { t.Errorf("Wrong forward mode: %s", dn.Forward.Mode) } }