File: test_multiping.py

package info (click to toggle)
mininet 2.3.0-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,588 kB
  • sloc: python: 11,181; ansic: 1,332; sh: 967; makefile: 87
file content (50 lines) | stat: -rwxr-xr-x 1,889 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/env python

"""
Test for multiping.py
"""

import unittest
from mininet.util import pexpect
from collections import defaultdict

class testMultiPing( unittest.TestCase ):

    def testMultiPing( self ):
        """Verify that each target is pinged at least once, and
           that pings to 'real' targets are successful and unknown targets fail"""
        p = pexpect.spawn( 'python -m mininet.examples.multiping' )
        opts = [ "Host (h\d+) \(([\d.]+)\) will be pinging ips: ([\d\. ]+)",
                 "(h\d+): ([\d.]+) -> ([\d.]+) \d packets transmitted, (\d) received",
                 pexpect.EOF ]
        pings = defaultdict( list )
        while True:
            index = p.expect( opts )
            if index == 0:
                name = p.match.group(1)
                ip = p.match.group(2)
                targets = p.match.group(3).split()
                pings[ name ] += targets
            elif index == 1:
                name = p.match.group(1)
                ip = p.match.group(2)
                target = p.match.group(3)
                received = int( p.match.group(4) )
                if target == '10.0.0.200':
                    self.assertEqual( received, 0, p.match.group(0) + '\n' +
                                      target + ' received %d != 0 packets' % received )
                else:
                    self.assertEqual( received, 1, p.match.group(0) + '\n' +
                                      target + ' received %d != 1 packets' % received )
                try:
                    pings[ name ].remove( target )
                except:
                    pass
            else:
                break
        self.assertTrue( len( pings ) > 0, 'too few pings' )
        for t in pings.values():
            self.assertEqual( len( t ), 0, 'missed ping target(s): %s' % t )

if __name__ == '__main__':
    unittest.main()