[VOL-2731] New tests for Multi cast (TT Workflow)
Change-Id: I73cfa36cea718c752088b92394503749c73cc4df
diff --git a/libraries/utils.robot b/libraries/utils.robot
index 4b0fa9f..7487057 100644
--- a/libraries/utils.robot
+++ b/libraries/utils.robot
@@ -265,37 +265,142 @@
... Sanity test performs dhcp and pings (without EAPOL and DHCP flows) for all the ONUs given for the POD
... This keyword can be used to call in any other tests where sanity check is required
... and avoids duplication of code.
+ FOR ${I} IN RANGE 0 ${num_onus}
+ ${src}= Set Variable ${hosts.src[${I}]}
+ ${dst}= Set Variable ${hosts.dst[${I}]}
+ ${service_type}= Get Variable Value ${src['service_type']} "null"
+ Run Keyword IF '${service_type}' != 'mcast' Sanity Test TT one ONU ${src} ${dst}
+ Run Keyword and Ignore Error Collect Logs
+ END
+ Run Keyword and Ignore Error Collect Logs
+
+Sanity Test TT one ONU
+ [Documentation] This keyword performs sanity test for a single ONU for TT workflow
+ ... Tests for one ONU
+ ... Assertions apply to HSIA, VoD, VoIP services
+ [Arguments] ${src} ${dst}
${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
Set Global Variable ${of_id}
${nni_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
... Get NNI Port in ONOS ${of_id}
Set Global Variable ${nni_port}
+ ${onu_device_id}= Get Device ID From SN ${src['onu']}
+ ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
+ ... Get ONU Port in ONOS ${src['onu']} ${of_id}
+ # Check ONU port is Enabled in ONOS
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
+ ... Verify ONU Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2
+ ... Execute ONOS CLI Command ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
+ ... volt-add-subscriber-access ${of_id} ${onu_port}
+ Sleep 30s
+ # Verify ONU state in voltha
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
+ ... ENABLED ACTIVE REACHABLE
+ ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
+ # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
+ Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
+ ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+ ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
+ ... ${dst['container_name']}
+ Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
+ Run Keyword and Ignore Error Collect Logs
+
+Perform Sanity Test TT MCAST
+ [Documentation] This keyword performs Sanity Test Procedure for TT Workflow
+ ... Adds subscribers
+ ... Validates for MCAST
FOR ${I} IN RANGE 0 ${num_onus}
${src}= Set Variable ${hosts.src[${I}]}
${dst}= Set Variable ${hosts.dst[${I}]}
- ${onu_device_id}= Get Device ID From SN ${src['onu']}
- ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
- ... Get ONU Port in ONOS ${src['onu']} ${of_id}
- # Check ONU port is Enabled in ONOS
- Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
- ... Verify ONU Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
- Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2
- ... Execute ONOS CLI Command ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
- ... volt-add-subscriber-access ${of_id} ${onu_port}
- Sleep 30s
- # Verify ONU state in voltha
- Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
- ... ENABLED ACTIVE REACHABLE
- ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
- # TODO: Yet to Verify on the GPON based Physical POD (VOL-2652)
- Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
- ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
- ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
- ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
- ... ${dst['container_name']}
- Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
+ ${service_type}= Get Variable Value ${src['service_type']} "null"
+ Run Keyword IF '${service_type}' == 'mcast' Sanity Test TT MCAST one ONU ${src}
+ ... ${dst}
Run Keyword and Ignore Error Collect Logs
END
+ Run Keyword and Ignore Error Collect Logs
+
+Sanity Test TT MCAST one ONU
+ [Documentation] This keyword performs sanity test for a single ONU for TT workflow
+ ... Tests for one ONU
+ ... Assertions apply to MCAST services
+ [Arguments] ${src} ${dst}
+ # Check for iperf and jq tools
+ ${stdout} ${stderr} ${rc}= Execute Remote Command which iperf jq
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']}
+ ... ${src['container_name']}
+ Pass Execution If ${rc} != 0 Skipping test: iperf / jq not found on the RG
+
+ #Reset the IP on the interface
+ ${output}= Login And Run Command On Remote System sudo ifconfig ${src['dp_iface_name']} 0
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+ # Kill iperf on BNG
+ ${rg_output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
+ ... sudo kill -9 `pidof iperf`
+ ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
+ ... ${dst['container_name']}
+
+ # Setup RG for Multi-cast test
+ ${output}= Login And Run Command On Remote System
+ ... sudo ifconfig ${src['dp_iface_name']} ${src['mcast_rg']} up ; sudo kill -9 `pidof iperf`
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+ ${output}= Login And Run Command On Remote System
+ ... sudo ip route add ${src['mcast_grp_subnet_mask']} dev ${src['dp_iface_name']} scope link
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+
+ # Perform operations for adding subscriber
+ ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
+ Set Global Variable ${of_id}
+ ${nni_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
+ ... Get NNI Port in ONOS ${of_id}
+ Set Global Variable ${nni_port}
+ ${onu_device_id}= Get Device ID From SN ${src['onu']}
+ ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
+ ... Get ONU Port in ONOS ${src['onu']} ${of_id}
+ # Check ONU port is Enabled in ONOS
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
+ ... Verify ONU Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']}
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2
+ ... Execute ONOS CLI Command ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
+ ... volt-add-subscriber-access ${of_id} ${onu_port}
+ Sleep 30s
+ # Verify ONU state in voltha
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
+ ... ENABLED ACTIVE REACHABLE
+ ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
+
+ # Setup iperf on the BNG
+ ${server_output}= Login And Run Command On Remote System
+ ... sudo iperf -c ${dst['dp_iface_ip_qinq']} -u -T 32 -t 60 -i 1 &
+ ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
+ ... ${dst['container_name']}
+
+ # Setup iperf on the RG
+ ${rg_output}= Run Keyword and Continue On Failure Wait Until Keyword Succeeds 90s 5s
+ ... Login And Run Command On Remote System
+ ... rm -rf /tmp/rg_output ; sudo iperf -s -u -B ${dst['dp_iface_ip_qinq']} -i 1 -D >> /tmp/rg_output
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+ Log ${rg_output}
+ Sleep 60s
+ ${output}= Run Keyword and Continue On Failure Wait Until Keyword Succeeds 90s 5s
+ ... Login And Run Command On Remote System
+ ... cat /tmp/rg_output | grep KBytes
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+ Log ${output}
+ Should Contain ${output} KBytes
+
+ # Kill iperf on BNG
+ ${rg_output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
+ ... sudo kill -9 `pidof iperf`
+ ... ${dst['bng_ip']} ${dst['bng_user']} ${dst['bng_pass']} ${dst['container_type']}
+ ... ${dst['container_name']}
+
+ # Kill iperf on the RG
+ ${output}= Run Keyword and Continue On Failure Login And Run Command On Remote System
+ ... sudo kill -9 `pidof iperf`
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+
Setup
[Documentation] Pre-test Setup
@@ -618,6 +723,16 @@
${object}= Evaluate json.loads(r'''${output}''') json
[Return] ${object}
+Run Iperf Test Client for MCAST
+ [Arguments] ${src} ${server} ${args}
+ [Documentation] Login to ${src} and run the iperf client against ${server} using ${args}.
+ ... Return a Dictionary containing the results of the test.
+ ${output} ${stderr} ${rc}= Execute Remote Command sudo iperf -c ${server} ${args} | jq -M -c '.'
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+ Should Be Equal As Integers ${rc} 0
+ ${object}= Evaluate json.loads(r'''${output}''') json
+ [Return] ${object}
+
RestoreONUs
[Documentation] Restore all connected ONUs
[Arguments] ${num_onus}
diff --git a/tests/tt-workflow/Voltha_TT_PODTests.robot b/tests/tt-workflow/Voltha_TT_PODTests.robot
index af97b72..0c8f36e 100644
--- a/tests/tt-workflow/Voltha_TT_PODTests.robot
+++ b/tests/tt-workflow/Voltha_TT_PODTests.robot
@@ -74,7 +74,7 @@
Sleep 60s
END
-Sanity E2E Test for TT
+Sanity E2E Test for TT (HSIA, VoD, VoIP)
[Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
... Validate successful DHCP/E2E ping (no EAPOL and DHCP flows) for the tech profile that is used
... Traffic sent with same vlan from different RGs,
@@ -89,6 +89,19 @@
Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test TT
#Run Keyword If ${has_dataplane} Clean Up Linux
+Sanity E2E Test for TT (MCAST)
+ [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
+ ... Validate successful DHCP/E2E ping (no EAPOL and DHCP flows) for the tech profile that is used
+ ... Traffic sent with same vlan from different RGs,
+ ... should reach the NNI port on the OLT with the expected double tagged vlan ids
+ ... Inner vlans from the RG should not change
+ [Tags] sanityTT-MCAST
+ [Setup] Run Keyword Start Logging SanityTestTT-MCAST
+ [Teardown] Run Keywords Collect Logs
+ ... AND Stop Logging SanityTestTT-MCAST
+ Run Keyword If ${has_dataplane} Clean Up Linux
+ Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test TT MCAST
+
*** Keywords ***
Setup Suite
[Documentation] Set up the test suite