bbsim scale tests dynamically
Change-Id: I961df5619bbd1769f80cabe869f8bd31d7b1638c
diff --git a/src/test/cord-api/Tests/BBSim/BBSIMScale.robot b/src/test/cord-api/Tests/BBSim/BBSIMScale.robot
new file mode 100644
index 0000000..f62f4f7
--- /dev/null
+++ b/src/test/cord-api/Tests/BBSim/BBSIMScale.robot
@@ -0,0 +1,121 @@
+# 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 Test various E2E conditions for seba-in-a-box
+Suite Setup Setup
+Suite Teardown Teardown
+Library Collections
+Library String
+Library OperatingSystem
+Library XML
+Library RequestsLibrary
+Library bbsim_utils.py
+Library ../../Framework/utils/utils.py
+Resource ../../Framework/utils/utils.robot
+Library ../../Framework/restApi.py
+Resource ../../Framework/Subscriber.robot
+Resource ../../Framework/ATTWorkFlowDriver.robot
+Resource ../../Framework/Kubernetes.robot
+Resource ../../Framework/ONU.robot
+Resource ../../Framework/DHCP.robot
+Variables ../../Properties/RestApiProperties.py
+
+*** Variables ***
+${number_of_onus} 16
+
+*** Test Cases ***
+Create Subscriber and Whitelist for ONUs
+ [Documentation] Creates whitelists in ATT-WF for each onu device
+ [Tags] create
+ ${att_workflow_service_id}= Get Service Owner Id ${ATT_SERVICE}
+ ${volt_service_id}= Get Service Owner Id ${VOLT_SERVICE}
+ ${rcord_service_id}= Get Service Owner Id /xosapi/v1/rcord/rcordservices
+ CORD Post ${VOLT_DEVICE} {'device_type': 'openolt', 'host': 'bbsim.voltha.svc', 'port': 50060, 'switch_datapath_id': 'of:0000000000000002', 'switch_port': '3', 'outer_tpid': '0x8100', 'uplink': '65536', 'nas_id': 'NAS_ID', 'serial_number': 'bbsim.voltha.svc:50060', 'volt_service_id': ${volt_service_id}}
+ @{subscribers}= Generate Subscribers ${number_of_onus} ${rcord_service_id}
+ : FOR ${subscriber} IN @{subscribers}
+ \ Log To Console ${subscriber}
+ \ CORD Post ${VOLT_SUBSCRIBER} ${subscriber}
+ @{whitelists}= Generate Whitelists ${number_of_onus} ${att_workflow_service_id}
+ : FOR ${whitelist} IN @{whitelists}
+ \ Log To Console ${whitelist}
+ \ CORD Post ${ATT_WHITELIST} ${whitelist}
+
+ONUs Discovered
+ [Documentation] Validates All ONU Devices are discovered and retrieve SNs
+ [Tags] onudiscovery
+ Wait Until Keyword Succeeds 120s 5s Validate Number of ONU Devices ${number_of_onus}
+
+Validate ONU States
+ [Documentation] Validates All ONU Device states are "enabled" and "active"
+ [Tags] onustates
+ : FOR ${onu} IN @{serial_numbers}
+ \ Wait Until Keyword Succeeds 120s 5s Validate ONU States ACTIVE ENABLED ${onu}
+
+Validate ATT WF Driver SIs
+ [Documentation] Validates all service instances per onu devices become "approved" and "dhcpdiscovered"
+ [Tags] serviceinstances notready
+ : FOR ${onu} IN @{serial_numbers}
+ \ Wait Until Keyword Succeeds 180s 2s Validate ATT Workflow Driver SI ENABLED APPROVED ${onu}
+ \ Wait Until Keyword Succeeds 240s 2s Validate ATT Workflow Driver SI DHCP State DHCPACK ${onu}
+
+
+*** Keywords ***
+Setup
+ ${server_ip}= Get Environment Variable SERVER_IP localhost
+ ${port}= Get Environment Variable SERVER_PORT 30001
+ ${auth} = Create List ${XOS_USER} ${XOS_PASSWD}
+ ${HEADERS} Create Dictionary Content-Type=application/json
+ Create Session ${server_ip} http://${server_ip}:${port} auth=${AUTH} headers=${HEADERS}
+ @{container_list}= Create List
+ Append To List ${container_list} att-workflow-att-workflow-driver
+ Append To List ${container_list} seba-services-volt
+ Append To List ${container_list} seba-services-rcord
+ Append To List ${container_list} seba-services-fabric-crossconnect
+ Append To List ${container_list} seba-services-onos-service
+ Append To List ${container_list} xos-core
+ Append To List ${container_list} vcore
+ Set Suite Variable ${container_list}
+
+Teardown
+ Wait Until Keyword Succeeds 60s 2s Clean Up Objects ${VOLT_SUBSCRIBER}
+ Wait Until Keyword Succeeds 60s 2s Clean Up Objects ${ATT_WHITELIST}
+ Wait Until Keyword Succeeds 60s 2s Clean Up Objects ${VOLT_DEVICE}
+ Wait Until Keyword Succeeds 60s 2s Clean Up Objects ${ATT_SERVICEINSTANCES}
+ Delete All Sessions
+ #Get Pod Logs
+
+Get Pod Logs
+ : FOR ${pod} IN @{container_list}
+ \ ${full_pod_name}= Run kubectl get pods --all-namespaces | grep '${pod}' | head -1 | awk '{print $2}'
+ \ ${namespace}= Run kubectl get pods --all-namespaces | grep ' ${pod}' | head -1 | awk '{print $1}'
+ \ ${output}= Run kubectl logs --timestamps -n ${namespace} ${full_pod_name}
+ \ Log ${output}
+
+Validate Number of ONU Devices
+ [Arguments] ${expected_onus}
+ ${resp}= CORD Get ${ONU_DEVICE}
+ ${jsondata}= To Json ${resp.content}
+ Log ${jsondata}
+ ${length}= Get Length ${jsondata['items']}
+ @{serial_numbers}= Create List
+ : FOR ${INDEX} IN RANGE 0 ${length}
+ \ ${value}= Get From List ${jsondata['items']} ${INDEX}
+ \ ${sn}= Get From Dictionary ${value} serial_number
+ \ ${contains}= Evaluate "BBSM" in """${sn}"""
+ \ Run Keyword if '${contains}' == 'True' Append To List ${serial_numbers} ${sn}
+ Set Suite Variable ${serial_numbers}
+ ${length_of_bbsim_onus}= Get Length ${serial_numbers}
+ Should Be Equal as Integers ${length_of_bbsim_onus} ${expected_onus}
+
diff --git a/src/test/cord-api/Tests/BBSim/bbsim_utils.py b/src/test/cord-api/Tests/BBSim/bbsim_utils.py
new file mode 100644
index 0000000..a813624
--- /dev/null
+++ b/src/test/cord-api/Tests/BBSim/bbsim_utils.py
@@ -0,0 +1,66 @@
+# 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.
+
+class bbsim_utils(object):
+
+ def generate_subscribers(self, num_subs, rcord_service_id, stag=999, ctag_start=900, pon_id=1):
+ """
+ :param num_subs: Number of subscribers to create
+ :param rcord_service_id: ID of the rcord service
+ :param stag: S_tag of subscriber
+ :param ctag: C_tag of first subscriber (to be incremented by num_subs)
+ :return: List of subscribers to POST
+ """
+ subscribers = []
+ for index in range(1, int(num_subs) + 1):
+ sub = {
+ "name" : "Sub_BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)-1),
+ "status" : "pre-provisioned",
+ "c_tag" : ctag_start + int(index)-1,
+ "s_tag" : stag,
+ "onu_device" : "BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)-1),
+ "circuit_id" : "circuit" + '{0:02x}'.format(int(index)-1),
+ "remote_id" : "remote" + '{0:02x}'.format(int(index)-1),
+ "nas_port_id" : "PON 2/1/01/1:1.1." + str(pon_id) + '{0:02x}'.format(int(index)-1)
+ }
+ subscribers.append(sub)
+ return subscribers
+
+ def generate_whitelists(self, num_onus, att_service_id, pon_id=1):
+ """
+ :param num_onus: Number of ONUs to be added to the whitelist
+ :param att_service_id: ID of the att workflow service
+ :param olt_id: ID of the pon_port
+ :return: List of whitelists to POST
+ """
+ whitelists = []
+ for index in range(1, int(num_onus) + 1):
+ onu = {
+ "serial_number": "BBSM" + str("00000") + str(pon_id) + '{0:02x}'.format(int(index)-1),
+ "device_id" : "of:000000000ac004ce",
+ "pon_port_id" : 536870913,
+ "owner_id" : att_service_id
+ }
+ whitelists.append(onu)
+ return whitelists
+
+#test=whitelists()
+#wls = test.generate_whitelists(64, 1, 1)
+#for i in wls:
+# print i
+
+#test=bbsim_utils()
+#subs = test.generate_subscribers(16, 1)
+#for i in subs:
+# print i