~ubuntu-branches/ubuntu/natty/landscape-client/natty-updates

« back to all changes in this revision

Viewing changes to landscape/lib/tests/test_network.py

  • Committer: Bazaar Package Importer
  • Author(s): Free Ekanayaka
  • Date: 2010-06-28 18:07:18 UTC
  • mfrom: (1.1.17 upstream)
  • Revision ID: james.westby@ubuntu.com-20100628180718-jkuv4n8rbpkddxjk
Tags: 1.5.2.1-0ubuntu0.10.10.0
* Include maverick in debian/rules substvars (LP: #596062)
* Filter duplicate network interfaces in get_active_interfaces (LP: #597000)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import array
1
2
from cStringIO import StringIO
 
3
import socket
2
4
from subprocess import Popen, PIPE
3
5
from landscape.tests.helpers import LandscapeTest
4
6
 
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
7
10
 
8
11
 
9
12
class NetworkInfoTest(LandscapeTest):
39
42
            if flags & 4096:
40
43
                self.assertIn("MULTICAST", block)
41
44
 
 
45
    def test_duplicate_network_interfaces(self):
 
46
        """
 
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.
 
50
        """
 
51
        import landscape.lib.network
 
52
        original_struct_size = landscape.lib.network.IF_STRUCT_SIZE
 
53
        landscape.lib.network.IF_STRUCT_SIZE = 40
 
54
        self.addCleanup(
 
55
            setattr, landscape.lib.network, "IF_STRUCT_SIZE",
 
56
            original_struct_size)
 
57
        # This is a fake response observed to return the same interface several
 
58
        # times (here, br1:priv)
 
59
        response = (
 
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"
 
74
            "\x00\xac\x13\x02A")
 
75
 
 
76
        fake_array = array.array("B", response + "\0" * 4855)
 
77
        mock_array = self.mocker.replace("array.array")
 
78
        mock_array("B", ANY)
 
79
        self.mocker.result(fake_array)
 
80
 
 
81
        mock_ioctl = self.mocker.replace("fcntl.ioctl")
 
82
        mock_ioctl(ANY, ANY, ANY)
 
83
        self.mocker.result(0)
 
84
 
 
85
        mock_unpack = self.mocker.replace("struct.unpack")
 
86
        mock_unpack("iL", ANY)
 
87
        self.mocker.result((280, 38643456))
 
88
        self.mocker.replay()
 
89
 
 
90
        sock = socket.socket(
 
91
            socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_IP)
 
92
        self.assertEqual(
 
93
            ["lo", "eth1:pub", "br1:metadata", "br1:0", "br1", "br1:priv"],
 
94
            list(get_active_interfaces(sock)))
 
95
 
42
96
    def test_get_network_traffic(self):
43
97
        """
44
98
        Network traffic is assessed via reading /proc/net/dev, verify