summaryrefslogtreecommitdiff
path: root/libvirt/qemu_agent_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'libvirt/qemu_agent_test.go')
-rw-r--r--libvirt/qemu_agent_test.go196
1 files changed, 196 insertions, 0 deletions
diff --git a/libvirt/qemu_agent_test.go b/libvirt/qemu_agent_test.go
new file mode 100644
index 00000000..095af723
--- /dev/null
+++ b/libvirt/qemu_agent_test.go
@@ -0,0 +1,196 @@
+package libvirt
+
+import (
+ "encoding/json"
+ "testing"
+
+ libvirt "github.com/dmacvicar/libvirt-go"
+)
+
+func TestGetDomainInterfacesViaQemuAgentInvalidResponse(t *testing.T) {
+ domain := LibVirtDomainMock{}
+
+ interfaces := getDomainInterfacesViaQemuAgent(domain, false)
+
+ if len(interfaces) != 0 {
+ t.Errorf("wrong number of interfaces: %d instead of 0", len(interfaces))
+ }
+}
+
+func TestGetDomainInterfacesViaQemuAgentNoInterfaces(t *testing.T) {
+
+ response := QemuAgentInterfacesResponse{
+ Interfaces: []QemuAgentInterface{}}
+ data, err := json.Marshal(response)
+ if err != nil {
+ t.Errorf("error: %v", err)
+ }
+ domain := LibVirtDomainMock{
+ QemuAgentCommandResponse: string(data),
+ }
+
+ interfaces := getDomainInterfacesViaQemuAgent(domain, false)
+ if len(interfaces) != 0 {
+ t.Errorf("wrong number of interfaces: %d instead of 0", len(interfaces))
+ }
+}
+
+func TestGetDomainInterfacesViaQemuAgentIgnoreLoopbackDevice(t *testing.T) {
+ response := QemuAgentInterfacesResponse{
+ Interfaces: []QemuAgentInterface{
+ QemuAgentInterface{
+ Name: "lo",
+ Hwaddr: "ho:me",
+ IpAddresses: []QemuAgentInterfaceIpAddress{
+ QemuAgentInterfaceIpAddress{
+ Type: "ipv4",
+ Address: "127.0.0.1",
+ Prefix: 1,
+ },
+ },
+ },
+ },
+ }
+ data, err := json.Marshal(response)
+ if err != nil {
+ t.Errorf("error: %v", err)
+ }
+ domain := LibVirtDomainMock{
+ QemuAgentCommandResponse: string(data),
+ }
+
+ interfaces := getDomainInterfacesViaQemuAgent(domain, false)
+
+ if len(interfaces) != 0 {
+ t.Errorf("wrong number of interfaces)")
+ }
+}
+
+func TestGetDomainInterfacesViaQemuAgentIgnoreDevicesWithoutAddress(t *testing.T) {
+ response := QemuAgentInterfacesResponse{
+ Interfaces: []QemuAgentInterface{
+ QemuAgentInterface{
+ Name: "eth1",
+ Hwaddr: "xy:yy:zz",
+ IpAddresses: []QemuAgentInterfaceIpAddress{
+ QemuAgentInterfaceIpAddress{
+ Type: "ipv4",
+ Address: "",
+ Prefix: 1,
+ },
+ },
+ },
+ },
+ }
+ data, err := json.Marshal(response)
+ if err != nil {
+ t.Errorf("error: %v", err)
+ }
+ domain := LibVirtDomainMock{
+ QemuAgentCommandResponse: string(data),
+ }
+
+ interfaces := getDomainInterfacesViaQemuAgent(domain, false)
+
+ if len(interfaces) != 0 {
+ t.Errorf("wrong number of interfaces")
+ }
+}
+
+func TestGetDomainInterfacesViaQemuAgentUnknownIpAddressType(t *testing.T) {
+ response := QemuAgentInterfacesResponse{
+ Interfaces: []QemuAgentInterface{
+ QemuAgentInterface{
+ Name: "eth2",
+ Hwaddr: "zy:yy:zz",
+ IpAddresses: []QemuAgentInterfaceIpAddress{
+ QemuAgentInterfaceIpAddress{
+ Type: "ipv8",
+ Address: "i don't exist",
+ Prefix: 1,
+ },
+ },
+ },
+ },
+ }
+ data, err := json.Marshal(response)
+ if err != nil {
+ t.Errorf("error: %v", err)
+ }
+ domain := LibVirtDomainMock{
+ QemuAgentCommandResponse: string(data),
+ }
+
+ interfaces := getDomainInterfacesViaQemuAgent(domain, false)
+
+ if len(interfaces) != 0 {
+ t.Errorf("wrong number of interfaces: %d instead of 1", len(interfaces))
+ }
+}
+
+func TestGetDomainInterfacesViaQemuAgent(t *testing.T) {
+ device := "eth0"
+ mac := "xx:yy:zz"
+ ipv4Addr := "192.168.1.1"
+ ipv6Addr := "2001:0db8:0000:0000:0000:ff00:0042:8329"
+
+ response := QemuAgentInterfacesResponse{
+ Interfaces: []QemuAgentInterface{
+ QemuAgentInterface{
+ Name: device,
+ Hwaddr: mac,
+ IpAddresses: []QemuAgentInterfaceIpAddress{
+ QemuAgentInterfaceIpAddress{
+ Type: "ipv4",
+ Address: ipv4Addr,
+ Prefix: 1,
+ },
+ QemuAgentInterfaceIpAddress{
+ Type: "ipv6",
+ Address: ipv6Addr,
+ Prefix: 1,
+ },
+ },
+ },
+ },
+ }
+ data, err := json.Marshal(response)
+ if err != nil {
+ t.Errorf("error: %v", err)
+ }
+ domain := LibVirtDomainMock{
+ QemuAgentCommandResponse: string(data),
+ }
+
+ interfaces := getDomainInterfacesViaQemuAgent(domain, false)
+
+ if len(interfaces) != 1 {
+ t.Errorf("wrong number of interfaces: %d instead of 1", len(interfaces))
+ }
+
+ if interfaces[0].Name != device {
+ t.Errorf("wrong interface name: %s", interfaces[0].Name)
+ }
+
+ if interfaces[0].Hwaddr != mac {
+ t.Errorf("wrong interface name: %s", interfaces[0].Hwaddr)
+ }
+
+ if len(interfaces[0].Addrs) != 2 {
+ t.Errorf("wrong number of addresses: %d", len(interfaces[0].Addrs))
+ }
+
+ for _, addr := range interfaces[0].Addrs {
+ var expected string
+
+ if addr.Type == libvirt.VIR_IP_ADDR_TYPE_IPV4 {
+ expected = ipv4Addr
+ } else {
+ expected = ipv6Addr
+ }
+
+ if expected != addr.Addr {
+ t.Errorf("Expected %s, got %s", expected, addr.Addr)
+ }
+ }
+}