Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
 def setUp(self):
     logging.getLogger('jnpr.junos.tty')
     self.terminal = Terminal(user='******',
                              password='******',
                              attempts=1)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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')
Exemplo n.º 10
0
 def setUp(self):
     logging.getLogger('jnpr.junos.tty')
     self.terminal = Terminal(user='******',
                              password='******', attempts=1)
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
 def setUp(self):
     logging.getLogger("jnpr.junos.tty")
     self.terminal = Terminal(user="******",
                              password="******",
                              attempts=1)
Exemplo n.º 13
0
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")
Exemplo n.º 14
0
 def setUp(self):
     logging.getLogger("jnpr.junos.tty")
     self.terminal = Terminal(user="******", password="******", attempts=1)
Exemplo n.º 15
0
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")
Exemplo n.º 16
0
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')