def setUp(self):
     super(OmniSwitchRestfulDriverUnitTestClass, self).setUp()
     self.restful_driver = OmniSwitchRestfulDriverTestClass('127.0.0.1',
                                                            omni_const.OMNISWITCH_6XX, 'admin', 'switch', '->')
class OmniSwitchRestfulDriverUnitTestClass(unittest.TestCase):
    """Name:        OmniSwitchRestfulDriverUnitTestClass
    Description: OmniSwitchRestfulDriverUnitTestClass contains all unittest code for OmniSwitchRestfulDriver
                 (omniswitch_restful_driver.py module)
    Details:     unittest and Mock are used for implementing unittest for OmniSwitchRestfulDriverUnitTestClass.
                 xmlrunner module is used to for generating test repport
                 To run all test cases in this file, type 'python omniswitch_restful_driver.py'
    """

    def setUp(self):
        super(OmniSwitchRestfulDriverUnitTestClass, self).setUp()
        self.restful_driver = OmniSwitchRestfulDriverTestClass('127.0.0.1',
                                                               omni_const.OMNISWITCH_6XX, 'admin', 'switch', '->')

    def __assert_equal(self, expected_objects):
        actual_objects = self.restful_driver.get_objects()
        self.assertEqual(actual_objects, expected_objects)

    def test_create_vpa(self):
        # vlan_id = 1; slotport = 1/2
        vlan_id = 1
        slotport = '1/2'
        self.restful_driver.clean_objects()
        self.restful_driver.create_vpa(vlan_id, slotport)
        self.__assert_equal([{'mibObject0': 'vpaIfIndex:1002',
                              'mibObject1': 'vpaVlanNumber:1', 'mibObject2': 'vpaType:2'}])

    def test_delete_vpa(self):
        # vlan_id = 1; slotport = 1/2
        vlan_id = 1
        slotport = '1/2'
        self.restful_driver.clean_objects()
        self.restful_driver.delete_vpa(vlan_id, slotport)
        self.__assert_equal([{'mibObject0': 'vpaIfIndex:1002', 'mibObject1': 'vpaVlanNumber:1'}])

    def test_create_vlan(self):
        vlan_id = 1
        net_name = 'OpenStack'
        self.restful_driver.clean_objects()
        self.restful_driver.create_vlan(vlan_id, net_name)
        self.__assert_equal([{'mibObject0': 'vlanNumber:1', 'mibObject1': 'vlanDescription:OpenStack'}])

    def test_update_vlan(self):
        # test_create_vlan
        # update_vlan method delegates its work to create_vlan method. no need to test twice
        self.skipTest('update_vlan method delegates its work to create_vlan method. no need to test twice')

    def test_delete_vlan(self):
        vlan_id = 1
        self.restful_driver.clean_objects()
        self.restful_driver.delete_vlan(vlan_id)
        self.__assert_equal([{'mibObject0': 'vlanNumber:1'}])

    def test_enable_stp_mode_flat(self):
        self.restful_driver.clean_objects()
        self.restful_driver.enable_stp_mode_flat()
        self.__assert_equal([{'mibObject0': 'vStpBridgeMode:1'}])

    def test_disable_stp_mode_flat(self):
        self.restful_driver.clean_objects()
        self.restful_driver.disable_stp_mode_flat()
        self.__assert_equal([{'mibObject0': 'vStpBridgeMode:2'}])

    def test_create_network(self):
        # OMNISWITCH_8XX
        self.restful_driver.set_switch_type(omni_const.OMNISWITCH_8XX)
        vlan_id = 1
        net_name = 'OpenStack'
        self.restful_driver.clean_objects()
        self.restful_driver.create_network(vlan_id, net_name)
        self.__assert_equal([{'mibObject0': 'vlanNumber:1', 'mibObject1': 'vlanDescription:OpenStack'}])

    def test_update_network(self):
        # test_create_vlan
        # update_network method delegates its work to create_vlan method. no need to test twice
        self.skipTest('update_network method delegates its work to create_vlan method. no need to test twice')

    def test_delete_network(self):
        # OMNISWITCH_8XX
        self.restful_driver.set_switch_type(omni_const.OMNISWITCH_8XX)
        vlan_id = 1
        self.restful_driver.clean_objects()
        self.restful_driver.delete_network(vlan_id)
        self.__assert_equal([{'mibObject0': 'vlanNumber:1'}])