def __init__(self, port="/dev/ttyUSB0", **kvargs): """ :port: the serial port, defaults to USB0 since this :kvargs['timeout']: this is the tty read polling timeout. generally you should not have to tweak this. """ # initialize the underlying TTY device self.port = port self._ser = serial.Serial() self._rx = self._ser self._ser.port = port self._ser.timeout = kvargs.get("timeout", self.TIMEOUT) self._tty_name = self.port Terminal.__init__(self, **kvargs)
def __init__(self, port='/dev/ttyUSB0', **kvargs): """ :port: the serial port, defaults to USB0 since this :kvargs['timeout']: this is the tty read polling timeout. generally you should not have to tweak this. """ # initialize the underlying TTY device self.port = port self._ser = serial.Serial() self._rx = self._ser self._ser.port = port self._ser.timeout = kvargs.get('timeout', self.TIMEOUT) self._tty_name = self.port Terminal.__init__(self, **kvargs)
def __init__(self, host, port, **kvargs): """ :host: The hostname or ip-addr of the ternminal server :port: The TCP port that maps to the TTY device on the console server :kvargs['timeout']: this is the tty read polling timeout. generally you should not have to tweak this. """ # initialize the underlying TTY device self._tn = telnetlib.Telnet() self._rx = self._tn self.host = host self.port = port self.timeout = kvargs.get('timeout', self.TIMEOUT) self._tty_name = "{0}:{1}".format(host, port) Terminal.__init__(self, **kvargs)
def __init__(self, host, port, **kvargs): """ :host: The hostname or ip-addr of the ternminal server :port: The TCP port that maps to the TTY device on the console server :kvargs['timeout']: this is the tty read polling timeout. generally you should not have to tweak this. """ # initialize the underlying TTY device self._tn = telnetlib.Telnet() self._rx = self._tn self.host = host self.port = port self.timeout = kvargs.get('timeout', self.TIMEOUT) self._tty_name = "{0}:{1}".format(host, port) Terminal.__init__(self, **kvargs)
def __init__(self, host, port, **kvargs): """ :host: The hostname or ip-addr of the terminal server :port: The TCP port that maps to the TTY device on the console server :kvargs['timeout']: this is the tty read polling timeout. generally you should not have to tweak this. """ # initialize the underlying TTY device self._ssh_pre = self._ssh_client_pre() self.host = host self.port = port self.ssh_private_key_file = kvargs.get("ssh_private_key_file") self.timeout = kvargs.get("timeout", self.TIMEOUT) self.baud = kvargs.get("baud", 9600) self._tty_name = "{}:{}".format(host, port) Terminal.__init__(self, **kvargs)
def __init__(self, host, port, **kvargs): """ :host: The hostname or ip-addr of the terminal server :port: The TCP port that maps to the TTY device on the console server :kvargs['timeout']: this is the tty read polling timeout. generally you should not have to tweak this. """ # initialize the underlying TTY device self._ssh_pre = self._ssh_client_pre() self.host = host self.port = port self.ssh_private_key_file = kvargs.get('ssh_private_key_file') self.timeout = kvargs.get('timeout', self.TIMEOUT) self.baud = kvargs.get('baud', 9600) self._tty_name = "{}:{}".format(host, port) Terminal.__init__(self, **kvargs)
def setUp(self): logging.getLogger('jnpr.junos.tty') self.terminal = Terminal(user='******', password='******', attempts=1)
class TestTTY(unittest.TestCase): def setUp(self): logging.getLogger('jnpr.junos.tty') self.terminal = Terminal(user='******', password='******', attempts=1) def test_login_bad_password_runtimeerror(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'badpasswd') self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) def test_login_bad_password_ConnectAuthError(self): self.terminal._badpasswd = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'badpasswd') self.terminal.write = MagicMock() self.assertRaises(EzErrors.ConnectAuthError, self.terminal._login_state_machine) def test_tty_no_login(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'testing') self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with('<close-session/>') @patch('jnpr.junos.transport.tty.sleep') @patch('jnpr.junos.transport.tty.logger') def test_tty_cli(self, mock_logger, mock_sleep): self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'cli') self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) @patch('jnpr.junos.transport.tty.sleep') def test_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal._loader = 2 # self.terminal._login_state_machine = MagicMock() self.terminal.read_prompt.side_effect = [(None, 'loader'), (None, 'testing')] self.assertRaises(RuntimeError, self.terminal._login_state_machine) mock_sleep.assert_called_with(300) @patch('jnpr.junos.transport.tty.logger') def test_ev_shell(self, mock_logger): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'shell') self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) def test_ev_option(self): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'option') self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("1") self.assertEqual(self.terminal.state, 7)
class TestTTY(unittest.TestCase): def setUp(self): logging.getLogger('jnpr.junos.tty') self.terminal = Terminal(user='******', password='******', attempts=1) def test_login_bad_password_runtimeerror(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'badpasswd') self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) def test_login_bad_password_ConnectAuthError(self): self.terminal._badpasswd = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'badpasswd') self.terminal.write = MagicMock() self.assertRaises(EzErrors.ConnectAuthError, self.terminal._login_state_machine) def test_tty_no_login(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'testing') self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with('<close-session/>') @patch('jnpr.junos.transport.tty.sleep') @patch('jnpr.junos.transport.tty.logger') def test_tty_cli(self, mock_logger, mock_sleep): self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'cli') self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) @patch('jnpr.junos.transport.tty.sleep') def test_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal._loader = 2 # self.terminal._login_state_machine = MagicMock() self.terminal.read_prompt.side_effect = [(None, 'loader'), (None, 'testing')] self.assertRaises(RuntimeError, self.terminal._login_state_machine) mock_sleep.assert_called_with(300) @patch('jnpr.junos.transport.tty.logger') def test_ev_shell(self, mock_logger): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'shell') self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) def test_ev_option(self): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'option') self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("1") self.assertEqual(self.terminal.state, 7) def test_tty_ev_already_closed(self): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'already_closed') self.assertTrue(self.terminal._logout_state_machine()) def test_tty_already_logout(self): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, None) self.assertTrue(self.terminal._logout_state_machine()) @patch('jnpr.junos.transport.tty.sleep') def test_tty_login_state_machine_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._loader = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, 'loader'), (None, 'hotkey'), (None, 'shell')]) self.assertRaises(RuntimeError, self.terminal._login_state_machine) @patch('jnpr.junos.transport.tty.sleep') def test_tty_login_state_machine_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._loader = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, 'loader'), (None, 'shell')]) try: self.terminal._login_state_machine() except RuntimeError as ex: self.assertEqual(str(ex), 'probably corrupted image, stuck in loader') @patch('jnpr.junos.transport.tty.sleep') def test_tty_login_state_machine_hotkey(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'hotkey') self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.assertEqual(self.terminal.state, 8) # 8 is for hot keys @patch('jnpr.junos.transport.tty.sleep') def test_tty_ev_tty_nologin(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, None) self.terminal.console_has_banner = True self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with('\n') @patch('jnpr.junos.transport.tty.sleep') def test_tty_logout_state_machine_attempt_10(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'cli') try: self.terminal._logout_state_machine() except RuntimeError as ex: self.assertEqual(str(ex), 'logout_sm_failure')
def setUp(self): logging.getLogger('jnpr.junos.tty') self.terminal = Terminal(user='******', password='******', attempts=1)
class TestTTY(unittest.TestCase): def setUp(self): logging.getLogger('jnpr.junos.tty') self.terminal = Terminal(user='******', password='******', attempts=1) def test_login_bad_password_runtimeerror(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'badpasswd') self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) def test_login_bad_password_ConnectAuthError(self): self.terminal._badpasswd = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'badpasswd') self.terminal.write = MagicMock() self.assertRaises(EzErrors.ConnectAuthError, self.terminal._login_state_machine) def test_tty_no_login(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'testing') self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with('<close-session/>') @patch('jnpr.junos.transport.tty.sleep') @patch('jnpr.junos.transport.tty.logger') def test_tty_cli(self, mock_logger, mock_sleep): self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'cli') self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) @patch('jnpr.junos.transport.tty.sleep') def test_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal._loader = 2 # self.terminal._login_state_machine = MagicMock() self.terminal.read_prompt.side_effect = [(None, 'loader'), (None, 'testing')] self.assertRaises(RuntimeError, self.terminal._login_state_machine) mock_sleep.assert_called_with(300) @patch('jnpr.junos.transport.tty.logger') def test_ev_shell(self, mock_logger): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'shell') self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) def test_ev_option(self): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'option') self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("1") self.assertEqual(self.terminal.state, 7)
def setUp(self): logging.getLogger("jnpr.junos.tty") self.terminal = Terminal(user="******", password="******", attempts=1)
class TestTTY(unittest.TestCase): def setUp(self): logging.getLogger("jnpr.junos.tty") self.terminal = Terminal(user="******", password="******", attempts=1) def test_login_bad_password_runtimeerror(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "badpasswd") self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) def test_login_bad_password_ConnectAuthError(self): self.terminal._badpasswd = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "badpasswd") self.terminal.write = MagicMock() self.assertRaises(EzErrors.ConnectAuthError, self.terminal._login_state_machine) @patch("jnpr.junos.transport.tty.sleep") def test_tty_no_login(self, mock_sleep): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "testing") self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("\n") self.terminal.read_prompt.return_value = (None, "testing") self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("<close-session/>") @patch("jnpr.junos.transport.tty.sleep") @patch("jnpr.junos.transport.tty.logger") def test_tty_cli(self, mock_logger, mock_sleep): self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "cli") self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) @patch("jnpr.junos.transport.tty.sleep") def test_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal._loader = 2 # self.terminal._login_state_machine = MagicMock() self.terminal.read_prompt.side_effect = [(None, "loader"), (None, "testing")] self.assertRaises(RuntimeError, self.terminal._login_state_machine) mock_sleep.assert_called_with(300) @patch("jnpr.junos.transport.tty.logger") def test_ev_shell(self, mock_logger): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "shell") self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) @patch("jnpr.junos.transport.tty.sleep") def test_ev_option(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "option") self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("1") self.assertEqual(self.terminal.state, 7) @patch("jnpr.junos.transport.tty.sleep") def test_tty_ev_netconf_closed(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._tty_close = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, "netconf_closed"), (None, "shell"), (None, "login")]) self.assertTrue(self.terminal._logout_state_machine()) @patch("jnpr.junos.transport.tty.sleep") def test_tty_already_logout(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, None) self.assertTrue(self.terminal._logout_state_machine()) @patch("jnpr.junos.transport.tty.sleep") def test_tty_login_state_machine_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._loader = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, "loader"), (None, "hotkey"), (None, "shell")]) self.assertRaises(RuntimeError, self.terminal._login_state_machine) @patch("jnpr.junos.transport.tty.sleep") def test_tty_login_state_machine_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._loader = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, "loader"), (None, "shell")]) try: self.terminal._login_state_machine() except RuntimeError as ex: self.assertEqual(str(ex), "probably corrupted image, stuck in loader") @patch("jnpr.junos.transport.tty.sleep") def test_tty_login_state_machine_hotkey(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "hotkey") self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.assertEqual(self.terminal.state, 8) # 8 is for hot keys @patch("jnpr.junos.transport.tty.sleep") def test_tty_ev_tty_nologin(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, None) self.terminal.console_has_banner = True self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("\n") @patch("jnpr.junos.transport.tty.sleep") def test_tty_logout_state_machine_attempt_10(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "cli") try: self.terminal._logout_state_machine() except RuntimeError as ex: self.assertEqual(str(ex), "logout_sm_failure")
def setUp(self): logging.getLogger("jnpr.junos.tty") self.terminal = Terminal(user="******", password="******", attempts=1)
class TestTTY(unittest.TestCase): def setUp(self): logging.getLogger("jnpr.junos.tty") self.terminal = Terminal(user="******", password="******", attempts=1) def test_login_bad_password_runtimeerror(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "badpasswd") self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) def test_login_bad_password_ConnectAuthError(self): self.terminal._badpasswd = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "badpasswd") self.terminal.write = MagicMock() self.assertRaises(EzErrors.ConnectAuthError, self.terminal._login_state_machine) def test_tty_no_login(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "testing") self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("<close-session/>") @patch("jnpr.junos.transport.tty.sleep") @patch("jnpr.junos.transport.tty.logger") def test_tty_cli(self, mock_logger, mock_sleep): self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "cli") self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) @patch("jnpr.junos.transport.tty.sleep") def test_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal._loader = 2 # self.terminal._login_state_machine = MagicMock() self.terminal.read_prompt.side_effect = [(None, "loader"), (None, "testing")] self.assertRaises(RuntimeError, self.terminal._login_state_machine) mock_sleep.assert_called_with(300) @patch("jnpr.junos.transport.tty.logger") def test_ev_shell(self, mock_logger): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "shell") self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) def test_ev_option(self): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "option") self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("1") self.assertEqual(self.terminal.state, 7) def test_tty_ev_already_closed(self): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "already_closed") self.assertTrue(self.terminal._logout_state_machine()) def test_tty_already_logout(self): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, None) self.assertTrue(self.terminal._logout_state_machine()) @patch("jnpr.junos.transport.tty.sleep") def test_tty_login_state_machine_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._loader = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, "loader"), (None, "hotkey"), (None, "shell")]) self.assertRaises(RuntimeError, self.terminal._login_state_machine) @patch("jnpr.junos.transport.tty.sleep") def test_tty_login_state_machine_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._loader = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, "loader"), (None, "shell")]) try: self.terminal._login_state_machine() except RuntimeError as ex: self.assertEqual(str(ex), "probably corrupted image, stuck in loader") @patch("jnpr.junos.transport.tty.sleep") def test_tty_login_state_machine_hotkey(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "hotkey") self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.assertEqual(self.terminal.state, 8) # 8 is for hot keys @patch("jnpr.junos.transport.tty.sleep") def test_tty_ev_tty_nologin(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, None) self.terminal.console_has_banner = True self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("\n") @patch("jnpr.junos.transport.tty.sleep") def test_tty_logout_state_machine_attempt_10(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, "cli") try: self.terminal._logout_state_machine() except RuntimeError as ex: self.assertEqual(str(ex), "logout_sm_failure")
class TestTTY(unittest.TestCase): def setUp(self): logging.getLogger('jnpr.junos.tty') self.terminal = Terminal(user='******', password='******', attempts=1) def test_login_bad_password_runtimeerror(self): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'badpasswd') self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) def test_login_bad_password_ConnectAuthError(self): self.terminal._badpasswd = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'badpasswd') self.terminal.write = MagicMock() self.assertRaises(EzErrors.ConnectAuthError, self.terminal._login_state_machine) @patch('jnpr.junos.transport.tty.sleep') def test_tty_no_login(self, mock_sleep): self.terminal._badpasswd = 4 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'testing') self.terminal.write = MagicMock() self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with('<close-session/>') @patch('jnpr.junos.transport.tty.sleep') @patch('jnpr.junos.transport.tty.logger') def test_tty_cli(self, mock_logger, mock_sleep): self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'cli') self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) @patch('jnpr.junos.transport.tty.sleep') def test_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal._loader = 2 # self.terminal._login_state_machine = MagicMock() self.terminal.read_prompt.side_effect = [(None, 'loader'), (None, 'testing')] self.assertRaises(RuntimeError, self.terminal._login_state_machine) mock_sleep.assert_called_with(300) @patch('jnpr.junos.transport.tty.logger') def test_ev_shell(self, mock_logger): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'shell') self.terminal._login_state_machine() self.assertEqual(self.terminal.state, 4) @patch('jnpr.junos.transport.tty.sleep') def test_ev_option(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'option') self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with("1") self.assertEqual(self.terminal.state, 7) @patch('jnpr.junos.transport.tty.sleep') def test_tty_ev_netconf_closed(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._tty_close = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, 'netconf_closed'), (None, 'shell'), (None, 'login')]) self.assertTrue(self.terminal._logout_state_machine()) @patch('jnpr.junos.transport.tty.sleep') def test_tty_already_logout(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, None) self.assertTrue(self.terminal._logout_state_machine()) @patch('jnpr.junos.transport.tty.sleep') def test_tty_login_state_machine_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._loader = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, 'loader'), (None, 'hotkey'), (None, 'shell')]) self.assertRaises(RuntimeError, self.terminal._login_state_machine) @patch('jnpr.junos.transport.tty.sleep') def test_tty_login_state_machine_loader(self, mock_sleep): self.terminal.write = MagicMock() self.terminal._loader = 1 self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.side_effect = iter([(None, 'loader'), (None, 'shell')]) try: self.terminal._login_state_machine() except RuntimeError as ex: self.assertEqual(str(ex), 'probably corrupted image, stuck in loader') @patch('jnpr.junos.transport.tty.sleep') def test_tty_login_state_machine_hotkey(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'hotkey') self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.assertEqual(self.terminal.state, 8) # 8 is for hot keys @patch('jnpr.junos.transport.tty.sleep') def test_tty_ev_tty_nologin(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, None) self.terminal.console_has_banner = True self.assertRaises(RuntimeError, self.terminal._login_state_machine) self.terminal.write.assert_called_with('\n') @patch('jnpr.junos.transport.tty.sleep') def test_tty_logout_state_machine_attempt_10(self, mock_sleep): self.terminal.write = MagicMock() self.terminal.read_prompt = MagicMock() self.terminal.read_prompt.return_value = (None, 'cli') try: self.terminal._logout_state_machine() except RuntimeError as ex: self.assertEqual(str(ex), 'logout_sm_failure')