From b96efd2e56f2d51b8974dde5908ca25256be7745 Mon Sep 17 00:00:00 2001 From: Aaron John Date: Mon, 6 Feb 2023 14:17:08 +0000 Subject: [PATCH 1/9] Serial connection bugfix --- lib/jnpr/junos/transport/tty_serial.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/jnpr/junos/transport/tty_serial.py b/lib/jnpr/junos/transport/tty_serial.py index 6946be3c4..6369dfcbc 100644 --- a/lib/jnpr/junos/transport/tty_serial.py +++ b/lib/jnpr/junos/transport/tty_serial.py @@ -81,7 +81,12 @@ def read_prompt(self): while datetime.now() < mark_end: sleep(0.1) # do not remove - line = self._ser.readline() + allline = self._ser.readall() + key = re.findall("\n(.*)", allline.decode()) + if key: + line = six.b(key[-1]) + else: + line = None if not line: continue rxb += line From e2f4a4ecde11b935f59f436a69dad24bd74c5756 Mon Sep 17 00:00:00 2001 From: Aaron John Date: Mon, 6 Feb 2023 14:21:44 +0000 Subject: [PATCH 2/9] Serial connection bugfix --- lib/jnpr/junos/transport/tty_serial.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/jnpr/junos/transport/tty_serial.py b/lib/jnpr/junos/transport/tty_serial.py index 6369dfcbc..dece597e9 100644 --- a/lib/jnpr/junos/transport/tty_serial.py +++ b/lib/jnpr/junos/transport/tty_serial.py @@ -82,14 +82,10 @@ def read_prompt(self): while datetime.now() < mark_end: sleep(0.1) # do not remove allline = self._ser.readall() - key = re.findall("\n(.*)", allline.decode()) - if key: - line = six.b(key[-1]) - else: - line = None + line = re.findall("\n(.*)", allline.decode()) if not line: continue - rxb += line + rxb += six.b(line[-1]) found = _PROMPT.search(rxb) if found is not None: break # done reading From c3a8a84e07958083378033a7bff4d7c786fb9fdc Mon Sep 17 00:00:00 2001 From: Aaron John Date: Tue, 21 Feb 2023 15:39:50 +0000 Subject: [PATCH 3/9] Unit test serial read prompt fix --- tests/unit/transport/test_serial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/transport/test_serial.py b/tests/unit/transport/test_serial.py index 075d3a5fb..15620f8b0 100644 --- a/tests/unit/transport/test_serial.py +++ b/tests/unit/transport/test_serial.py @@ -73,7 +73,7 @@ def test_tty_serial_read(self): def test_tty_serial_read_prompt(self): self.dev._tty._ser = MagicMock() self.dev._tty.EXPECT_TIMEOUT = 0.1 - self.dev._tty._ser.readline.side_effect = ["", "test"] + self.dev._tty._ser.readall.side_effect = [b"", b"test"] self.assertEqual(self.dev._tty.read_prompt()[0], None) From 74621bdf768c00540e94ac52e779385fbf39f854 Mon Sep 17 00:00:00 2001 From: Aaron John Date: Tue, 21 Feb 2023 15:51:59 +0000 Subject: [PATCH 4/9] Unit test_console fix --- tests/unit/test_console.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/test_console.py b/tests/unit/test_console.py index 7a1a29029..3325502c5 100644 --- a/tests/unit/test_console.py +++ b/tests/unit/test_console.py @@ -161,7 +161,7 @@ def test_console_tty_open_err(self, mock_login, mock_telnet): self.assertRaises(ValueError, self.dev.open) @patch("jnpr.junos.transport.tty_serial.Serial._tty_open") - @patch("jnpr.junos.transport.tty_serial.serial.Serial.readline") + @patch("jnpr.junos.transport.tty_serial.serial.Serial.readall") @patch("jnpr.junos.transport.tty_serial.Serial.write") def test_console_serial(self, mock_write, mock_expect, mock_open): tty_netconf.open = MagicMock() From 9327eacaf36b37a1b2888a98bd512002105673fd Mon Sep 17 00:00:00 2001 From: Aaron John Date: Wed, 8 Mar 2023 18:32:33 +0000 Subject: [PATCH 5/9] Check for bad password --- lib/jnpr/junos/transport/tty.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/jnpr/junos/transport/tty.py b/lib/jnpr/junos/transport/tty.py index b356ee61e..8d82a0e1c 100644 --- a/lib/jnpr/junos/transport/tty.py +++ b/lib/jnpr/junos/transport/tty.py @@ -181,7 +181,8 @@ def _ev_netconf_closed(): def _login_state_machine(self, attempt=0): if self.login_attempts == attempt: raise RuntimeError("login_sm_failure") - + if attempt == 0: + self._password_entered = False prompt, found = self.read_prompt() def _ev_loader(): @@ -195,8 +196,12 @@ def _ev_loader(): raise RuntimeError("probably corrupted image, stuck in loader") def _ev_login(): - self.state = self._ST_LOGIN - self.write(self.user) + if self._password_entered: + _ev_bad_passwd() + else: + self._password_entered = True + self.state = self._ST_LOGIN + self.write(self.user) def _ev_passwd(): self.state = self._ST_PASSWD From 50b2eca25a0da45ffe398ba24c900d99c3eea7a6 Mon Sep 17 00:00:00 2001 From: Aaron John Date: Mon, 3 Apr 2023 17:19:11 +0000 Subject: [PATCH 6/9] reset the password counter after a successfull login and bad password for retry --- lib/jnpr/junos/transport/tty.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/jnpr/junos/transport/tty.py b/lib/jnpr/junos/transport/tty.py index 8d82a0e1c..2f7ae82d9 100644 --- a/lib/jnpr/junos/transport/tty.py +++ b/lib/jnpr/junos/transport/tty.py @@ -199,18 +199,19 @@ def _ev_login(): if self._password_entered: _ev_bad_passwd() else: - self._password_entered = True self.state = self._ST_LOGIN self.write(self.user) def _ev_passwd(): self.state = self._ST_PASSWD self.write(self.passwd) + self._password_entered = True def _ev_bad_passwd(): self.state = self._ST_BAD_PASSWD self.write("\n") self._badpasswd += 1 + self._password_entered = False if self._badpasswd == 2: # raise RuntimeError("Bad username/password") raise EzErrors.ConnectAuthError(self, "Bad username/password") @@ -242,7 +243,7 @@ def _ev_shell(): # open. probably not a good thing, # so issue a logging message, but move on. logger.warning("login_warn: Shell login was open!!") - + self._password_entered = False self.at_shell = True self.state = self._ST_DONE # if we are here, then we are done From 9f9695b4f45bf7787aef7c5294fdf6689c334884 Mon Sep 17 00:00:00 2001 From: Aaron John Date: Sat, 13 Apr 2024 21:18:40 +0000 Subject: [PATCH 7/9] Fix unit test for serial connection --- tests/unit/transport/test_serial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/transport/test_serial.py b/tests/unit/transport/test_serial.py index 6b3200701..5dd47692b 100644 --- a/tests/unit/transport/test_serial.py +++ b/tests/unit/transport/test_serial.py @@ -72,7 +72,7 @@ def test_tty_serial_read(self): def test_tty_serial_read_prompt(self): self.dev._tty._ser = MagicMock() self.dev._tty.EXPECT_TIMEOUT = 0.1 - self.dev._tty._ser.readall.side_effect = [b"", b"test"] + self.dev._tty._ser.readall.side_effect = [six.b(""), six.b("test")] self.assertEqual(self.dev._tty.read_prompt()[0], None) From 98455b47a58462aad0c11a6db02648b43f906fae Mon Sep 17 00:00:00 2001 From: Aaron John Date: Sat, 13 Apr 2024 22:10:58 +0000 Subject: [PATCH 8/9] Fixed field name to match template --- tests/unit/factory/test_cmdtable.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/unit/factory/test_cmdtable.py b/tests/unit/factory/test_cmdtable.py index 177c6e6a0..bde3a578d 100644 --- a/tests/unit/factory/test_cmdtable.py +++ b/tests/unit/factory/test_cmdtable.py @@ -2214,10 +2214,7 @@ def test_table_eval_with_filters(self, mock_execute): "L2ALM Manager": {"cpu": "0", "state": "asleep"}, "L2PD": {"cpu": "0", "state": "asleep"}, "L2TP-SF KA Transmit": {"cpu": "0", "state": "asleep"}, - "LKUP ASIC UCODE Rebalance Service": { - "cpu": "1", - "state": "asleep", - }, + "LKUP ASIC UCODE Rebalance Service": {"cpu": "1", "state": "asleep",}, "LKUP ASIC Wedge poll thread": {"cpu": "0", "state": "asleep"}, "LU Background Service": {"cpu": "4", "state": "asleep"}, "LU-CNTR Reader": {"cpu": "0", "state": "asleep"}, @@ -2379,7 +2376,7 @@ def test_textfsm_table_mutli_key(self, mock_execute): ARPview: fields: - mac: MAC + mac: MAC_ADDRESS ip: IP_ADDRESS interface: INTERFACE flag: FLAGS From ea13744f9caab17854d17e4c113736bbe4474cc1 Mon Sep 17 00:00:00 2001 From: Aaron John Date: Sat, 13 Apr 2024 22:32:35 +0000 Subject: [PATCH 9/9] Revert "Merge branch 'fix_unit_test_failing' into bugfix/serial_connection" This reverts commit a93aa89c4d314fec5378df50a386660cbf027b4a, reversing changes made to 9f9695b4f45bf7787aef7c5294fdf6689c334884. --- tests/unit/factory/test_cmdtable.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/unit/factory/test_cmdtable.py b/tests/unit/factory/test_cmdtable.py index bde3a578d..177c6e6a0 100644 --- a/tests/unit/factory/test_cmdtable.py +++ b/tests/unit/factory/test_cmdtable.py @@ -2214,7 +2214,10 @@ def test_table_eval_with_filters(self, mock_execute): "L2ALM Manager": {"cpu": "0", "state": "asleep"}, "L2PD": {"cpu": "0", "state": "asleep"}, "L2TP-SF KA Transmit": {"cpu": "0", "state": "asleep"}, - "LKUP ASIC UCODE Rebalance Service": {"cpu": "1", "state": "asleep",}, + "LKUP ASIC UCODE Rebalance Service": { + "cpu": "1", + "state": "asleep", + }, "LKUP ASIC Wedge poll thread": {"cpu": "0", "state": "asleep"}, "LU Background Service": {"cpu": "4", "state": "asleep"}, "LU-CNTR Reader": {"cpu": "0", "state": "asleep"}, @@ -2376,7 +2379,7 @@ def test_textfsm_table_mutli_key(self, mock_execute): ARPview: fields: - mac: MAC_ADDRESS + mac: MAC ip: IP_ADDRESS interface: INTERFACE flag: FLAGS