Example #1
0
class EosIpCommand_test(unittest.TestCase):

    def setUp(self):
        self.switch = Switch()
        vlan = VLAN('vlan1', 1, None)
        self.switch.add_vlan(vlan)
        self.cmd = EosIpCommand(None, self.switch)

    def test_default_unknownCommand(self):
        argStr = 'unknown'

        result = self.cmd.onecmd(argStr)

        self.assertIn('NOTICE', result)
        self.assertIn('unknown command', result)

    def test_default_accessGroup(self):
        argStr = 'access-group'
        self.cmd._do_access_group = Mock(return_value=None)

        self.cmd.onecmd(argStr)

        self.assertEqual(1, self.cmd._do_access_group.call_count)

    def test_do_access_group_noArgument(self):

        result = self.cmd._do_access_group('')

        self.assertIn('ERROR', result)
        self.assertIn('argument', result)

    def test_do_access_group_statementOccursOutsideRouterInterfaceMode(self):

        # TO-DO Is state correctly handled?

        result = self.cmd._do_access_group('1')

        self.assertIn('ERROR', result)
        self.assertIn('router interface', result)

    def test_set_state(self):
        old_state = self.cmd._state

        self.assertNotEqual(old_state, self.cmd.set_state('interface'))

    def test_do_access_group_invalidInterface(self):

        self.cmd.set_state(('router', 'config', 'interface ge.1.1'))

        result = self.cmd._do_access_group('1')

        self.assertIn('ERROR', result)
        self.assertIn('unknown interface', result)

    def test_do_access_group_InterfaceIsLoopback(self):

        self.cmd.set_state(('router', 'config', 'interface loopback 3'))

        result = self.cmd._do_access_group('1')

        self.assertIn('ERROR', result)
        self.assertIn('ACLs', result)
        self.assertIn('loopback interface', result)

    def test_do_access_group_InterfaceVlanIdIsInvalid(self):

        self.cmd.set_state(('router', 'config', 'interface vlan 0'))

        result = self.cmd._do_access_group('1')

        self.assertIn('ERROR', result)
        self.assertIn('Illegal VLAN ID', result)

    def test_do_access_group_sequenceIsIgnored(self):

        self.cmd.set_state(('router', 'config', 'interface vlan 1'))

        result = self.cmd._do_access_group(('1', 'sequence', '1'))

        self.assertIn('WARN', result)
        self.assertIn('Ignoring', result)
        self.assertIn('sequence', result)
        self.assertIn('in', result)

    def test_do_access_group_vlanDoesNotExist(self):

        self.cmd.set_state(('router', 'config', 'interface vlan 2'))

        result = self.cmd._do_access_group('1')

        self.assertIn('ERROR', result)
        self.assertIn('exist', result)

    def test_do_access_group_invalidACLNumber(self):

        self.cmd.set_state(('router', 'config', 'interface vlan 1'))

        result = self.cmd._do_access_group('a')

        self.assertIn('NOTICE', result)
        self.assertIn('unknown command', result)

    def test_do_access_group_unsupportedDirection(self):

        self.cmd.set_state(('router', 'config', 'interface vlan 1'))

        result = self.cmd._do_access_group(('1', 'out'))

        self.assertIn('ERROR', result)
        self.assertIn('direction', result)

    #####
    #####

    def test_default_helperAddress(self):
        argStr = 'helper-address'
        self.cmd._do_helper_address = Mock(return_value=None)

        self.cmd.onecmd(argStr)

        self.assertEqual(1, self.cmd._do_helper_address.call_count)

    def test_do_helper_address_noArgument(self):

        result = self.cmd._do_helper_address('')

        self.assertIn('ERROR', result)
        self.assertIn('argument', result)

    def test_do_helper_address_excessArgument(self):
        arg_list = ['192.0.2.47', 'excess arg']

        result = self.cmd._do_helper_address(arg_list)

        self.assertIn('NOTICE', result)
        self.assertIn('unknown', result)
        self.assertIn('excess', result)

    def test_do_helper_address_statementOccursOutsideRouterInterfaceMode(self):
        arg_list = ['192.0.2.47']

        result = self.cmd._do_helper_address(arg_list)

        self.assertIn('ERROR', result)
        self.assertIn('router interface', result)

    def test_do_helper_address_unknownInterface(self):
        arg_list = ['192.0.2.47']
        self.cmd.set_state(('router', 'interface'))

        result = self.cmd._do_helper_address(arg_list)

        self.assertIn('ERROR', result)
        self.assertIn('unknown interface', result)

    def test_do_helper_address_interfaceIsLoopback(self):
        arg_list = ['192.0.2.47']
        self.cmd.set_state(('router', 'interface loopback 3'))

        result = self.cmd._do_helper_address(arg_list)

        self.assertIn('ERROR', result)
        self.assertIn('loopback interface', result)

    def test_do_helper_address_interfaceIsVLANwithIDNull(self):
        arg_list = ['192.0.2.47']
        self.cmd.set_state(('router', 'interface vlan -1'))

        result = self.cmd._do_helper_address(arg_list)

        self.assertIn('ERROR', result)
        self.assertIn('Illegal', result)
        self.assertIn('-1', result)

    def test_do_helper_address_interfaceIsVLANwithID4096(self):
        arg_list = ['192.0.2.47']
        self.cmd.set_state(('router', 'interface vlan 4096'))

        result = self.cmd._do_helper_address(arg_list)

        self.assertIn('ERROR', result)
        self.assertIn('Illegal', result)
        self.assertIn('4096', result)

    def test_do_helper_address_interfaceIsVLANNotDefinedForSwitch(self):
        arg_list = ['192.0.2.47']
        self.cmd.set_state(('router', 'interface vlan 4095'))

        result = self.cmd._do_helper_address(arg_list)

        self.assertIn('ERROR', result)
        self.assertIn('does not exist', result)
        self.assertIn('4095', result)

    def test_do_helper_address_invalidIPv4Address(self):
        arg_list = ['192.0.2.477']
        self.cmd.set_state(('router', 'interface vlan 1'))

        result = self.cmd._do_helper_address(arg_list)

        self.assertIn('ERROR', result)
        self.assertIn('invalid', result)
        self.assertIn('477', result)

    def test_do_helper_address_sucess(self):
        arg_list = ['192.0.2.47']
        self.cmd.set_state(('router', 'interface vlan 2'))
        vlan2_mock = Mock(spec=VLAN)
        vlan2_mock.get_tag.return_value = 2
        self.switch.add_vlan(vlan2_mock)

        result = self.cmd._do_helper_address(arg_list)

        self.assertEqual('', result)
        vlan2_mock.add_ipv4_helper_address.assert_called_once_with(arg_list[0])

    def test_do_address(self):
        confFragment = 'address'
        self.cmd.do_address = Mock(return_value=None)

        self.cmd.onecmd(confFragment)

        self.assertEqual(1, self.cmd.do_address.call_count)

    def test_do_address_noArgument(self):

        result = self.cmd.do_address('')

        self.assertIn('ERROR', result)
        self.assertIn('argument', result)

    def test_do_address_statementOccursOutsideRouterInterfaceMode(self):
        arg_str = '192.0.2.47'

        result = self.cmd.do_address(arg_str)

        self.assertIn('ERROR', result)
        self.assertIn('router interface', result)

    def test_do_address_argumentTooSmall(self):
        arg_str = '192.0.2.47'
        self.cmd.set_state(('router', 'interface vlan 2'))

        result = self.cmd.do_address(arg_str)

        self.assertIn('NOTICE', result)
        self.assertIn('unknown command', result)

    def test_do_address_WrongArgument(self):
        arg_str = '192.0.2.77 255.255.256.0'
        self.cmd.set_state(('router', 'interface vlan 2'))

        result = self.cmd.do_address(arg_str)

        self.assertIn('NOTICE', result)
        self.assertIn('unknown command', result)
        self.assertIn('invalid IPv4 address', result)

    def test_do_address_interfaceIsNotVLANOrLoopback(self):
        arg_str = '192.0.2.77 255.255.255.0'
        self.cmd.set_state(('router', 'interface ge.1.1 2'))

        result = self.cmd.do_address(arg_str)

        self.assertIn('ERROR', result)
        self.assertIn('unknown interface', result)

    def test_do_address_interfaceInvalidVlanId(self):
        arg_str = '192.0.2.77 255.255.255.0'
        self.cmd.set_state(('router', 'interface vlan 0'))

        result = self.cmd.do_address(arg_str)

        self.assertIn('ERROR', result)
        self.assertIn('Illegal VLAN ID', result)

    def test_do_address_interfaceInvalidLoopbackNumber(self):
        arg_str = '192.0.2.77 255.255.255.0'
        self.cmd.set_state(('router', 'interface loopback 8'))

        result = self.cmd.do_address(arg_str)

        self.assertIn('ERROR', result)
        self.assertIn('Illegal Loopback ID', result)

    def test_do_address_interfaceNotDefinedForSwitch(self):
        arg_str = '192.0.2.77 255.255.255.0'
        self.cmd.set_state(('router', 'interface loopback 2'))

        result = self.cmd.do_address(arg_str)

        self.assertIn('ERROR', result)
        self.assertIn('Interface', result)
        self.assertIn('not defined', result)

    def test_do_address_vlanOk(self):
        arg_str = '192.0.2.77 255.255.255.0'
        self.cmd.set_state(('router', 'interface vlan 1'))

        result = self.cmd.do_address(arg_str)

        self.assertEqual('', result)

    def test_do_address_loopbackOk(self):
        arg_str = '192.0.2.77 255.255.255.0'
        self.cmd.set_state(('router', 'interface loopback 0'))
        self.switch.add_loopback(0)

        result = self.cmd.do_address(arg_str)

        self.assertEqual('', result)

    #####
    #####

    def test_do_routing(self):
        confFragment = 'routing'
        self.cmd.do_routing = Mock(return_value=None)

        self.cmd.onecmd(confFragment)

        self.assertEqual(1, self.cmd.do_routing.call_count)

    def test_do_routing_unknownArg(self):

        result = self.cmd.do_routing('arg')

        self.assertIn('NOTICE', result)
        self.assertIn('Ignoring unknown', result)

    def test_do_routing_ok(self):

        result = self.cmd.do_routing('')

        self.assertEqual('', result)

    #####
    #####

    def test_do_route(self):
        confFragment = 'route'
        self.cmd.do_route = Mock(return_value=None)

        self.cmd.onecmd(confFragment)

        self.assertEqual(1, self.cmd.do_route.call_count)

    def test_do_route_noArg(self):

        result = self.cmd.do_route('')

        self.assertIn('ERROR', result)
        self.assertIn('needs argument', result)

    def test_do_route_statementOccursOutsideRouterConfigureMode(self):
        argStr = '192.0.3.0 255.255.255.0 192.0.2.77'

        result = self.cmd.do_route(argStr)

        self.assertIn('INFO', result)
        self.assertIn('outside', result)

    def test_do_route_wrongNrOfArg(self):
        argStr = '192.0.3.477 255.255.255.0'

        result = self.cmd.do_route(argStr)

        self.assertIn('NOTICE', result)
        self.assertIn('unknown', result)

    def test_do_route_wrongTypeOfArg(self):
        argStr = '192.0.a.77 255.255.255.0 192.0.2.77'

        result = self.cmd.do_route(argStr)

        self.assertIn('NOTICE', result)
        self.assertIn('unknown', result)

    def test_do_route_wrongIpAddress(self):
        argStr = '192.0.3.77 255.255.256.0 192.0.2.77'

        result = self.cmd.do_route(argStr)

        self.assertIn('NOTICE', result)
        self.assertIn('invalid', result)

    def test_do_route_ok(self):
        argStr = '192.0.3.77 255.255.255.0 192.0.2.77'
        self.cmd.set_state(('router', 'configure'))

        result = self.cmd.do_route(argStr)

        self.assertEqual('', result)