From dc44fb3a6c040a2802d1a92ba32bc97609835abf Mon Sep 17 00:00:00 2001 From: Jimi Chen Date: Fri, 8 Apr 2022 14:08:14 +0800 Subject: [PATCH] Add static-anycast-gateway(SAG) test plan --- docs/testplan/Img/SAG_Topology.png | Bin 0 -> 70206 bytes docs/testplan/SAG-test-plan.md | 265 +++++++++++++++++++++++++++++ 2 files changed, 265 insertions(+) create mode 100755 docs/testplan/Img/SAG_Topology.png create mode 100644 docs/testplan/SAG-test-plan.md diff --git a/docs/testplan/Img/SAG_Topology.png b/docs/testplan/Img/SAG_Topology.png new file mode 100755 index 0000000000000000000000000000000000000000..92c818625fcd8666c0cbdaa966c17fd8b7fe7e46 GIT binary patch literal 70206 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%0AQgpE#2F2d>qY`Zt~_ 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ðMMrH9aVdu=OU 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 literal 0 HcmV?d00001 diff --git a/docs/testplan/SAG-test-plan.md b/docs/testplan/SAG-test-plan.md new file mode 100644 index 0000000000..c910188513 --- /dev/null +++ b/docs/testplan/SAG-test-plan.md @@ -0,0 +1,265 @@ +# SONiC SAG Test Plan HLD + +## Revision History + +[© Edgecore Networks](https://www.edge-core.com/) + +| Revision No| Description | Author | Contributors |Date | +| :-------------: |:-------------:| :-----:|:----------:|:-----:| +|1.0| SAG Test Cases Version 1.0| [Jimi Chen](https://github.com/superchild), [Josh Yang](https://github.com/JoshYangEC)| [Jimi Chen](https://github.com/superchild), [Josh Yang](https://github.com/JoshYangEC) | 8 April 2022| + +## Table of Contents + +- Overview +- Scope +- Introduction +- Testbed +- Experimental Setup Configuration +- Test Cases + - Test Cases for IPv4 + - Test Case # 1: Testing pingable to SAG using CLI to setup SAG + - Test Case # 2: Testing routing over SAG using CLI to setup SAG + - Test Case # 3: Testing pingable and routing over SAG after changing mac address using CLI to setup SAG + - Test Case # 4: Testing pingable and routing over SAG after disabled and then enabled SAG using CLI to setup SAG + - Test Case # 5: Testing pingable and routing over SAG after config reload using CLI to setup SAG + - Test Cases for IPv6 + - Test Case # 1: Testing pingable to SAG using CLI to setup SAG + - Test Case # 2: Testing routing over SAG using CLI to setup SAG + - Test Case # 3: Testing pingable and routing over SAG after changing mac address using CLI to setup SAG + - Test Case # 4: Testing pingable and routing over SAG after disabled and then enabled SAG using CLI to setup SAG + - Test Case # 5: Testing pingable and routing over SAG after config reload using CLI to setup SAG + +## Overview + +In this HLD we will perform Static Anycast Gateway (SAG) functional level testing in a SONiC based testing environment. +In each test case we have given sample topology, reference commands and expected output. + +## Scope + +This high-level design document describes the functional level testing of SAG in SONiC. +The scope of this test plan is shown as follows: + +- Check whether SAG can be pingable or not +- Check whether the routing over SAG is correct or not +- Check whether SAG can be pingable and routing over SAG is correct or not after changing mac address of SAG +- Check whether SAG can be pingable and routing over SAG is correct or not after disabled and then enabled SAG +- Check whether SAG can be pingable and routing over SAG or not after config reload + +## Introduction + +SAG provides a default gateway mechanism including IPv4 and IPv6 address setting into SAG, and SAG also can be setup using CLI. +In this HLD, we will describe different test cases for functional testing of SAG with IPv4 and IPv6 address using CLI to setup SAG. + +## Testbed + +These test cases will be run in the proposed [PTF32 topology](https://github.com/Azure/sonic-mgmt/blob/master/ansible/vars/topo_ptf32.yml) or [PTF64 topology](https://github.com/Azure/sonic-mgmt/blob/master/ansible/vars/topo_ptf64.yml). +It is assumed that such a configuration is deployed on the chassis. + +### Supported Topology + +The test will be supported on ptf32, ptf64. + +## Experimental Setup Configuration + +Using the baseline testbed from the SONiC home page, we will be building a testing environment with different testing scenarios. +As shown in the following topology, there are two parts of test cases in this HLD, e.g., IPv4 and IPv6. +The details of the scenarios and testing steps are given in the following section. + + +![SAG Topology](./Img/SAG_Topology.png)   +## Test Cases + +## Test Cases for IPv4 + +The following test cases #1 ~ #5 are discussed and verified using IPv4 address for SAG. + +### Test Case # 1: Testing pingable of SAG using CLI to setup SAG + +- Test steps + + 1. setup host1 in eth0 of ptf + 2. config mac address of SAG1 using CLI + 3. config ipv4 address of SAG1 using CLI + 4. enable SAG using CLI + 5. flush all neighbor of host1 and then let host1 ping SAG1 + 6. verify SAG in the neighbor of host1 + +- Pass/Fail Criteria + + - Test case is pass if SAG1 is found as neighbor of host1 after step 6 + +### Test Case # 2: Testing routing over SAG using CLI to setup SAG + +- Test steps + + 1. setup host1 and host2 in eth0 and eth1 of ptf respectively + 2. config mac address of SAG1 using CLI + 3. config ipv4 address of SAG1 using CLI + 4. enable SAG using CLI + 5. config ipv4 address of vlan interface (VLAN2) + 6. flush all neighbor of host2 and then let host2 ping VLAN2 + 7. flush all neighbor of host1 and then let host1 ping host2 + 8. verify SAG in the neighbor of host1 +> +- Pass/Fail Criteria + - Test case is pass if host2 is pingable after step 7 + - Test case is pass if SAG1 is found as neighbor of host1 after step 8 + +### Test Case # 3: Testing pingable and reachable over SAG after changing mac address using CLI to setup SAG + +- Test steps + 1. setup host1 and host2 in eth0 and eth1 of ptf respectively + 2. config mac address (MAC1) of SAG1 using CLI + 3. config ipv4 address of SAG1 using CLI + 4. enable SAG using CLI + 5. config ipv4 address of vlan interface (VLAN2) + 6. flush all neighbor of host1 and then let host1 ping host2 + 7. verify neighbor of host1 + 8. change mac address of SAG1 to MAC2 using CLI + 9. flush all neighbor of host1 and then let host1 ping host2 + 10. verify neighbor of host1 + +- Pass/Fail Criteria + - Test case is pass if host2 is pingable after step 6 + - Test case is pass if SAG1 is found as neighbor of host1 after step 7 before changing mac + - Test case is pass if host2 is pingable after step 9 + - Test case is pass if SAG1 is found as neighbor of host1 after step 10 after changing mac address of SAG1 + +### Test Case # 4: Testing pingable and reachable over SAG after disabled and then enabled SAG using CLI to setup SAG   +- Test steps + 1. setup host1 and host2 in eth0 and eth1 of ptf respectively + 2. config mac address of SAG1 using CLI + 3. config ipv4 address of SAG1 using CLI + 4. config ipv4 address of vlan interface (VLAN2) + 5. enable SAG using CLI + 6. disable SAG using CLI + 7. flush all neighbor of host1 and then let host1 ping SAG1 + 8. verify neighbor of host1 + 9. flush all neighbor of host1 and then let host1 ping host2 + 10. verify neighbor of host1 + 11. enable SAG using CLI + 12. flush all neighbor of host1 and then let host1 ping SAG1 + 13. verify neighbor of host1 + 14. flush all neighbor of host1 and then let host1 ping host2 + 15. verify neighbor of host1 + +- Pass/Fail Criteria + - Test case is pass if SAG1 is not found as neighbor of host1 after step 8 + - Test case is pass if host2 is not pingable after step 9 + - Test case is pass if SAG1 is not found as neighbor of host1 after step 10 + - Test case is pass if SAG1 is found as neighbor of host1 after step 13 + - Test case is pass if host2 is pingable after step 14 + - Test case is pass if SAG1 is found as neighbor of host1 after step 15   + +### Test Case # 5: Testing pingable and reachable over SAG after config reload using CLI to setup SAG + +- Test steps + 1. setup host1 and host2 in eth0 and eth1 of ptf respectively + 2. config mac address of SAG1 using CLI + 3. config ipv4 address of SAG1 using CLI + 4. enable SAG using CLI + 5. config ipv4 address of vlan interface (VLAN2) + 6. config reload + 7. flush all neighbor of host1 and then let host1 ping SAG1 + 8. verify neighbor of host1 + +- Pass/Fail Criteria + - Test case is pass if SAG1 is found as neighbor of host1 after step8 + +## Test Cases for IPv6 + +The following test cases #1 ~ #5 are discussed and verified using IPv6 address for SAG. + +### Test Case # 1: Testing pingable of SAG using CLI to setup SAG + +- Test steps + + 1. setup host1 in eth0 of ptf + 2. config mac address of SAG1 using CLI + 3. config ipv6 address of SAG1 using CLI + 4. enable SAG using CLI + 5. flush all neighbor of host1 and then let host1 ping SAG1 + 6. verify SAG in the neighbor of host1 + +- Pass/Fail Criteria + + - Test case is pass if SAG1 is found as neighbor of host1 after step 6 + +### Test Case # 2: Testing routing over SAG using CLI to setup SAG + +- Test steps + + 1. setup host1 and host2 in eth0 and eth1 of ptf respectively + 2. config mac address of SAG1 using CLI + 3. config ipv6 address of SAG1 using CLI + 4. enable SAG using CLI + 5. config ipv6 address of vlan interface (VLAN2) + 6. flush all neighbor of host2 and then let host2 ping VLAN2 + 7. flush all neighbor of host1 and then let host1 ping host2 + 8. verify SAG in the neighbor of host1 + +- Pass/Fail Criteria + - Test case is pass if host2 is pingable after step 7 + - Test case is pass if SAG1 is found as neighbor of host1 after step 8 + +### Test Case # 3: Testing pingable and reachable over SAG after changing mac address using CLI to setup SAG + +- Test steps + 1. setup host1 and host2 in eth0 and eth1 of ptf respectively + 2. config mac address (MAC1) of SAG1 using CLI + 3. config ipv6 address of SAG1 using CLI + 4. enable SAG using CLI + 5. config ipv6 address of vlan interface (VLAN2) + 6. flush all neighbor of host1 and then let host1 ping host2 + 7. verify neighbor of host1 + 8. change mac address of SAG1 to MAC2 using CLI + 9. flush all neighbor of host1 and then let host1 ping host2 + 10. verify neighbor of host1 + +- Pass/Fail Criteria + - Test case is pass if host2 is pingable after step 6 + - Test case is pass if SAG1 is found as neighbor of host1 after step 7 before changing mac + - Test case is pass if host2 is pingable after step 9 + - Test case is pass if SAG1 is found as neighbor of host1 after step 10 after changing mac address of SAG1 + +### Test Case # 4: Testing pingable and reachable over SAG after disabled and then enabled SAG using CLI to setup SAG + +- Test steps + 1. setup host1 and host2 in eth0 and eth1 of ptf respectively + 2. config mac address of SAG1 using CLI + 3. config ipv6 address of SAG1 using CLI + 4. config ipv6 address of vlan interface (VLAN2) + 5. enable SAG using CLI + 6. disable SAG using CLI + 7. flush all neighbor of host1 and then let host1 ping SAG1 + 8. verify neighbor of host1 + 9. flush all neighbor of host1 and then let host1 ping host2 + 10. verify neighbor of host1 + 11. enable SAG using CLI + 12. flush all neighbor of host1 and then let host1 ping SAG1 + 13. verify neighbor of host1 + 14. flush all neighbor of host1 and then let host1 ping host2 + 15. verify neighbor of host1 + +- Pass/Fail Criteria + - Test case is pass if SAG1 is not found as neighbor of host1 after step 8 + - Test case is pass if host2 is not pingable after step 9 + - Test case is pass if SAG1 is not found as neighbor of host1 after step 10 + - Test case is pass if SAG1 is found as neighbor of host1 after step 13 + - Test case is pass if host2 is pingable after step 14 + - Test case is pass if SAG1 is found as neighbor of host1 after step 15 + + ### Test Case # 5: Testing pingable and reachable over SAG after config reload using CLI to setup SAG + +- Test steps + 1. setup host1 and host2 in eth0 and eth1 of ptf respectively + 2. config mac address of SAG1 using CLI + 3. config ipv6 address of SAG1 using CLI + 4. enable SAG using CLI + 5. config ipv6 address of vlan interface (VLAN2) + 6. config reload + 7. flush all neighbor of host1 and then let host1 ping SAG1 + 8. verify neighbor of host1 + +- Pass/Fail Criteria + - Test case is pass if SAG1 is found as neighbor of host1 after step8 \ No newline at end of file