Skip to content

Fix PortChannel name matching in verify_attr_change to handle leading spaces#18301

Merged
StormLiangMS merged 1 commit intosonic-net:masterfrom
Gfrom2016:fix_portchannel_interface_case
May 13, 2025
Merged

Fix PortChannel name matching in verify_attr_change to handle leading spaces#18301
StormLiangMS merged 1 commit intosonic-net:masterfrom
Gfrom2016:fix_portchannel_interface_case

Conversation

@Gfrom2016
Copy link
Contributor

Description of PR

Summary:
Fixes # (issue)

Type of change

  • Bug fix
  • Testbed and Framework(new/improvement)
  • New Test case
    • Skipped for non-supported platforms
  • Test case improvement

Back port request

  • 202405
  • 202411

Approach

What is the motivation for this PR?

test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))
    
>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324

This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A

This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?

Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?

Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED                                                                                                 [100%]

Any platform specific information?

Supported testbed topology if it's a new test case?

Documentation

Signed-off-by: zitingguo-ms zitingguo@microsoft.com

Signed-off-by: zitingguo <zitingguo@microsoft.com>
@mssonicbld
Copy link
Collaborator

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Copy link
Collaborator

@StormLiangMS StormLiangMS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think Zhaohui's suggestion makes sense. However, since this PR is intended to fix the bug, we can accept this change for now and consider using a more generic way to parse the output later? @ZhaohuiS

Copy link
Contributor

@ZhaohuiS ZhaohuiS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@StormLiangMS StormLiangMS merged commit 45f267d into sonic-net:master May 13, 2025
14 checks passed
mssonicbld pushed a commit to mssonicbld/sonic-mgmt that referenced this pull request May 13, 2025
… spaces (sonic-net#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))
    
>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED
mssonicbld pushed a commit to mssonicbld/sonic-mgmt that referenced this pull request May 13, 2025
… spaces (sonic-net#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))
    
>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED
@mssonicbld
Copy link
Collaborator

Cherry-pick PR to 202411: #18374

@mssonicbld
Copy link
Collaborator

Cherry-pick PR to 202405: #18375

mssonicbld pushed a commit to mssonicbld/sonic-mgmt that referenced this pull request Jul 8, 2025
… spaces (sonic-net#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))
    
>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED
@mssonicbld
Copy link
Collaborator

Cherry-pick PR to 202411: #19458

mssonicbld pushed a commit to mssonicbld/sonic-mgmt that referenced this pull request Jul 8, 2025
… spaces (sonic-net#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))
    
>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED
@mssonicbld
Copy link
Collaborator

Cherry-pick PR to 202405: #19459

mssonicbld pushed a commit that referenced this pull request Jul 9, 2025
… spaces (#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))
    
>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED
sdszhang pushed a commit to sdszhang/sonic-mgmt that referenced this pull request Aug 2, 2025
Code sync sonic-net/sonic-mgmt:202411 => 202412

```
*   3124d52 (HEAD -> code-sync-202412, origin/code-sync-202412) r12f 250710:1626 - Merge remote-tracking branch 'base/202411' into code-sync-202412
|\
| * b1b95dc (base/202411) zitingguo-ms 250513:1848 - Fix PortChannel name matching in verify_attr_change to handle leading spaces (sonic-net#18301)
| * 7461bf3 wrideout-arista 250604:1542 - Determine if the eos switch is running in multiagent mode, and stop/start the (sonic-net#18748)
| * 4346afd Dashuai Zhang 250411:0103 - update d18u8s4 PT0 ASN to 4 bytes (sonic-net#17888)
| * de1b1b4 Ryangwaite 250709:1028 - Skip multi-hop upgrade tests on non-T0 testbeds (sonic-net#19078) (sonic-net#19326)
| * 573d42d Cong Hou 250709:0232 - Update the skip for test test_qos_dscp_mapping.py (sonic-net#19381)
| * 3eb65b9 Yawen 250708:1743 - Unskip test_qos_sai for dualtor-aa-64-breakout (sonic-net#19363)
| * f0c9705 Cong Hou 250707:2351 - xfail generic hash test on dualtor (sonic-net#19383)
| * d378110 eyakubch 250707:0546 - Reduce flakiness of test_l2_configure.py. (sonic-net#18831)
| * 043dba8 ShiyanWangMS 250703:0935 - Fix the ignore pattern - leapsecond file expired warning (sonic-net#19332)
| * 92af38f zitingguo-ms 250703:1958 - Unskip testQosSaiHeadroomPoolWatermark on t0-d18u8s4 (sonic-net#19287) (sonic-net#19342)
| * 0b7e4de Chuan Wu 250704:0334 - Add background traffic for test_pfc_pause_extra_lossless test (sonic-net#19218)
```
opcoder0 pushed a commit to opcoder0/sonic-mgmt that referenced this pull request Dec 8, 2025
… spaces (sonic-net#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))
    
>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED  

Signed-off-by: opcoder0 <110003254+opcoder0@users.noreply.github.com>
AharonMalkin pushed a commit to AharonMalkin/sonic-mgmt that referenced this pull request Dec 16, 2025
… spaces (sonic-net#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))

>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED

Signed-off-by: Aharon Malkin <amalkin@nvidia.com>
gshemesh2 pushed a commit to gshemesh2/sonic-mgmt that referenced this pull request Dec 21, 2025
… spaces (sonic-net#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))

>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED

Signed-off-by: Guy Shemesh <gshemesh@nvidia.com>
gshemesh2 pushed a commit to gshemesh2/sonic-mgmt that referenced this pull request Jan 26, 2026
… spaces (sonic-net#18301)

What is the motivation for this PR?
test_portchannel_interface_tc2_attributes failed with the following error:

        if attr == "mtu":
            output = duthost.shell("show interfaces status | grep -w '^{}' | awk '{{print $4}}'".format(po_name))

>           pytest_assert(output['stdout'] == value, "{} attribute {} failed to change to {}".format(po_name, attr, value))
E           Failed: PortChannel102 attribute mtu failed to change to 3324
This is due to cmd "show interfaces status | grep -w '^{}' | awk '{{print $4}}'" failed to filter out the correct PortChannel interface line when the PortChannel name is indented with spaces:

 PortChannel102              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel104              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel106              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel108              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
 PortChannel109              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1010              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1011              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
PortChannel1012              N/A     100G   9100    N/A           N/A           routed      up       up              N/A         N/A
This PR updates the verify_attr_change function in test_portchannel_interface.py to correctly handle leading spaces in the PortChannel name when parsing interface status output.

How did you do it?
Modified the grep pattern from '^{}' to ^[[:space:]]*{} to match interface lines with leading spaces robustly.

How did you verify/test it?
Run generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes manually on DUT.

generic_config_updater/test_portchannel_interface.py::test_portchannel_interface_tc2_attributes PASSED

Signed-off-by: Guy Shemesh <gshemesh@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants