示例#1
0
class TestMaxAttempts(unittest.TestCase):
    def setUp(self):
        self.md = MockDeviceTcpWrapperIOS(port=0, state='enable')
        self.md.mockdevice = NetworkCopyFailMockDevice(state='enable')
        self.md.start()
        self.dev = Connection(
            hostname='Router',
            start=['telnet 127.0.0.1 {}'.format(self.md.ports[0])],
            os='ios')
        self.dev.connect()

    @patch.object(unicon.settings.Settings, 'POST_DISCONNECT_WAIT_SEC', 0)
    @patch.object(unicon.settings.Settings, 'GRACEFUL_DISCONNECT_WAIT_SEC', 0)
    def tearDown(self):
        self.md.stop()
        self.dev.disconnect()

    def test_raise_bad_nw_exception(self):
        with self.assertRaisesRegex(SubCommandFailure, 'CopyBadNetworkError'):
            self.dev.copy(source='tftp:',
                          source_file='/tftpboot/mdear/n7k.gbin',
                          dest='bootflash:',
                          vrf='management',
                          server='10.1.0.207')

    def test_max_attempt(self):
        self.dev.copy(source='tftp:',
                      source_file='/tftpboot/mdear/n7k.gbin',
                      dest='bootflash:',
                      vrf='management',
                      server='10.1.0.207',
                      max_attempts=3)
    def setUp(self):
        self.md = MockDeviceTcpWrapperIOS(port=0, state='login,exec_standby')
        self.md.start()

        self.testbed = """
        devices:
          Router:
            os: ios
            type: router
            tacacs:
                username: cisco
            passwords:
                tacacs: cisco
                enable: cisco
            connections:
              defaults:
                class: unicon.Unicon
              a:
                protocol: telnet
                ip: 127.0.0.1
                port: {}
              b:
                protocol: telnet
                ip: 127.0.0.1
                port: {}
        """.format(self.md.ports[0], self.md.ports[1])
示例#3
0
 def setUp(self):
     self.md = MockDeviceTcpWrapperIOS(port=0, state='enable')
     self.md.mockdevice = NetworkCopyFailMockDevice(state='enable')
     self.md.start()
     self.dev = Connection(
         hostname='Router',
         start=['telnet 127.0.0.1 {}'.format(self.md.ports[0])],
         os='ios')
     self.dev.connect()
示例#4
0
    def setUpClass(cls):
        cls.d = Connection(
            hostname='Router',
            start=['mock_device_cli --os ios --state enable'],
            os='ios',
            username='******',
            tacacs_password='******',
            enable_password='******',
        )
        cls.d.connect()

        cls.ha = MockDeviceTcpWrapperIOS(port=0, state='enable,exec_standby')
        cls.ha.start()
        cls.d_ha = Connection(
            hostname='Router',
            start=[
                'telnet 127.0.0.1 ' + str(cls.ha.ports[0]),
                'telnet 127.0.0.1 ' + str(cls.ha.ports[1])
            ],
            os='ios',
            username='******',
            tacacs_password='******',
            enable_password='******',
        )
        cls.d_ha.connect()
示例#5
0
    def setUpClass(cls):
        cls.d = Connection(hostname='Router',
                           start=['mock_device_cli --os ios --state exec'],
                           os='ios',
                           enable_password='******',
                           username='******',
                           tacacs_password='******',
                           service_attributes=dict(ping=dict(timeout=2468)))
        cls.d.connect()
        cls.md = MockDevice(device_os='ios', state='exec')
        cls.ha = MockDeviceTcpWrapperIOS(port=0, state='login,exec_standby')

        # Add command output with 80K lines
        cls.ha.mockdevice.mock_data['enable']['commands']['show ospf dummy'] = \
        "123.123.123.123     123.123.123.123 1000        0x80000003 0x000000 0\n" * 80000

        cls.ha.start()
        cls.ha_device = Connection(
            hostname='Router',
            start=[
                'telnet 127.0.0.1 ' + str(cls.ha.ports[0]),
                'telnet 127.0.0.1 ' + str(cls.ha.ports[1])
            ],
            os='ios',
            username='******',
            tacacs_password='******',
            enable_password='******')
        cls.ha_device.connect()
        cls.logfile_testfile = '/tmp/test_log_file.log'
示例#6
0
 def test_connect_ha_start(self):
     self.md.stop()
     self.md = MockDeviceTcpWrapperIOS(port=0,
                                       state='login,exec_standby',
                                       hostname='my_ha_device')
     self.md.start()
     r = Connection(
         hostname='myhost',
         start=[
             'telnet 127.0.0.1 {}'.format(self.md.ports[0]),
             'telnet 127.0.0.1 {}'.format(self.md.ports[1])
         ],
         credentials=dict(default=dict(username='******', password='******')),
         learn_hostname=True)
     r.connect()
     self.assertEqual(r.hostname, 'my_ha_device')
     self.assertEqual(r.a.hostname, 'my_ha_device')
     self.assertEqual(r.b.hostname, 'my_ha_device')
     r.disconnect()
示例#7
0
 def setUpClass(cls):
     cls.ha = MockDeviceTcpWrapperIOS(port=0, state='login,exec_standby')
     md = unicon.mock.mock_device.MockDevice(device_os='ios', state='exec')
     cls.expected_output = md.mock_data['reload_confirm_prompt']['commands']['']['response']
     cls.ha.start()
     cls.ha_device = Connection(
         hostname='Router',
         start=['telnet 127.0.0.1 ' + str(cls.ha.ports[0]),
                'telnet 127.0.0.1 ' + str(cls.ha.ports[1])],
         os='ios', username='******', tacacs_password='******',
         enable_password='******'
     )
     cls.ha_device.connect()
 def setUp(cls):
     cls.ha = MockDeviceTcpWrapperIOS(port=0, state='enable,exec_standby2')
     cls.ha.start()
     cls.d_ha = Connection(
         hostname='Router',
         start=[
             'telnet 127.0.0.1 ' + str(cls.ha.ports[0]),
             'telnet 127.0.0.1 ' + str(cls.ha.ports[1])
         ],
         os='ios',
         series='iol',
         username='******',
         tacacs_password='******',
         enable_password='******',
     )
     cls.d_ha.connect()
class TestIosPluginHAConnect(unittest.TestCase):
    def setUp(self):
        self.md = MockDeviceTcpWrapperIOS(port=0, state='login,exec_standby')
        self.md.start()

        self.testbed = """
        devices:
          Router:
            os: ios
            type: router
            tacacs:
                username: cisco
            passwords:
                tacacs: cisco
                enable: cisco
            connections:
              defaults:
                class: unicon.Unicon
              a:
                protocol: telnet
                ip: 127.0.0.1
                port: {}
              b:
                protocol: telnet
                ip: 127.0.0.1
                port: {}
        """.format(self.md.ports[0], self.md.ports[1])

    def tearDown(self):
        self.md.stop()

    def test_connect(self):
        tb = loader.load(self.testbed)
        r = tb.devices.Router
        r.connect()
        r.disconnect()

    def test_connect_init_commands(self):
        tb = loader.load(self.testbed)
        r = tb.devices.Router
        r.connect(init_commands=[])
        r.disconnect()

    def test_switchover(self):
        tb = loader.load(self.testbed)
        r = tb.devices.Router
        r.connect(init_commands=[])
        r.switchover()
        r.disconnect()

    def test_connect_mit(self):
        tb = loader.load(self.testbed)
        r = tb.devices.Router
        r.connect(mit=True)
        self.assertEqual(r.a.spawn.match.match_output, '\r\nRouter>')
        self.assertEqual(r.b.spawn.match.match_output,
                         '\r\nStandby locked\r\nRouter-stby#')
        with self.assertRaisesRegex(unicon.core.errors.ConnectionError,
                                    'handles are not yet designated'):
            assert r.active is not None
        with self.assertRaisesRegex(unicon.core.errors.ConnectionError,
                                    'handles are not yet designated'):
            assert r.standby is not None
示例#10
0
class TestIosPluginHAConnect(unittest.TestCase):
    def setUp(self):
        self.md = MockDeviceTcpWrapperIOS(port=0, state='login,exec_standby')
        self.md.start()

        self.testbed = """
        devices:
          Router:
            os: ios
            type: router
            tacacs:
                username: cisco
            passwords:
                tacacs: cisco
                enable: cisco
            connections:
              defaults:
                class: unicon.Unicon
              a:
                protocol: telnet
                ip: 127.0.0.1
                port: {}
              b:
                protocol: telnet
                ip: 127.0.0.1
                port: {}
        """.format(self.md.ports[0], self.md.ports[1])

        self.testbed_custom_subconnection = """
        devices:
          Router:
            os: ios
            type: router
            credentials:
                default:
                    username: cisco
                    password: cisco
            connections:
              defaults:
                class: unicon.Unicon
                connections: [one, two]
              one:
                protocol: telnet
                ip: 127.0.0.1
                port: {}
              two:
                protocol: telnet
                ip: 127.0.0.1
                port: {}
        """.format(self.md.ports[0], self.md.ports[1])

    def tearDown(self):
        self.md.stop()

    def test_connect(self):
        tb = loader.load(self.testbed)
        r = tb.devices.Router
        r.instantiate()
        r.connect()
        self.assertEqual(r.get_mode(), 'sso')
        self.assertTrue(r.active is r.a)
        self.assertTrue(r.standby is r.b)
        self.assertEqual(r.get_rp_state(), 'ACTIVE')
        self.assertEqual(r.get_rp_state(target='standby'), 'STANDBY HOT')
        self.assertEqual(r.get_rp_state(target='b'), 'STANDBY HOT')
        self.assertEqual(r.standby.execute(''), '')
        self.assertEqual(r.b.execute(''), '')
        self.assertEqual(r.execute(''), '')
        self.assertEqual(r.active.execute(''), '')
        r.disconnect()

    def test_connect_ha_start(self):
        self.md.stop()
        self.md = MockDeviceTcpWrapperIOS(port=0,
                                          state='login,exec_standby',
                                          hostname='my_ha_device')
        self.md.start()
        r = Connection(
            hostname='myhost',
            start=[
                'telnet 127.0.0.1 {}'.format(self.md.ports[0]),
                'telnet 127.0.0.1 {}'.format(self.md.ports[1])
            ],
            credentials=dict(default=dict(username='******', password='******')),
            learn_hostname=True)
        r.connect()
        self.assertEqual(r.hostname, 'my_ha_device')
        self.assertEqual(r.a.hostname, 'my_ha_device')
        self.assertEqual(r.b.hostname, 'my_ha_device')
        r.disconnect()

    def test_connect_init_commands(self):
        tb = loader.load(self.testbed)
        r = tb.devices.Router
        r.connect(init_commands=[])
        r.disconnect()

    def test_switchover(self):
        tb = loader.load(self.testbed)
        r = tb.devices.Router
        r.connect(init_commands=[])
        r.switchover()
        self.assertEqual(r.get_mode(), 'sso')
        self.assertTrue(r.active is r.b)
        self.assertTrue(r.standby is r.a)
        self.assertEqual(r.get_rp_state(), 'ACTIVE')
        self.assertEqual(r.get_rp_state(target='standby'), 'STANDBY HOT')
        self.assertEqual(r.get_rp_state(target='a'), 'STANDBY HOT')
        self.assertEqual(r.standby.execute(''), '')
        self.assertEqual(r.a.execute(''), '')
        self.assertEqual(r.execute(''), '')
        self.assertEqual(r.active.execute(''), '')
        r.switchover()
        self.assertEqual(r.get_mode(), 'sso')
        self.assertTrue(r.active is r.a)
        self.assertTrue(r.standby is r.b)
        self.assertEqual(r.get_rp_state(), 'ACTIVE')
        self.assertEqual(r.get_rp_state(target='standby'), 'STANDBY HOT')
        self.assertEqual(r.get_rp_state(target='b'), 'STANDBY HOT')
        self.assertEqual(r.standby.execute(''), '')
        self.assertEqual(r.b.execute(''), '')
        self.assertEqual(r.execute(''), '')
        self.assertEqual(r.active.execute(''), '')
        r.disconnect()

    def test_switchover_custom_vias(self):
        tb = loader.load(self.testbed_custom_subconnection)
        r = tb.devices.Router
        r.connect(init_commands=[])
        r.switchover()
        self.assertEqual(r.get_mode(), 'sso')
        self.assertTrue(r.active is r.two)
        self.assertTrue(r.standby is r.one)
        self.assertEqual(r.get_rp_state(), 'ACTIVE')
        self.assertEqual(r.get_rp_state(target='standby'), 'STANDBY HOT')
        self.assertEqual(r.get_rp_state(target='one'), 'STANDBY HOT')
        self.assertEqual(r.standby.execute(''), '')
        self.assertEqual(r.one.execute(''), '')
        self.assertEqual(r.execute(''), '')
        self.assertEqual(r.active.execute(''), '')
        r.switchover()
        self.assertEqual(r.get_mode(), 'sso')
        self.assertTrue(r.active is r.one)
        self.assertTrue(r.standby is r.two)
        self.assertEqual(r.get_rp_state(), 'ACTIVE')
        self.assertEqual(r.get_rp_state(target='standby'), 'STANDBY HOT')
        self.assertEqual(r.get_rp_state(target='two'), 'STANDBY HOT')
        self.assertEqual(r.standby.execute(''), '')
        self.assertEqual(r.two.execute(''), '')
        self.assertEqual(r.execute(''), '')
        self.assertEqual(r.active.execute(''), '')
        r.disconnect()

    def test_connect_mit(self):
        tb = loader.load(self.testbed)
        r = tb.devices.Router
        r.connect(mit=True)
        self.assertEqual(r.a.spawn.match.match_output, '\r\nRouter>')
        self.assertEqual(r.b.spawn.match.match_output, '\r\nRouter-stby#')
        with self.assertRaisesRegex(unicon.core.errors.ConnectionError,
                                    'handles are not yet designated'):
            assert r.active is not None
        with self.assertRaisesRegex(unicon.core.errors.ConnectionError,
                                    'handles are not yet designated'):
            assert r.standby is not None