XOS Scale test
- creating OLTs, ONUs and required ports
- creating whitelist
- sending ONU activation events
Change-Id: If2b2d02ae4a966756edbedd659108481558636ee
diff --git a/src/test/cord-api/Tests/XosScaleValidations/xos-scale-att-workflow.robot b/src/test/cord-api/Tests/XosScaleValidations/xos-scale-att-workflow.robot
new file mode 100644
index 0000000..d084334
--- /dev/null
+++ b/src/test/cord-api/Tests/XosScaleValidations/xos-scale-att-workflow.robot
@@ -0,0 +1,232 @@
+*** Settings ***
+Documentation Scale up models in a SEBA deployment with no backends
+Library KafkaLibrary
+Library RequestsLibrary
+Library HttpLibrary.HTTP
+Library Collections
+Library String
+Library OperatingSystem
+Library ./utils/devices.py
+Suite Setup Setup
+Suite Teardown Teardown
+
+*** Variables ***
+${xos_chameleon_url} xos-chameleon
+${xos_chameleon_port} 9101
+${cord_kafka} cord-kafka
+
+${num_olts} 1
+${num_pon_ports} 1
+${num_onus} 1
+
+${timeout} 300s
+
+*** Test Cases ***
+
+Check OLTs Created
+ ${res} = CORD Get /xosapi/v1/volt/oltdevices
+ ${jsondata} = To Json ${res.content}
+ ${length} = Get Length ${jsondata['items']}
+ ${total} = Convert To Integer ${num_olts}
+ Should Be Equal ${length} ${total}
+
+Check PON Ports Created
+ ${res} = CORD Get /xosapi/v1/volt/ponports
+ ${jsondata} = To Json ${res.content}
+ ${length} = Get Length ${jsondata['items']}
+ ${total} = Evaluate ${num_olts} * ${num_pon_ports}
+ Should Be Equal ${length} ${total}
+
+Check ONUs Created
+ ${res} = CORD Get /xosapi/v1/volt/onudevices
+ ${jsondata} = To Json ${res.content}
+ ${length} = Get Length ${jsondata['items']}
+ ${total} = Evaluate ${num_olts} * ${num_pon_ports} * ${num_onus}
+ Should Be Equal ${length} ${total}
+
+Check UNI Ports Created
+ ${res} = CORD Get /xosapi/v1/volt/uniports
+ ${jsondata} = To Json ${res.content}
+ ${length} = Get Length ${jsondata['items']}
+ ${total} = Evaluate ${num_olts} * ${num_pon_ports} * ${num_onus}
+ Should Be Equal ${length} ${total}
+
+Check Whitelist Created
+ ${res} = CORD Get /xosapi/v1/att-workflow-driver/attworkflowdriverwhitelistentries
+ ${jsondata} = To Json ${res.content}
+ ${length} = Get Length ${jsondata['items']}
+ ${total} = Evaluate ${num_olts} * ${num_pon_ports} * ${num_onus}
+ Should Be Equal ${length} ${total}
+
+Activate ONUs
+ [Documentation] Send activation events for all the ONUs and waits for the model_policies of ATT Workflow Driver Service Instances to have completed
+ ${events} = Generate Onu Events
+ : FOR ${e} IN @{events}
+ \ Send Kafka Event onu.events ${e}
+ Wait Until Keyword Succeeds ${timeout} 5s Validate ATT_SI Number ${events}
+
+*** Keywords ***
+
+Validate ATT_SI Number
+ [Arguments] ${events}
+ ${res} = CORD Get /xosapi/v1/att-workflow-driver/attworkflowdriverserviceinstances
+ ${jsondata} = To Json ${res.content}
+ ${length} = Get Length ${jsondata['items']}
+ ${total} = Get Length ${events}
+ Should Be Equal ${length} ${total}
+ ModelPolicy completed ${jsondata['items']}
+
+ModelPolicy completed
+ [Documentation] Check that model_policies had run for all the items in the list
+ [Arguments] ${list}
+ # NOTE we assume that here we get res.content["items"]
+ : FOR ${i} IN @{list}
+ \ Should Be Equal As Integers ${i["policy_code"]} 1
+
+Setup
+ ${target} = Evaluate ${num_olts} * ${num_pon_ports} * ${num_onus}
+ Log Testing with ${target} ONUs
+ Connect Producer ${cord_kafka}:9092 onu.events
+ Connect Producer ${cord_kafka}:9092 authentication.events
+ Connect Producer ${cord_kafka}:9092 dhcp.events
+ ${auth} = Create List admin@opencord.org letmein
+ ${HEADERS} Create Dictionary Content-Type=application/json allow_modify_feedback=True
+ Create Session XOS http://${xos_chameleon_url}:${xos_chameleon_port} auth=${AUTH} headers=${HEADERS}
+ Store Data
+ Mock Data
+ ${mock} = Get Mock Data
+ Log ${mock}
+
+Teardown
+ [Documentation] Delete all models created
+ Log Teardown
+ Delete OLTs
+ Delete Whitelist
+ Delete ServiceInstances
+ Delete All Sessions
+ Clean Storage
+
+Mock Data
+ [Documentation] Mock all the data needed from the test
+ Create Mock Olts ${num_olts} ${voltservice_id}
+ Create Olts
+ Create Mock Pon Ports ${num_pon_ports}
+ Create Pon Ports
+ Create Mock Onus ${num_onus}
+ Create Onus
+ Create Mock Unis
+ Create Unis
+ Create Whitelist
+
+Create Olts
+ [Documentation] Stub OLT for the test
+ ${olts} = Get Rest Olts
+ : FOR ${OLT} IN @{olts}
+ \ Log ${OLT}
+ \ ${res} = CORD Post /xosapi/v1/volt/oltdevices ${OLT}
+ \ ${jsondata} = To Json ${res.content}
+ \ Update Olt Id ${OLT} ${jsondata['id']}
+
+Create Pon Ports
+ ${pon_ports} = Get Rest Pon Ports
+ : FOR ${port} IN @{pon_ports}
+ \ Log ${port}
+ \ ${res} = CORD Post /xosapi/v1/volt/ponports ${port}
+ \ ${jsondata} = To Json ${res.content}
+ \ Update Pon Port Id ${port} ${jsondata['id']}
+
+Create Onus
+ ${onus} = Get Rest Onus
+ : FOR ${onu} IN @{onus}
+ \ Log ${onu}
+ \ ${res} = CORD Post /xosapi/v1/volt/onudevices ${onu}
+ \ ${jsondata} = To Json ${res.content}
+ \ Update Onu Id ${onu} ${jsondata['id']}
+
+Create Unis
+ ${unis} = Get Rest Unis
+ : FOR ${uni} IN @{unis}
+ \ Log ${uni}
+ \ ${res} = CORD Post /xosapi/v1/volt/uniports ${uni}
+ \ ${jsondata} = To Json ${res.content}
+ \ Update Uni Id ${uni} ${jsondata['id']}
+
+Create Whitelist
+ [Documentation] Create a whitelist for the tests
+ ${whitelist} = Create Mock Whitelist ${attworkflowservice_id}
+ : FOR ${e} IN @{whitelist}
+ \ Log ${e}
+ \ ${res} = CORD Post /xosapi/v1/att-workflow-driver/attworkflowdriverwhitelistentries ${e}
+
+Delete Olts
+ [Documentation] Remove all the OLTs created for the test
+ ${res} = CORD Get /xosapi/v1/volt/oltdevices
+ ${jsondata} = To Json ${res.content}
+ :FOR ${ELEMENT} IN @{jsondata['items']}
+ \ ${id}= Get From Dictionary ${ELEMENT} id
+ \ CORD Delete /xosapi/v1/volt/oltdevices ${id}
+
+Delete Whitelist
+ [Documentation] Clean the whitelist
+ ${res} = CORD Get /xosapi/v1/att-workflow-driver/attworkflowdriverwhitelistentries
+ ${jsondata} = To Json ${res.content}
+ :FOR ${ELEMENT} IN @{jsondata['items']}
+ \ ${id}= Get From Dictionary ${ELEMENT} id
+ \ CORD Delete /xosapi/v1/att-workflow-driver/attworkflowdriverwhitelistentries ${id}
+
+Delete ServiceInstances
+ [Documentation] Clean the whitelist
+ ${res} = CORD Get /xosapi/v1/att-workflow-driver/attworkflowdriverserviceinstances
+ ${jsondata} = To Json ${res.content}
+ :FOR ${ELEMENT} IN @{jsondata['items']}
+ \ ${id}= Get From Dictionary ${ELEMENT} id
+ \ CORD Delete /xosapi/v1/att-workflow-driver/attworkflowdriverserviceinstances ${id}
+
+Store Data
+ [Documentation] Store all the ids needed for the test to work
+ # Get AttWorkflowDriverService id
+ ${resp}= CORD Get /xosapi/v1/att-workflow-driver/attworkflowdriverservices
+ ${jsondata}= To Json ${resp.content}
+ ${attworkflowservice}= Get From List ${jsondata['items']} 0
+ ${attworkflowservice_id}= Get From Dictionary ${attworkflowservice} id
+ Set Suite Variable ${attworkflowservice_id}
+
+ # Get VoltService id
+ ${resp}= CORD Get /xosapi/v1/volt/voltservices
+ ${jsondata}= To Json ${resp.content}
+ ${voltservice}= Get From List ${jsondata['items']} 0
+ ${voltservice_id}= Get From Dictionary ${voltservice} id
+ Set Suite Variable ${voltservice_id}
+
+Send Kafka Event
+ [Documentation] Send event
+ [Arguments] ${topic} ${message}
+ Log Sending event
+ ${event}= evaluate json.dumps(${message}) json
+ Send ${topic} ${event}
+ Flush
+
+CORD Get
+ [Documentation] Make a GET call to XOS
+ [Arguments] ${service}
+ ${resp}= Get Request XOS ${service}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp}
+
+CORD Post
+ [Documentation] Make a POST call to XOS
+ [Arguments] ${service} ${data}
+ ${data}= Evaluate json.dumps(${data}) json
+ ${resp}= Post Request XOS uri=${service} data=${data}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp}
+
+CORD Delete
+ [Documentation] Make a DELETE call to the CORD controller
+ [Arguments] ${service} ${data_id}
+ ${resp}= Delete Request XOS uri=${service}/${data_id}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp}
\ No newline at end of file