1
2
from cStringIO import StringIO
2
4
from subprocess import Popen, PIPE
3
5
from landscape.tests.helpers import LandscapeTest
5
7
from landscape.lib.network import (
6
get_network_traffic, get_active_device_info)
8
get_network_traffic, get_active_device_info, get_active_interfaces)
9
from landscape.tests.mocker import ANY
9
12
class NetworkInfoTest(LandscapeTest):
40
43
self.assertIn("MULTICAST", block)
45
def test_duplicate_network_interfaces(self):
47
L{get_active_interfaces} doesn't return duplicate network interfaces.
48
The call to C{fcntl.ioctl} might return the same interface several
49
times, so we make sure to clean it up.
51
import landscape.lib.network
52
original_struct_size = landscape.lib.network.IF_STRUCT_SIZE
53
landscape.lib.network.IF_STRUCT_SIZE = 40
55
setattr, landscape.lib.network, "IF_STRUCT_SIZE",
57
# This is a fake response observed to return the same interface several
58
# times (here, br1:priv)
60
"lo\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"
61
"\x00\x00\x00\x7f\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"
62
"\x00\x00\x00\x00\x00\x00\x00eth1:pub\x00\x00\x00\x00\x00\x00\x00"
63
"\x00\x02\x00\x00\x00\xc8\xb4\xc4.\x00\x00\x00\x00\x00\x00\x00\x00"
64
"\x00\x00\x00\x00\x00\x00\x00\x00br1:metadata\x00\x00\x00\x00\x02"
65
"\x00\x00\x00\xa9\xfe\xa9\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00"
66
"\x00\x00\x00\x00\x00\x00\x00br1:0\x00\x00\x00\x00\x00\x00\x00\x00"
67
"\x00\x00\x00\x02\x00\x00\x00\xc9\x19\x1f\x1d\x00\x00\x00\x00\x00"
68
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00br1\x00\x00\x00\x00"
69
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xc0\xa8d"
70
"\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
71
"\x00br1:priv\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\xac"
72
"\x13\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
73
"\x00\x00\x00br1:priv\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00"
76
fake_array = array.array("B", response + "\0" * 4855)
77
mock_array = self.mocker.replace("array.array")
79
self.mocker.result(fake_array)
81
mock_ioctl = self.mocker.replace("fcntl.ioctl")
82
mock_ioctl(ANY, ANY, ANY)
85
mock_unpack = self.mocker.replace("struct.unpack")
86
mock_unpack("iL", ANY)
87
self.mocker.result((280, 38643456))
91
socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_IP)
93
["lo", "eth1:pub", "br1:metadata", "br1:0", "br1", "br1:priv"],
94
list(get_active_interfaces(sock)))
42
96
def test_get_network_traffic(self):
44
98
Network traffic is assessed via reading /proc/net/dev, verify