Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementation of multi-DUT and multi-ASIC as per PR 2347 #2417

Merged
merged 6 commits into from Oct 30, 2020

Conversation

sanmalho-git
Copy link
Contributor

\u2026 testing support

Description of PR

Summary:
This is implementation of PR 2347 that described enhancements to support multi-asic and multi-dut

Type of change

  • Bug fix
  • Testbed and Framework(new/improvement)
  • Test case(new/improvement)

Approach

What is the motivation for this PR?

PR sonic-net/SONiC#644 introduced the HLD to support multi ASIC. In the future, multi DUT or Chassis will be supported by SONiC as well. The test infrastructure and some of the customized ansible modules need to be updated to support testing of the upcoming new architectures. This PR is implementation of PR 2347 which tried to propose how to improve the current test infrastructure to support multi-DUT and multi-ASIC systems. The target is to ensure that the existing test scripts are not broken and we can update the tests in incremental way.

How did you do it?

Implemented the proposed classes in PR 2347.

Added the classes described in the PR:

  • SonicAsic - represents an asic, and implements the asic/namespace related operations to hide the complexity of handling the asic/namespace specific details.

    • For now, have added bgp_facts as an example to add 'instance_id' to the bgp_facts module call on a SonicHost.
  • MutliAsicSonicHost - a host with one or more SonicAsics.

  • DutHosts - represents all the DUT's in a testbed.

    • has 'nodes' list to represent each DUT in the testbed.
  • Update duthosts fixture to return an instance of DutHosts instead of a list of SonicHosts

  • Modify duthost fixture to return a MultiAsicSonicHost from duthosts.nodes

How did you verify/test it?

Using the newly added classes, tried out bgp_facts ansible module against:

  • single asic pizza box.
  • multi-asic pizza box
  • single asic multi dut (chassis with linecards that have a single asic).
  • multi-asic multi-dut (chassis with linecards that have multiple asics).

Tested following scenarios were tested against the 4 testbed DUT's above. In the scenarios - duthosts represents a DutHosts instance. Tested with 'command' ansible module (a module that is not impacted by multi-asic), and bgp_facts (a module that has to handle differences for multi-asic)

# Send command on the global / host namespace on all the nodes (duts)
# Return is a dictionary with key being the hostname, and value being output of  ansible module 'cat /etc/sonic/config_db.json'
cmd_out = duthosts.nodes.command("cat /etc/sonic/config_db.json")

# Get bgp_facts for all the asics of all the frontend nodes (nodes/duts with frontpanel ports):
# Return is a dictionary with key being the hostname, and the value being a list of bgp_facts output per asic.
# Even a single asic node would have its value as a list of size 1.
bgp_facts = duthosts.frontend_nodes.bgp_facts(asic_index='all')

# Get bgp_facts for asic0 of all the frontend nodes (nodes/duts with frontpanel ports):
# Return is a dictionary with key being the hostname, and the value being output of bgp_facts ansible module for asic0 on the node.
# For single asic, this would be the output of bgp_facts on global namespace.
bgp_facts_asic0 = duthosts.frontend_nodes.bgp_facts(asic_index=0)

# Get command output on the first node.
# Return is output of the command ansible module in the global namespace.
duthost = duthosts[0]
cmd_out_dut = duthost.command("cat /etc/sonic/config_db.json")

# Get bgp_facts on the first node across all asics. 
# Return is a list of bgp_facts for all asics. For single asic, this will be a list of size 1.
# For single asic node, this would be a list of size 1.
bgp_facts_dut = duthost.bgp_facts(asic_index='all')

# Get bgp_facts on the first asic on the first node.
# Return is the bgp_facts for asic0. For single asic, this will be bgp_facts on the global/host namespace.
bgp_facts_asic0_dut = duthost.bgp_facts(asic_index=0)

Any platform specific information?

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

Documentation

@lgtm-com
Copy link

lgtm-com bot commented Oct 27, 2020

This pull request introduces 3 alerts when merging bc0822d into 553e9ff - view on LGTM.com

new alerts:

  • 1 for __eq__ not overridden when adding attributes
  • 1 for Unnecessary pass
  • 1 for Unused import

@lguohan lguohan requested a review from wangxin October 27, 2020 22:31
tests/common/devices.py Outdated Show resolved Hide resolved
tests/common/devices.py Outdated Show resolved Hide resolved
tests/common/devices.py Outdated Show resolved Hide resolved
tests/common/devices.py Outdated Show resolved Hide resolved
tests/common/devices.py Outdated Show resolved Hide resolved
tests/common/devices.py Outdated Show resolved Hide resolved
tests/common/devices.py Show resolved Hide resolved
tests/common/devices.py Outdated Show resolved Hide resolved
tests/conftest.py Outdated Show resolved Hide resolved
tests/conftest.py Outdated Show resolved Hide resolved
@wangxin wangxin requested review from arlakshm and a team October 28, 2020 08:00
@lgtm-com
Copy link

lgtm-com bot commented Oct 28, 2020

This pull request introduces 3 alerts when merging b76cacb into 928ebb3 - view on LGTM.com

new alerts:

  • 1 for __eq__ not overridden when adding attributes
  • 1 for Inconsistent equality and inequality
  • 1 for Inconsistent equality and hashing

@wangxin
Copy link
Collaborator

wangxin commented Oct 29, 2020

@sanmalho-git The last commit looks good to me. This PR would be perfect if you could:

  • Address the LGTM alerts.
  • Move the comment of the method functions to docstring. Because this is very basic infrastructure code that will be used by people developing test cases, well written docstring could be documentations for them.
  • Handle the merge conflicts.

… testing support

- Added the classes described in the PR:
  - SonicAsic - represents an asic, and implements the asic/namespace related operations to hide the complexity of handling the asic/namespace specific details.
      - For now, have added bgp_facts as an example to add 'instance_id' to the bgp_facts module call on a SonicHost.
  - MutliAsicSonicHost - a host with one or more SonicAsics.
  - DutHosts - represents all the DUT's in a testbed.
      - has 'nodes' list to represent each DUT in the testbed.

- Update duthosts fixture to return an instance of DutHosts instead of a list of SonicHosts
- Modify duthost fixture to return a MultiAsicSonicHost from duthosts.nodes
… testing support

- Added the classes described in the PR:
  - SonicAsic - represents an asic, and implements the asic/namespace related operations to hide the complexity of handling the asic/namespace specific details.
      - For now, have added bgp_facts as an example to add 'instance_id' to the bgp_facts module call on a SonicHost.
  - MutliAsicSonicHost - a host with one or more SonicAsics.
  - DutHosts - represents all the DUT's in a testbed.
      - has 'nodes' list to represent each DUT in the testbed.

- Update duthosts fixture to return an instance of DutHosts instead of a list of SonicHosts
- Modify duthost fixture to return a MultiAsicSonicHost from duthosts.nodes
@lgtm-com
Copy link

lgtm-com bot commented Oct 29, 2020

This pull request introduces 3 alerts when merging 09ae617 into 38fe987 - view on LGTM.com

new alerts:

  • 1 for __eq__ not overridden when adding attributes
  • 1 for Inconsistent equality and inequality
  • 1 for Inconsistent equality and hashing

@lgtm-com
Copy link

lgtm-com bot commented Oct 29, 2020

This pull request introduces 2 alerts when merging 0c5a647 into 38fe987 - view on LGTM.com

new alerts:

  • 2 for Special method has incorrect signature

Copy link
Collaborator

@wangxin wangxin left a comment

Choose a reason for hiding this comment

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

Thank you for your contribution!

@wangxin
Copy link
Collaborator

wangxin commented Oct 30, 2020

retest this please

@wangxin wangxin merged commit f5b414d into sonic-net:master Oct 30, 2020
@sanmalho-git
Copy link
Contributor Author

@wangxin and @arlakshm - Thanks for the guidance for this PR. This is very critical to support SONiC Chassis testing going forward

@sanmalho-git sanmalho-git deleted the multi_dut branch October 30, 2020 14:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants