Statistics
| Branch: | Tag: | Revision:

mininet / mininet / test / test_switchdpidassignment.py @ e0bf8ece

History | View | Annotate | Download (3.85 KB)

1
#!/usr/bin/env python
2

    
3
"""Package: mininet
4
   Regression tests for switch dpid assignment."""
5

    
6
import unittest
7
from functools import partial
8
import re
9

    
10
from mininet.net import Mininet
11
from mininet.node import Host, Controller
12
from mininet.node import UserSwitch, OVSSwitch, OVSLegacyKernelSwitch, IVSSwitch
13
from mininet.topo import Topo
14
from mininet.log import setLogLevel
15
from mininet.util import quietRun
16

    
17

    
18
class testSwitchDpidAssignmentCommon ( object ):
19
    """Verify Switch dpid assignment."""
20

    
21
    switchClass = None # overridden in subclasses
22

    
23
    def testDefaultDpid ( self ):
24
        """Verify that the default dpid is assigned using a valid provided
25
        canonical switchname if no dpid is passed in switch creation."""
26
        switch = Mininet( Topo(), self.switchClass, Host, Controller ).addSwitch( 's1' )
27
        self.assertEqual( switch.defaultDpid(), switch.dpid )
28

    
29
    def testActualDpidAssignment( self ):
30
        """Verify that Switch dpid is the actual dpid assigned if dpid is 
31
        passed in switch creation."""
32
        switch = Mininet( Topo(), self.switchClass, Host, Controller ).addSwitch( 'A', dpid = '000000000000ABCD' )
33
        self.assertEqual( switch.dpid, '000000000000ABCD' )
34

    
35
    def testDefaultDpidAssignmentFailure( self ):
36
        """Verify that Default dpid assignment raises an Exception if the 
37
        name of the switch does not contin a digit. Also verify the 
38
        exception message."""
39
        with self.assertRaises( Exception ) as raises_cm:
40
            Mininet( Topo(), self.switchClass, Host, Controller ).addSwitch( 'A' )
41
        self.assertEqual(raises_cm.exception.message, 'Unable to derive '
42
                         'default datapath ID - please either specify a dpid '
43
                         'or use a canonical switch name such as s23.')
44

    
45
    def testDefaultDpidLen( self ):
46
        """Verify that Default dpid length is 16 characters consisting of
47
        16 - len(hex of first string of contiguous digits passed in switch
48
        name) 0's followed by hex of first string of contiguous digits passed
49
        in switch name."""
50
        switch = Mininet( Topo(), self.switchClass, Host, Controller ).addSwitch( 's123' )
51
        dpid = hex( int(re.findall( r'\d+', switch.name ) [0]) ) [ 2: ]
52
        try:
53
            if issubclass(UserSwitch, self.switchClass):
54
                # Dpid lenght of UserSwitch = 12
55
                self.assertEqual( switch.dpid, '0' * (12 - len(dpid)) + str(dpid) )
56
            else:
57
                self.assertEqual( switch.dpid, '0' * (16 - len(dpid)) + str(dpid) )
58
        except TypeError:
59
            # Switch is OVS User Switch
60
            self.assertEqual( switch.dpid, '0' * (16 - len(dpid)) + str(dpid) )
61
            
62

    
63
class testSwitchOVSKernel( testSwitchDpidAssignmentCommon, unittest.TestCase ):
64
    """Test dpid assignnment of OVS Kernel Switch."""
65
    switchClass = OVSSwitch
66

    
67
class testSwitchOVSUser( testSwitchDpidAssignmentCommon, unittest.TestCase ):
68
    """Test dpid assignnment of OVS User Switch."""
69
    switchClass = partial(OVSSwitch, datapath = 'user')
70
    
71
@unittest.skipUnless( quietRun( 'which ovs-openflowd' ), 'OVS Legacy Kernel switch is not installed' )
72
class testSwitchOVSLegacyKernel( testSwitchDpidAssignmentCommon, unittest.TestCase ):
73
    """Test dpid assignnment of OVS Legacy Kernel Switch."""
74
    switchClass = OVSLegacyKernelSwitch
75
    
76
@unittest.skipUnless( quietRun( 'which ivs-ctl' ), 'IVS switch is not installed' )
77
class testSwitchIVS( testSwitchDpidAssignmentCommon, unittest.TestCase ):
78
    """Test dpid assignment of IVS switch."""
79
    switchClass = IVSSwitch
80

    
81
@unittest.skipUnless( quietRun( 'which ofprotocol' ), 'Reference user switch is not installed' )
82
class testSwitchUserspace( testSwitchDpidAssignmentCommon, unittest.TestCase ):
83
    """Test dpid assignment of Userspace switch."""
84
    switchClass = UserSwitch
85

    
86

    
87
if __name__ == '__main__':
88
    setLogLevel( 'warning' )
89
    unittest.main()