Add ip/route configuration for subscriber test
Change-Id: I2034aa19a514782e54f6a161649b1b8d1b920e20
diff --git a/Jenkinsfile-rcordlite-topdown b/Jenkinsfile-rcordlite-topdown
index ad9f5de..e2d106e 100644
--- a/Jenkinsfile-rcordlite-topdown
+++ b/Jenkinsfile-rcordlite-topdown
@@ -256,7 +256,7 @@
sh """
export KUBECONFIG=$WORKSPACE/${configBaseDir}/${configKubernetesDir}/${configFileName}.conf
cd $WORKSPACE/cord-tester/src/test/cord-api/Tests/
- pybot -d Log -T -v src_ip:${deployment_config.srcHost.ip} -v src_user:${deployment_config.srcHost.user} -v src_pass:${deployment_config.srcHost.pass} -v dst_user:${deployment_config.dstHost.user} -v dst_pass:${deployment_config.dstHost.pass} -v dst_ip:${deployment_config.dstHost.ip} -v dst_host_ip:${deployment_config.dstHost.hostIp} -v src_gateway:${deployment_config.srcHost.gateway} -v dst_gateway:${deployment_config.dstHost.gateway} -v init_state:disabled -v INITIAL_STATUS:FAIL -v ENABLE_STATUS:PASS -e zerotouch Subscriber_StatusChecks.txt || true
+ pybot -d Log -T -v src_ip:${deployment_config.srcHost.ip} -v src_user:${deployment_config.srcHost.user} -v src_pass:${deployment_config.srcHost.pass} -v src_host_ip:${deployment_config.srcHost.hostIp} -v src_iface:${deployment_config.srcHost.iface} -v dst_user:${deployment_config.dstHost.user} -v dst_pass:${deployment_config.dstHost.pass} -v dst_ip:${deployment_config.dstHost.ip} -v dst_host_ip:${deployment_config.dstHost.hostIp} -v dst_iface:${deployment_config.dstHost.iface} -v src_gateway:${deployment_config.srcHost.gateway} -v dst_gateway:${deployment_config.dstHost.gateway} -v init_state:disabled -v INITIAL_STATUS:FAIL -v ENABLE_STATUS:PASS -e zerotouch Subscriber_StatusChecks.txt || true
"""
}
}
diff --git a/src/test/cord-api/Framework/Subscriber.robot b/src/test/cord-api/Framework/Subscriber.robot
new file mode 100644
index 0000000..e4791f0
--- /dev/null
+++ b/src/test/cord-api/Framework/Subscriber.robot
@@ -0,0 +1,140 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+*** Settings ***
+Documentation Library of functions related to RG (source host)
+Library OperatingSystem
+Library SSHLibrary
+Library restApi.py
+
+*** Keywords ***
+Send EAPOL Message
+ [Arguments] ${ip} ${user} ${pass} ${iface} ${conf_file} ${prompt}=$ ${prompt_timeout}=60s
+ [Documentation] SSH's into the RG (src) and executes a particular auth request via wpa_supplicant client. Requested packet should exist on src.
+ ${conn_id}= SSHLibrary.Open Connection ${ip} prompt=${prompt} timeout=${prompt_timeout}
+ SSHLibrary.Login ${user} ${pass}
+ SSHLibrary.Write sudo wpa_supplicant -B -i ${iface} -Dwired -c /etc/wpa_supplicant/${conf_file}
+ Read Until [sudo] password for ${user}:
+ SSHLibrary.Write ${pass}
+ ${result}= Read Until wpa_supplicant
+ Log To Console \n\n ${result}\n
+ SSHLibrary.Close Connection
+ Should Contain ${result} Successfully initialized wpa_supplicant
+ [Return] ${result}
+
+Delete IP Addresses from Interface on Remote Host
+ [Arguments] ${ip} ${user} ${pass} ${interface} ${prompt}=$ ${prompt_timeout}=60s
+ ${conn_id}= SSHLibrary.Open Connection ${ip} prompt=${prompt} timeout=${prompt_timeout}
+ SSHLibrary.Login ${user} ${pass}
+ SSHLibrary.Write sudo ip addr flush dev ${interface}; echo $?
+ Read Until [sudo] password for ${user}:
+ SSHLibrary.Write ${pass}
+ ${result}= Read Until ${prompt}
+ SSHLibrary.Close Connection
+
+Subscriber Status Check
+ [Arguments] ${onu_device}
+ [Documentation] Returns Status from Subscribers List for a particular ONU device
+ ${json_result}= restApi.ApiGet VOLT_SUBSCRIBER
+ Log ${json_result}
+ ${json_result_list}= Get From dictionary ${json_result} items
+ ${getJsonDict}= utils.getDictFromListOfDict ${json_result_list} onu_device ${onu_device}
+ ${status}= Get From Dictionary ${getJsonDict} status
+ [Return] ${status}
+
+Create Subscriber
+ [Arguments] ${subscriber_list} ${list_index}
+ [Documentation] Sends a POST to create a subscriber in XOS
+ ${slist} = Get Variable Value ${subscriber_list}
+ ${subscriber_dictionary}= utils.listToDict ${slist} ${list_index}
+ ${api_result}= restApi.ApiPost VOLT_SUBSCRIBER ${subscriber_dictionary}
+ Should Be True ${api_result}
+ ${Subscriber_id}= Get From Dictionary ${api_result} id
+ Set Global Variable ${Subscriber_id}
+ [Return] ${Subscriber_id}
+
+Retrieve Subscriber
+ [Arguments] ${ctag}
+ [Documentation] Returns the subscriber id based on the subscriber's C-Tag
+ ${json_result}= restApi.ApiGet VOLT_SUBSCRIBER
+ Log ${json_result}
+ ${json_result_list}= Get From dictionary ${json_result} items
+ ${getJsonDict}= utils.getDictFromListOfDict ${json_result_list} c_tag ${ctag}
+ ${id}= Get From Dictionary ${getJsonDict} id
+ [Return] ${id}
+
+Delete Subscriber
+ [Arguments] ${ctag}
+ [Documentation] Deletes a given subscriber based on its c_tag
+ ${id}= Retrieve Subscriber ${ctag}
+ ${api_result}= restApi.ApiChameleonDelete VOLT_SUBSCRIBER ${id}
+ Should Be True ${api_result}
+
+Add Double Vlan Interface on Host
+ [Arguments] ${ip} ${user} ${pass} ${interface} ${stag} ${ctag} ${prompt}=$ ${prompt_timeout}=60s
+ ${conn_id}= SSHLibrary.Open Connection ${ip} prompt=${prompt} timeout=${prompt_timeout}
+ SSHLibrary.Login ${user} ${pass}
+ SSHLibrary.Write sudo ip link add link ${interface} name ${interface}.${stag} type vlan id ${stag}
+ Read Until [sudo] password for ${user}:
+ SSHLibrary.Write ${pass}
+ SSHLibrary.Write sudo ip link set ${interface}.${stag} up
+ ${result}= Read Until ${prompt}
+ SSHLibrary.Write sudo ip link add link ${interface}.${stag} name ${interface}.${stag}.${ctag} type vlan id ${ctag}
+ ${result}= Read Until ${prompt}
+ SSHLibrary.Write sudo ip link set ${interface}.${stag}.${ctag} up
+ ${result}= Read Until ${prompt}
+ SSHLibrary.Write ifconfig ${interface}.${stag}.${ctag}
+ ${result}= Read Until ${prompt}
+ SSHLibrary.Close Connection
+
+Delete Interface on Remote Host
+ [Arguments] ${ip} ${user} ${pass} ${interface} ${prompt}=$ ${prompt_timeout}=60s
+ ${conn_id}= SSHLibrary.Open Connection ${ip} prompt=${prompt} timeout=${prompt_timeout}
+ SSHLibrary.Login ${user} ${pass}
+ SSHLibrary.Write sudo ip link del ${interface}
+ Read Until [sudo] password for ${user}:
+ SSHLibrary.Write ${pass}
+ Read Until ${prompt}
+ SSHLibrary.Close Connection
+
+Add Ip Address on Interface on Host
+ [Arguments] ${ip} ${user} ${pass} ${ip_address} ${interface} ${prompt}=$ ${prompt_timeout}=60s
+ ${conn_id}= SSHLibrary.Open Connection ${ip} prompt=${prompt} timeout=${prompt_timeout}
+ SSHLibrary.Login ${user} ${pass}
+ SSHLibrary.Write sudo ip addr add ${ip_address} dev ${interface}
+ Read Until [sudo] password for ${user}:
+ SSHLibrary.Write ${pass}
+ Read Until ${prompt}
+ SSHLibrary.Close Connection
+
+Start DHCP Server on Remote Host
+ [Arguments] ${ip} ${user} ${pass} ${interface} ${prompt}=$ ${prompt_timeout}=60s
+ ${conn_id}= SSHLibrary.Open Connection ${ip} prompt=${prompt} timeout=${prompt_timeout}
+ SSHLibrary.Login ${user} ${pass}
+ SSHLibrary.Write sudo dhcpd -cf /etc/dhcp/dhcpd.conf ${interface}
+ Read Until [sudo] password for ${user}:
+ SSHLibrary.Write ${pass}
+ ${result}= Read Until ${prompt}
+ Should Contain ${result} Listening on LPF/${interface}
+ SSHLibrary.Close Connection
+
+Add Route to Remote Host
+ [Arguments] ${ip} ${user} ${pass} ${subnet} ${gateway} ${interface} ${prompt}=$ ${prompt_timeout}=60s
+ ${conn_id}= SSHLibrary.Open Connection ${ip} prompt=${prompt} timeout=${prompt_timeout}
+ SSHLibrary.Login ${user} ${pass}
+ SSHLibrary.Write sudo ip route add ${subnet} via ${gateway} dev ${interface}
+ Read Until [sudo] password for ${user}:
+ SSHLibrary.Write ${pass}
+ ${result}= Read Until ${prompt}
+ SSHLibrary.Close Connection
\ No newline at end of file
diff --git a/src/test/cord-api/Tests/Subscriber_StatusChecks.txt b/src/test/cord-api/Tests/Subscriber_StatusChecks.txt
index cebb7ff..9b969f4 100644
--- a/src/test/cord-api/Tests/Subscriber_StatusChecks.txt
+++ b/src/test/cord-api/Tests/Subscriber_StatusChecks.txt
@@ -1,6 +1,7 @@
*** Settings ***
Documentation Test suite for checking the subscriber status after discovery
Suite Setup Setup
+Suite Teardown Teardown
Test Template Subscriber Status Test
Library Collections
Library String
@@ -9,6 +10,7 @@
Library RequestsLibrary
Library ../Framework/utils/utils.py
Resource ../Framework/utils/utils.robot
+Resource ../Framework/Subscriber.robot
Library ../Framework/restApi.py
*** Variables ***
@@ -17,6 +19,8 @@
&{status} status=test
${src_ip} X.X.X.X
${src_gateway} X.X.X.X
+${src_host_ip} X.X.X.X
+${src_iface} eth0
${src_user} user
${src_pass} pass
${dst_ip} X.X.X.X
@@ -24,6 +28,7 @@
${dst_pass} pass
${dst_gateway} X.X.X.X
${dst_host_ip} X.X.X.X
+${dst_iface} eth0
${init_state} xxxxxxx
*** Test Cases *** TYPE LISTINDEX
@@ -37,13 +42,17 @@
*** Keywords ***
Setup
- [Documentation] Read input file and send arping requests from host/dst to their gateways
+ [Documentation] Read input file and setup IP/route and send arping requests from host/dst to their gateways
Read InputFile
+ Add IP Address on Interface on Host ${src_ip} ${src_user} ${src_pass} ${src_host_ip}/24 ${src_iface}
+ Add Route to Remote Host ${src_ip} ${src_user} ${src_pass} ${src_host_ip} ${dst_gateway} ${src_iface}
+ Add IP Address on Interface on Host ${dst_ip} ${dst_user} ${dst_pass} ${dst_host_ip}/24 ${dst_iface}
+ Add Route to Remote Host ${dst_ip} ${dst_user} ${dst_pass} ${dst_host_ip} ${src_gateway} ${dst_iface}
Run Keyword And Ignore Error Wait Until Keyword Succeeds 300s 5s Ping Gateway ${src_ip} ${src_user} ${src_pass} ${src_gateway}
Run Keyword And Ignore Error Wait Until Keyword Succeeds 300s 5s Ping Gateway ${dst_ip} ${dst_user} ${dst_pass} ${dst_gateway}
Read InputFile
- ${SubscriberList}= utils.jsonToList ${PATHFILE} SubscriberInfo
+ ${SubscriberList}= utils.jsonToList ${PATHFILE} SubscriberInfo
Set Suite Variable ${slist} ${SubscriberList}
Set Global Variable ${Subscriber_Id} ${EMPTY}
Set Global Variable ${status} ${EMPTY}
@@ -104,3 +113,8 @@
Should Contain ${result} 0% unanswered
Log To Console \n ${result}
SSHLibrary.Close Connection
+
+Teardown
+ [Documentation] Delete IP on src/dst host
+ Delete IP Addresses from Interface on Remote Host ${src_ip} ${src_user} ${src_pass} ${src_iface}
+ Delete IP Addresses from Interface on Remote Host ${dst_ip} ${dst_user} ${dst_pass} ${dst_iface}