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])
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()
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()
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'
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 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
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