Beispiel #1
0
    def testMonitorEvents(self):
        devs = ({'index': '273',
                 'reportedName': 'bond0', 'name': 'bond0',
                 'flags': frozenset(['BROADCAST', 'MULTICAST', 'MASTER']),
                 'attrs': 'mtu 1500 qdisc noqueue',
                 'state': 'DOWN',
                 'address': '33:44:55:66:77:88', 'brd': 'ff:ff:ff:ff:ff:ff'},
                {'index': '4',
                 'reportedName': 'wlp3s0', 'name': 'wlp3s0',
                 'flags': frozenset(['BROADCAST', 'MULTICAST', 'UP',
                                     'LOWER_UP']),
                 'address': ''},
                {'index': '417',
                 'reportedName': 'p1p3.13@p1p3', 'name': 'p1p3.13',
                 'flags': frozenset(['NO-CARRIER', 'BROADCAST', 'MULTICAST',
                                     'UP']),
                 'attrs': 'mtu 1500 qdisc noqueue',
                 'state': 'LOWERLAYERDOWN',
                 'address': '00:10:18:e1:6c:f4',
                 'brd': 'ff:ff:ff:ff:ff:ff'},
                {'index': '418',
                 'reportedName': 'foo', 'name': 'foo',
                 'flags': frozenset(['BROADCAST', 'MULTICAST']),
                 'attrs': 'mtu 1500 qdisc noop',
                 'state': 'DOWN',
                 'extraAttrs': 'group default',
                 'address': 'ba:2c:7b:68:b8:77',
                 'brd': 'ff:ff:ff:ff:ff:ff',
                 'deleted': True})

        def entry(index, reportedName, flags, address, attrs=None,
                  state=None, extraAttrs=None, brd=None, deleted=False,
                  **kwargs):
            elements = []
            if deleted:
                elements.append(Monitor._DELETED_TEXT)
            elements += [index + ':', reportedName + ':',
                         '<' + ','.join(flags) + '>']
            if attrs is not None:
                elements.append(attrs)
            if state is not None:
                elements.append('state ' + state)
            if extraAttrs is not None:
                elements.append(extraAttrs)
            elements.append('\\   ')
            elements.append('link/ether ' + address)
            if brd is not None:
                elements.append('brd ' + brd)
            return ' '.join(elements)

        data = [entry(**dev) for dev in devs]
        events = [MonitorEvent(
            dev['index'], dev['name'], dev['flags'],
            Monitor.LINK_STATE_DELETED if dev.get('deleted') else
            dev.get('state', None)) for dev in devs]
        self.assertEqual(Monitor._parse('\n'.join(data)), events)
Beispiel #2
0
    def testMonitorIteration(self):
        bridge = tcTests._Bridge()
        tcTests._checkDependencies()
        mon = Monitor()
        mon.start()
        iterator = iter(mon)

        bridge.addDevice()  # Generate an event to avoid blocking
        iterator.next()

        bridge.delDevice()
        iterator.next()  # Generate an event to avoid blocking

        # Stop the monitor and check that eventually StopIteration is raised.
        # There might be other system link events so we loop to exhaust them.
        mon.stop()
        with self.assertRaises(StopIteration):
            while True:
                iterator.next()
Beispiel #3
0
    def testMonitorIteration(self):
        bridge = tcTests._Bridge()
        tcTests._checkDependencies()
        mon = Monitor()
        mon.start()
        iterator = iter(mon)

        bridge.addDevice()  # Generate an event to avoid blocking
        iterator.next()

        bridge.delDevice()
        iterator.next()  # Generate an event to avoid blocking

        # Stop the monitor and check that eventually StopIteration is raised.
        # There might be other system link events so we loop to exhaust them.
        mon.stop()
        with self.assertRaises(StopIteration):
            while True:
                iterator.next()
Beispiel #4
0
    def testMonitorEvents(self):
        devs = (
            {
                "index": "273",
                "reportedName": "bond0",
                "name": "bond0",
                "flags": frozenset(["BROADCAST", "MULTICAST", "MASTER"]),
                "attrs": "mtu 1500 qdisc noqueue",
                "state": "DOWN",
                "address": "33:44:55:66:77:88",
                "brd": "ff:ff:ff:ff:ff:ff",
            },
            {
                "index": "4",
                "reportedName": "wlp3s0",
                "name": "wlp3s0",
                "flags": frozenset(["BROADCAST", "MULTICAST", "UP", "LOWER_UP"]),
                "address": "",
            },
            {
                "index": "417",
                "reportedName": "p1p3.13@p1p3",
                "name": "p1p3.13",
                "flags": frozenset(["NO-CARRIER", "BROADCAST", "MULTICAST", "UP"]),
                "attrs": "mtu 1500 qdisc noqueue",
                "state": "LOWERLAYERDOWN",
                "address": "00:10:18:e1:6c:f4",
                "brd": "ff:ff:ff:ff:ff:ff",
            },
            {
                "index": "418",
                "reportedName": "foo",
                "name": "foo",
                "flags": frozenset(["BROADCAST", "MULTICAST"]),
                "attrs": "mtu 1500 qdisc noop",
                "state": "DOWN",
                "extraAttrs": "group default",
                "address": "ba:2c:7b:68:b8:77",
                "brd": "ff:ff:ff:ff:ff:ff",
                "deleted": True,
            },
        )

        def entry(
            index,
            reportedName,
            flags,
            address,
            attrs=None,
            state=None,
            extraAttrs=None,
            brd=None,
            deleted=False,
            **kwargs
        ):
            elements = []
            if deleted:
                elements.append(Monitor._DELETED_TEXT)
            elements += [index + ":", reportedName + ":", "<" + ",".join(flags) + ">"]
            if attrs is not None:
                elements.append(attrs)
            if state is not None:
                elements.append("state " + state)
            if extraAttrs is not None:
                elements.append(extraAttrs)
            elements.append("\\   ")
            elements.append("link/ether " + address)
            if brd is not None:
                elements.append("brd " + brd)
            return " ".join(elements)

        data = [entry(**dev) for dev in devs]
        events = [
            MonitorEvent(
                dev["index"],
                dev["name"],
                dev["flags"],
                Monitor.LINK_STATE_DELETED if dev.get("deleted") else dev.get("state", None),
            )
            for dev in devs
        ]
        self.assertEqual(Monitor._parse("\n".join(data)), events)
Beispiel #5
0
 def testWrongMonitorUsage(self):
     mon = Monitor()
     with self.assertRaises(MonitorError):
         for event in mon:
             pass