package libvirt import ( "bytes" "encoding/xml" "errors" "testing" "github.com/davecgh/go-spew/spew" ) func init() { spew.Config.Indent = "\t" } func TestDefaultNetworkMarshall(t *testing.T) { b := newNetworkDef() prettyB := spew.Sdump(b) t.Logf("Parsed default network:\n%s", prettyB) 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)) } t.Logf("Marshalled default network:\n%s", buf.String()) } 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) prettyB := spew.Sdump(b) t.Logf("Parsed:\n%s", prettyB) 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)) } if bs, err := xmlMarshallIndented(b); err != nil { t.Fatalf("marshalling error\n%s", spew.Sdump(b)) } else { t.Logf("Marshalled:\n%s", bs) } } 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 := defNetwork{} if net.HasDHCP() { t.Error("Expected to not have forward enabled") } } func TestHasDHCPForwardSet(t *testing.T) { createNet := func(mode string) defNetwork { return defNetwork{ Forward: &defNetworkForward{ Mode: mode, }, } } for _, mode := range []string{"nat", "route", ""} { net := createNet(mode) if !net.HasDHCP() { t.Errorf( "Expected to have forward enabled with forward set to be '%s'", mode) } } } func TestNetworkFromLibvirtError(t *testing.T) { net := LibVirtNetworkMock{ GetXMLDescError: errors.New("boom"), } _, err := newDefNetworkfromLibvirt(net) if err == nil { t.Error("Expected error") } } func TestNetworkFromLibvirtWrongResponse(t *testing.T) { net := LibVirtNetworkMock{ GetXMLDescReply: "wrong xml", } _, err := newDefNetworkfromLibvirt(net) if err == nil { t.Error("Expected error") } } func TestNetworkFromLibvirt(t *testing.T) { net := LibVirtNetworkMock{ 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) } }