# Route Local Testing Trace Example ## Test Suite ```gherkin Feature: Local Routing Topology: +-----------------------------------------+ | HOST_B------(LAN)DUT(WAN)------HOST_A | +-----------------------------------------+ @v2 @v3 @full @sanity @route @bvt Scenario: Given authorize CLI of "DUT" * reload factory-default "DUT" * prepare a "HOST_A" to connect to "DUT" * prepare a "HOST_B" to connect to "DUT" * set WAN interface on "DUT" * set LAN interface on "DUT" When set "HOST_A" ip address within "DUT"s WAN subnet And set "HOST_B" ip address within "DUT"s LAN subnet And add static route for "HOST_A" routing to "HOST_B" And add static route for "HOST_B" routing to "HOST_A" Then "HOST_A" will ping "HOST_B" successfully And "HOST_B" will ping "HOST_A" successfully ``` ## Trace ### Given authorize CLI of DUT ```mermaid flowchart TD subgraph loginToDUT p1 --> make_cli_router end subgraph make_cli_router p2 --> p3 p3 --> p4 end p0 --> p-1 -- Load Json to Setup Behave Context Object --> f1 f1 --> loginToDUT loginToDUT -- Create Debug File Handle, Login CLI Session and Return a Router Instance --> f2 f1[Given authorize CLI of DUT] f2[reload factory-default DUT] p0[test_suite/environment.py:27 -> func:before_all -> func:prepare_json]:::code p-1[lib/topology/topology_info.py:8 -> func:prepare_json]:::code p1[lib/steps/login.py:9 -> func:loginToDUT]:::code p2[lib/mdc/router/cli/rp_api/rp_api.py:88 -> func:make_cli_router]:::code p3[lib/mdc/router/cli/utils.py:41 -> func:create_debug_output]:::code p4[lib/mdc/session.py:299 -> func:make_opened_session]:::code classDef code fill:#f96 ``` ### reload factory-default DUT ```mermaid flowchart TD f2 --> p0 p0 --> p1 --> p2 p2 -- Return Config Instance --> p3 p3 -- Set and Assert HostName to 'init_check' --> p4 p4 --> p5 --> p6 p6 -- Router Factory Reset and Close CLI session --> p7 p7 -- Recreate Debug File Handle, Login CLI Session and Return a Router Instance --> f3 f2[reload factory-default DUT] f3[prepare a HOST_A to connect to DUT] p0[lib/steps/common.py:88]:::code p1[lib/mdc/router/cli/rp_api/rp_api.py:37 -> func:go_config]:::code p2[lib/mdc/router/cli/rp_base/rp_base_v2.py:562 class:Config]:::code p3[lib/mdc/router/cli/rp_base/rp_base_v2.py:781 -> func:set_hostname]:::code p4[lib/mdc/router/cli/rp_api/rp_api.py:34 -> func:main]:::code p5[lib/steps/common.py:495 func:reload_factory_default]:::code p6[lib/mdc/router/cli/rp_api/rp_api.py:31 func:close]:::code p7[lib/steps/login.py:9 -> func:loginToDUT]:::code classDef code fill:#f96 ``` ### prepare a HOST_A to connect to DUT ```mermaid flowchart TD f3 --> p0 p0 -- Load HOST_A Information from Behave Context: info --> p1 p1 --> p2 --> p3 --> p4 -- Return SSH Sessioin and Check Control Service Enviroment --> f4 f3[prepare a HOST_A to connect to DUT] p0[lib/steps/common.py:62]:::code p1[lib/atb/hosts.py:185 -> func:make_host, param:info]:::code p2[lib/atb/hosts.py:162 -> func:make_session, param:info]:::code p3[lib/atb/session.py:4 -> class SshSession]:::code p4[lib/atb/session.py:34 -> func:login]:::code f4[prepare a HOST_B to connect to DUT] classDef code fill:#f96 ``` ### prepare a HOST_B to connect to DUT ```mermaid flowchart TD f4 --> p0 p0 -- Load HOST_B Information from Behave Context: info --> p1 p1 --> p2 --> p3 --> p4 -- Return SSH Sessioin and Check Control Service Enviroment --> f5 f4[prepare a HOST_A to connect to DUT] p0[lib/steps/common.py:62]:::code p1[lib/atb/hosts.py:185 -> func:make_host, param:info]:::code p2[lib/atb/hosts.py:162 -> func:make_session, param:info]:::code p3[lib/atb/session.py:4 -> class SshSession]:::code p4[lib/atb/session.py:34 -> func:login]:::code f5[set WAN interface on DUT] classDef code fill:#f96 ``` ### set WAN interface on DUT ```mermaid flowchart TD f4 --> p0 -- Configuration for IP, Mask, VLAN, Port, Gateway --> p1 p1 --> p2 --> p3 -- Set VLAN ID --> p4 --> p5 p5 -- Set the Switch Port to a Specific VLAN ID and Mode --> p6 p6 --> p7 --> p8 -- Set the WAN Interface with Given IP Address and Subnet Mask --> p9 --> p10 -- Show Router Information and Assert IP Address Exist --> f5 f4[set WAN interface on DUT] p0[lib/steps/interface.py:28]:::code p1[lib/mdc/router/cli/rp_api/rp_api.py:37 -> func:go_config]:::code p2[lib/mdc/router/cli/rp_base/rp_base_v2.py:562 class:Config]:::code p3[lib/mdc/router/cli/rp_base/rp_base_v2.py:1050 -> func:set_vlan_id]:::code p4[lib/mdc/router/cli/rp_api/rp_api.py:49 -> func:go_config_if_ethernet]:::code p5[lib/mdc/router/cli/rp_base/rp_base_v2.py:1625 -> func:set_switchport]:::code p6[lib/mdc/router/cli/rp_api/rp_api.py:43 -> func:go_config_if_wan]:::code p7[lib/mdc/router/cli/rp_base/rp_base_v2.py:1384 -> class:ConfigIfWan]:::code p8[lib/mdc/router/cli/rp_base/rp_base_v2.py:1427 -> func:set_wan_interface]:::code p9[lib/mdc/router/cli/rp_api/rp_api.py:34 -> func:main]:::code p10[lib/mdc/router/cli/rp_base/rp_base_v2.py:187 -> func:show_interface]:::code f5[set LAN interface on DUT] classDef code fill:#f96 ``` ### set LAN interface on DUT ```mermaid flowchart TD f5 --> p0 -- Configuration for IP, Mask, VLAN, Port, Gateway --> p4 p4 --> p5 p5 -- Set the Switch Port to a Specific VLAN ID and Mode --> p6 p6 --> p7 --> p8 -- Set the LAN Interface --> p9 --> p10 -- Show Router Information and Assert IP Address Exist --> f6 f5[set LAN interface on DUT] p0[lib/steps/interface.py:28]:::code p4[lib/mdc/router/cli/rp_api/rp_api.py:49 -> func:go_config_if_ethernet]:::code p5[lib/mdc/router/cli/rp_base/rp_base_v2.py:1625 -> func:set_switchport]:::code p6[lib/mdc/router/cli/rp_api/rp_api.py:40 -> func:go_config_if_lan]:::code p7[lib/mdc/router/cli/rp_base/rp_base_v2.py:1237 -> class:ConfigIfLan]:::code p8[lib/mdc/router/cli/rp_base/rp_base_v2.py:1329 -> func:set_lan_interface]:::code p9[lib/mdc/router/cli/rp_api/rp_api.py:34 -> func:main]:::code p10[lib/mdc/router/cli/rp_base/rp_base_v2.py:187 -> func:show_interface]:::code f6[set HOST_A ip address within DUT's WAN subnet] classDef code fill:#f96 ``` ### set HOST_A ip address within DUT's WAN subnet ```mermaid flowchart TD f6 --> p0 -- Set the IP Address and Subnet Mask of a SSH Host --> f7 f6[set HOST_A ip address within DUT's WAN subnet] f7[set HOST_B ip address within DUTs LAN subnet] p0[lib/steps/interface.py:132]:::code classDef code fill:#f96 ``` ### set HOST_B ip address within DUT's LAN subnet ```mermaid flowchart TD f7 --> p0 -- Set the IP Address and Subnet Mask of a SSH Host --> f8 f7[set HOST_B ip address within DUT's LAN subnet] f8[add static route for HOST_A routing to HOST_B] p0[lib/steps/interface.py:132]:::code classDef code fill:#f96 ``` ### add static route for HOST_A routing to HOST_B ```mermaid flowchart TD f8 --> p0 --> p1 -- Add a Route to the Device --> p2 --> p3 --> f9 f8[add static route for HOST_A routing to HOST_B] f9[add static route for HOST_B routing to HOST_A] p0[lib/steps/interface.py:206]:::code p1[lib/atb/control.py:254 -> func:add_route]:::code p2[lib/atb/control.py:10 -> func:login_as_root]:::code p3[lib/atb/control.py:23 -> func:logout_from_root]:::code classDef code fill:#f96 ``` ### add static route for HOST_B routing to HOST_A ```mermaid flowchart TD f9 --> p0 --> p1 -- Add a Route to the Device --> p2 --> p3 --> f10 f9[add static route for HOST_B routing to HOST_A] f10[HOST_A will ping HOST_B successfully] p0[lib/steps/interface.py:206]:::code p1[lib/atb/control.py:254 -> func:add_route]:::code p2[lib/atb/control.py:10 -> func:login_as_root]:::code p3[lib/atb/control.py:23 -> func:logout_from_root]:::code classDef code fill:#f96 ``` ### HOST_A will ping HOST_B successfully ```mermaid flowchart TD f9 --> p0 -- Check Login or not --> p1 -- Ping for 4 times --> f10 f9[HOST_A will ping HOST_B successfully] f10[HOST_B will ping HOST_A successfully] p0[lib/steps/common.py:293]:::code p1[lib/steps/common.py:107 -> func:do_ping]:::code classDef code fill:#f96 ``` ### HOST_B will ping HOST_A successfully ```mermaid flowchart TD f9 --> p0 -- Check Login or not --> p1 -- Ping for 4 times --> f10 f9[HOST_B will ping HOST_A successfully] f10[END] p0[lib/steps/common.py:293]:::code p1[lib/steps/common.py:107 -> func:do_ping]:::code classDef code fill:#f96 ```