[VOL-4482] openonu-go-adapter: test reconcilement with MDS mismatch
Preconditions are:
https://gerrit.opencord.org/c/voltha-openolt-adapter/+/30389
https://gerrit.opencord.org/c/olt/+/30307 (comming up in a new ONOS release)
Change-Id: I591701f4e0b9e7e48eb76b6aa1bf8a4e56492f1c
diff --git a/Makefile b/Makefile
index 3c1b58e..630d1c4 100755
--- a/Makefile
+++ b/Makefile
@@ -54,6 +54,7 @@
ROBOT_SANITY_MULTI_UNI_SINGLE_PON_FILE ?= $(ROOT_DIR)/tests/data/bbsim-kind-multi-uni.yaml
ROBOT_SANITY_MULTI_UNI_MULTIPLE_OLT_FILE ?= $(ROOT_DIR)/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON.yaml
ROBOT_SANITY_TT_MULTI_UNI_SINGLE_PON_FILE ?= $(ROOT_DIR)/tests/data/bbsim-kind-multi-uni-tt.yaml
+ROBOT_SANITY_TT_MULTI_UNI_MULTIPLE_OLT_FILE ?= $(ROOT_DIR)/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON-tt.yaml
# for backwards compatibility
sanity-kind: sanity-single-kind
@@ -188,6 +189,11 @@
reconcile-openonu-go-adapter-test-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_SINGLE_PON_FILE)
reconcile-openonu-go-adapter-test-tt: reconcile-openonu-go-adapter-tests-tt
+# target to invoke reconcile tests with openonu go adapter at single ONU multi UNI with TT workflow
+reconcile-openonu-go-adapter-multi-uni-test-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_MULTI_UNI_SINGLE_PON_FILE)
+reconcile-openonu-go-adapter-multi-uni-test-tt: ROBOT_MISC_ARGS += -v unitag_sub:True
+reconcile-openonu-go-adapter-multi-uni-test-tt: reconcile-openonu-go-adapter-tests-tt
+
# target to invoke reconcile tests with openonu go adapter with multiple OLTs scenario with ATT workflow (default workflow)
reconcile-openonu-go-adapter-multi-olt-test-att: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_MULTIPLE_OLT_FILE)
reconcile-openonu-go-adapter-multi-olt-test-att: reconcile-openonu-go-adapter-tests-att
@@ -200,6 +206,11 @@
reconcile-openonu-go-adapter-multi-olt-test-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_MULTIPLE_OLT_FILE)
reconcile-openonu-go-adapter-multi-olt-test-tt: reconcile-openonu-go-adapter-tests-tt
+# target to invoke reconcile tests with openonu go adapter with multiple OLTs multi UNI scenario with TT workflow
+reconcile-openonu-go-adapter-multi-olt-multi-uni-test-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_MULTI_UNI_MULTIPLE_OLT_FILE)
+reconcile-openonu-go-adapter-multi-olt-multi-uni-test-tt: ROBOT_MISC_ARGS += -v unitag_sub:True
+reconcile-openonu-go-adapter-multi-olt-multi-uni-test-tt: reconcile-openonu-go-adapter-tests-tt
+
# target to invoke reconcile tests with openonu go adapter with ATT workflow
reconcile-openonu-go-adapter-tests-att: ROBOT_MISC_ARGS += -v workflow:ATT
reconcile-openonu-go-adapter-tests-att: reconcile-openonu-go-adapter-tests
diff --git a/libraries/bbsim.robot b/libraries/bbsim.robot
index bc13d4d..049385c 100755
--- a/libraries/bbsim.robot
+++ b/libraries/bbsim.robot
@@ -82,6 +82,15 @@
... bbsimctl onu shutdown ${onu}
Should Contain ${result} successfully msg=Can not shutdown ${onu} values=False
+Set Wrong MDS Counter ONU
+ [Documentation] This keyword sets wrong MDS counter for onu device.
+ [Arguments] ${namespace} ${bbsim_pod_name} ${onu}
+ ${result} ${rc}= Exec Pod And Return Output And RC ${namespace} ${bbsim_pod_name}
+ ... bbsimctl onu invalidate_mds ${onu}
+ Should Be Equal as Integers ${rc} 0
+ Should Contain ${result} MDS counter of ONU msg=Can not invalidate MDS counter ${onu} values=False
+ Should Contain ${result} , set to msg=Can not invalidate MDS counter ${onu} values=False
+
Get ONUs List
[Documentation] Fetches ONUs via BBSimctl
[Arguments] ${namespace} ${bbsim_pod_name}
diff --git a/libraries/onu_utilities.robot b/libraries/onu_utilities.robot
index 83d50fd..f338699 100755
--- a/libraries/onu_utilities.robot
+++ b/libraries/onu_utilities.robot
@@ -15,6 +15,7 @@
*** Settings ***
Documentation Library for various openonu-go-adpter utilities
Library grpc_robot.VolthaTools WITH NAME volthatools
+Resource ./bbsim.robot
*** Keywords ***
@@ -70,10 +71,16 @@
Power On ONU Device per OLT
[Documentation] This keyword turns on the power for all onus.
[Arguments] ${namespace} ${olt_serial_number} ${bbsim_pod}
+ @{onu_list}= Create List
FOR ${I} IN RANGE 0 ${num_all_onus}
${src}= Set Variable ${hosts.src[${I}]}
Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
- Power On ONU ${namespace} ${bbsim_pod} ${src['onu']}
+ ${sn}= Set Variable ${src['onu']}
+ # make sure all actions are done only once per onu
+ ${onu_id}= Get Index From List ${onu_list} ${sn}
+ Continue For Loop If -1 != ${onu_id}
+ Append To List ${onu_list} ${sn}
+ Power On ONU ${namespace} ${bbsim_pod} ${sn}
END
Power Off ONU Device
@@ -89,10 +96,41 @@
Power Off ONU Device per OLT
[Documentation] This keyword turns off the power for all onus per olt.
[Arguments] ${namespace} ${olt_serial_number} ${bbsim_pod}
+ @{onu_list}= Create List
FOR ${I} IN RANGE 0 ${num_all_onus}
${src}= Set Variable ${hosts.src[${I}]}
Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
- Power Off ONU ${namespace} ${bbsim_pod} ${src['onu']}
+ ${sn}= Set Variable ${src['onu']}
+ # make sure all actions are done only once per onu
+ ${onu_id}= Get Index From List ${onu_list} ${sn}
+ Continue For Loop If -1 != ${onu_id}
+ Append To List ${onu_list} ${sn}
+ Power Off ONU ${namespace} ${bbsim_pod} ${sn}
+ END
+
+Set Wrong MDS Counter All ONUs
+ [Documentation] This keyword sets wrong MDS counter for all onus.
+ [Arguments] ${namespace}
+ FOR ${J} IN RANGE 0 ${num_olts}
+ ${olt_serial_number}= Set Variable ${list_olts}[${J}][sn]
+ ${bbsim}= Catenate SEPARATOR= bbsim ${J}
+ ${bbsim_pod}= Get Pod Name By Label ${namespace} release ${bbsim}
+ Set Wrong MDS Counter per OLT ${namespace} ${olt_serial_number} ${bbsim_pod}
+ END
+
+Set Wrong MDS Counter per OLT
+ [Documentation] This keyword sets wrong MDS counter for all onus per olt.
+ [Arguments] ${namespace} ${olt_serial_number} ${bbsim_pod}
+ @{onu_list}= Create List
+ FOR ${I} IN RANGE 0 ${num_all_onus}
+ ${src}= Set Variable ${hosts.src[${I}]}
+ Continue For Loop If "${olt_serial_number}"!="${src['olt']}"
+ ${sn}= Set Variable ${src['onu']}
+ # make sure all actions are done only once per onu
+ ${onu_id}= Get Index From List ${onu_list} ${sn}
+ Continue For Loop If -1 != ${onu_id}
+ Append To List ${onu_list} ${sn}
+ Set Wrong MDS Counter ONU ${namespace} ${bbsim_pod} ${sn}
END
Current State Test
@@ -131,7 +169,7 @@
Reconcile Onu Adapter
[Documentation] Restarts the openonu adapter and waits for reconciling is finished and expected oper-state is reached
[Arguments] ${namespace} ${usekill2restart} ${oper_status} ${olt_to_be_deleted_sn}=${EMPTY}
- ... ${flow_delete_params}=&{EMPTY}
+ ... ${flow_delete_params}=&{EMPTY} ${wrong_MDS_counter}=False
# get last ready timestamp of openonu adapter
${previous_ready_ts}= Get Pod Ready Timestamp by Label ${namespace} app adapter-open-onu
# restart OpenONU adapter
@@ -146,9 +184,10 @@
... Get OLTDeviceID From OLT List ${olt_to_be_deleted_sn}
Run Keyword If "${olt_to_be_deleted_sn}"!="${EMPTY}" Delete Device ${olt_to_be_deleted_device_id}
# remove flows if params passed for it (special feature II)
- Run Keyword If ${flow_delete_params}!=&{EMPTY} Wait Until Keyword Succeeds ${timeout} 2s
- ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
- ... volt-remove-subscriber-access ${flow_delete_params['of_id']} ${flow_delete_params['onu_port']}
+ Run Keyword If ${flow_delete_params}!=&{EMPTY} Remove Flows Conditional ${flow_delete_params['unitag']}
+ ... ${flow_delete_params['onu_sn']} ${flow_delete_params['of_id']} ${flow_delete_params['onu_port']}
+ # Set wrong MDS counter (for all ONUs) if required (special feature III)
+ Run Keyword If ${wrong_MDS_counter} Set Wrong MDS Counter All ONUs ${namespace}
# wait for the reconcile to complete
# - we check that communication to openonu-adapter is established again
# - we check that all ONUs leave reconcile state by validate a simple voltctl request will not responds with error
@@ -184,6 +223,26 @@
Should Be True ${rc}==0 Onu ${src['onu']} (${onu_device_id}) still not accessible.
END
+Remove Flows Conditional
+ [Documentation] This keyword removes the flows (subscriber) conditional depending on unitag.
+ ... In case of unitagsub==False (normal case) single subscriber remove will be executed.
+ ... In case of multi uni each uni id will be deleted.
+ [Arguments] ${unitagsub} ${onu_sn} ${of_id} ${onu_port}
+ # first handle 'normal' case without uni ports
+ Run Keyword If ${unitagsub}==False Wait Until Keyword Succeeds ${timeout} 2s
+ ... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
+ ... volt-remove-subscriber-access ${of_id} ${onu_port}
+ Return From Keyword If ${unitagsub}==False
+ # handle multi uni case
+ FOR ${I} IN RANGE 0 ${num_all_onus}
+ ${src}= Set Variable ${hosts.src[${I}]}
+ Continue For Loop If "${onu_sn}"!="${src['onu']}"
+ ${add_sub_cmd}= Catenate volt-remove-subscriber-unitag --tpId ${src['tp_id']} --sTag ${src['s_tag']}
+ ... --cTag ${src['c_tag']} ${src['onu']}-${src['uni_id']}
+ Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection
+ ... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${add_sub_cmd}
+ END
+
Log Ports
[Documentation] This keyword logs all port data available in ONOS of first port per ONU
[Arguments] ${onlyenabled}=False
@@ -275,31 +334,32 @@
Set Tech Profile
[Documentation] This keyword sets the passed TechProfile for the test
- [Arguments] ${TechProfile} ${namespace}=default
- Log To Console \nTechProfile:${TechProfile}
+ [Arguments] ${TechProfile} ${namespace}=default ${tp_id}=64
+ Log To Console \nSet TechProfile:${TechProfile} tp_id:${tp_id}
${podname}= Set Variable etcd
${label}= Set Variable app.kubernetes.io/name=${podname}
${src}= Set Variable ${data_dir}/TechProfile-${TechProfile}.json
${dest}= Set Variable /tmp/flexpod.json
${command} Catenate
- ... /bin/sh -c 'cat ${dest} | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/64'
+ ... /bin/sh -c 'cat ${dest} | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/${tp_id}'
Copy File To Pod ${namespace} ${label} ${src} ${dest}
Exec Pod In Kube ${namespace} ${podname} ${command}
${commandget} Catenate
- ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/64'
+ ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/${tp_id}'
${result}= Exec Pod In Kube ${namespace} ${podname} ${commandget}
Should Not Be Empty ${result} No Tech Profile stored in etcd!
Remove Tech Profile
[Documentation] This keyword removes TechProfile
- [Arguments] ${namespace}=default
- Log To Console \nTechProfile:${TechProfile}
+ [Arguments] ${namespace}=default ${tp_id}=64
+ Run Keyword If "${TechProfile}"!="${EMPTY}" Log To Console \nRemove TechProfile:${TechProfile} tp_id:${tp_id}
+ ... ELSE Log To Console \nRemove Tech Profile template at tp_id:${tp_id}
${podname}= Set Variable etcd
${command} Catenate
- ... /bin/sh -c 'ETCDCTL_API=3 etcdctl del --prefix service/voltha/technology_profiles/XGS-PON/64'
+ ... /bin/sh -c 'ETCDCTL_API=3 etcdctl del --prefix service/voltha/technology_profiles/XGS-PON/${tp_id}'
Exec Pod In Kube ${namespace} ${podname} ${command}
${commandget} Catenate
- ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/64'
+ ... /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/${tp_id}'
Exec Pod In Kube ${namespace} ${podname} ${commandget}
Do Onu Subscriber Add Per OLT
@@ -398,6 +458,7 @@
... It checks checks presence/absence of tech profiles and flows depending on must_exist.
... The values/content of tech profiles and flows will be not validated!
[Arguments] ${onu_sn} ${namespace}=default ${defaultkvstoreprefix}=voltha_voltha ${must_exist}=True
+ ... ${check_tcont_map_empty}=False
${kvstoreprefix}= Get Kv Store Prefix ${defaultkvstoreprefix}
${etcddata}= Get ONU Go Adapter ETCD Data namespace=${namespace} defaultkvstoreprefix=${kvstoreprefix}
#prepare result for json convert
@@ -411,6 +472,7 @@
${uni_config}= Get From Dictionary ${value} uni_config
${uni_config}= Set Variable ${uni_config[0]}
${sn}= Get From Dictionary ${value} serial_number
+ ${tcont_map}= Get From Dictionary ${value} tcont_map
${matched}= Set Variable If '${sn}'=='${onu_sn}' True False
Exit For Loop If ${matched}
END
@@ -451,6 +513,8 @@
END
Run Keyword If ${must_exist} Should Not Be Empty ${flow_params}
... ELSE Should Be Empty ${flow_params}
+ Run Keyword If ${check_tcont_map_empty} Log ${tcont_map}
+ Run Keyword If ${check_tcont_map_empty} Should Be Empty ${tcont_map}
Validate Onu Data In Etcd
[Documentation] This keyword validates openonu-go-adapter Data stored in etcd.
@@ -685,12 +749,14 @@
Wait for all ONU Ports in ONOS Disabled
[Documentation] Waits untill a all ONU ports are disabled in all ONOS
- [Arguments] ${host} ${port}
+ [Arguments] ${host} ${port} ${unitag}=False
FOR ${I} IN RANGE 0 ${num_all_onus}
${src}= Set Variable ${hosts.src[${I}]}
${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS
... ${src['olt']}
- ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']} ${of_id}
+ ${onu_uni_id}= Set Variable If ${unitag} ${src['uni_id']} 1
+ ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']} ${of_id}
+ ... ${onu_uni_id}
Wait Until Keyword Succeeds ${timeout} 2s Assert ONU Port Is Disabled ${host} ${port} ${of_id}
... ${onu_port}
END
diff --git a/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON-tt.yaml b/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON-tt.yaml
new file mode 100755
index 0000000..6bd7f85
--- /dev/null
+++ b/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON-tt.yaml
@@ -0,0 +1,1067 @@
+---
+
+# 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.
+
+# Automated deployment configuration for systems running BBSim
+
+# Change default values in tests
+workflow: TT
+has_dataplane: false
+external_libs: false
+teardown_device: true
+ONOS_REST_PORT: 8181
+ONOS_SSH_PORT: 8101
+OLT_PORT: 50060
+
+nodes:
+ -
+ ip: '127.0.0.1'
+
+olts:
+ -
+ ip: bbsim0.voltha.svc
+ serial: BBSIM_OLT_10
+ -
+ ip: bbsim1.voltha.svc
+ serial: BBSIM_OLT_11
+
+hosts:
+ src:
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '900'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 1
+ tp_id: '64'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 1
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '901'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 2
+ tp_id: '64'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 2
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '902'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 3
+ tp_id: '64'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 3
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '903'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 4
+ tp_id: '64'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 4
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000a0001'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '904'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 1
+ tp_id: '64'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 1
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '905'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 2
+ tp_id: '64'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 2
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '906'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 3
+ tp_id: '64'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 3
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '907'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 4
+ tp_id: '64'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 4
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000a0002'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '908'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 1
+ tp_id: '64'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 1
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '909'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 2
+ tp_id: '64'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 2
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '910'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 3
+ tp_id: '64'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 3
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '911'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 4
+ tp_id: '64'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 4
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000a0101'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '912'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 1
+ tp_id: '64'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 1
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '913'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 2
+ tp_id: '64'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 2
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '914'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 3
+ tp_id: '64'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 3
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '915'
+ s_tag: '900'
+ service_type: 'hsia'
+ uni_id: 4
+ tp_id: '64'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 4
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000a0102'
+ olt: 'BBSIM_OLT_10'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '900'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 1
+ tp_id: '64'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 1
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '901'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 2
+ tp_id: '64'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 2
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '902'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 3
+ tp_id: '64'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 3
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '903'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 4
+ tp_id: '64'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 4
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000b0001'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '904'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 1
+ tp_id: '64'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 1
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '905'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 2
+ tp_id: '64'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 2
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '906'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 3
+ tp_id: '64'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 3
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '907'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 4
+ tp_id: '64'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 4
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000b0002'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '908'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 1
+ tp_id: '64'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 1
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '909'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 2
+ tp_id: '64'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 2
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '910'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 3
+ tp_id: '64'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 3
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '911'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 4
+ tp_id: '64'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 4
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000b0101'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '912'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 1
+ tp_id: '64'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 1
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 1
+ tp_id: '66'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '913'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 2
+ tp_id: '64'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 2
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 2
+ tp_id: '66'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '914'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 3
+ tp_id: '64'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 3
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 3
+ tp_id: '66'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '915'
+ s_tag: '901'
+ service_type: 'hsia'
+ uni_id: 4
+ tp_id: '64'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '444'
+ s_tag: '333'
+ uni_id: 4
+ service_type: 'voip'
+ tp_id: '65'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '555'
+ service_type: 'vod'
+ uni_id: 4
+ tp_id: '66'
+ - onu: 'BBSM000b0102'
+ olt: 'BBSIM_OLT_11'
+ c_tag: '55'
+ s_tag: '550'
+ service_type: 'mcast'
+ uni_id: 4
+ tp_id: '66'
+
+ dst:
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
+ - ip: null
diff --git a/tests/openonu-go-adapter/Voltha_ONUReconcileTests.robot b/tests/openonu-go-adapter/Voltha_ONUReconcileTests.robot
index ee47082..f4e492c 100755
--- a/tests/openonu-go-adapter/Voltha_ONUReconcileTests.robot
+++ b/tests/openonu-go-adapter/Voltha_ONUReconcileTests.robot
@@ -14,8 +14,6 @@
*** Settings ***
Documentation Test different Reconcile scenarios of ONU Go adapter with all three workflows ATT, DT and TT.
-... Test suite is dedicated for only one ONU! Run robot with bbsim-kind.yaml only!
-... Not for DT/TT workflow!
... Hint: default timeout in BBSim to mimic OLT reboot is 60 seconds!
... This behaviour of BBSim can be modified by 'oltRebootDelay: 60' in BBSim section of helm chart or
... used values.yaml during 'voltha up'.
@@ -220,6 +218,24 @@
... AND Teardown Test
... AND Stop Logging FlowDeletionAfterAdapterRestartOnuGo
+Wrong MDS Counter After Adapter Restart
+ [Documentation] Validates wrong MDS Counter of ONU after adapter restart
+ ... - perform sanity test include add subscriber
+ ... - restart the ONU adapter preferred via "kubectl delete pod"
+ ... - manipulate MDS counter
+ ... - wait until the restart of the ONU adapter and the reconcile processing are finished
+ ... - check all ONUs come up to previous state
+ [Tags] functionalOnuGo WrongMDSCounterAfterAdapterRestartOnuGo
+ [Setup] Run Keywords Start Logging WrongMDSCounterAfterAdapterRestartOnuGo
+ ... AND Setup Test
+ Run Keyword If ${has_dataplane} Clean Up Linux
+ Do Wrong MDS Counter After Adapter Restart
+ [Teardown] Run Keywords Printout ONU Serial Number and Device Id print2console=${print2console}
+ ... AND Run Keyword If ${logging} Get Logical Id of OLT
+ ... AND Run Keyword If ${logging} Collect Logs
+ ... AND Teardown Test
+ ... AND Stop Logging WrongMDSCounterAfterAdapterRestartOnuGo
+
*** Keywords ***
Setup Suite
[Documentation] Set up the test suite
@@ -231,6 +247,11 @@
... kvstoreprefix:${kvstoreprefix}
Log ${LogInfo} console=yes
Common Test Suite Setup
+ # set tech profiles
+ Run Keyword If ${unitag_sub} and "${workflow}"=="TT" Set Tech Profile TT-HSIA ${INFRA_NAMESPACE} 64
+ Run Keyword If ${unitag_sub} and "${workflow}"=="TT" Set Tech Profile TT-VoIP ${INFRA_NAMESPACE} 65
+ Run Keyword If ${unitag_sub} and "${workflow}"=="TT" Set Tech Profile TT-multi-uni-MCAST-AdditionalBW-None
+ ... ${INFRA_NAMESPACE} 66
# delete etcd MIB Template Data
Delete MIB Template Data ${INFRA_NAMESPACE}
# delete etcd onu data
@@ -255,6 +276,10 @@
Run Keyword If ${logging} Collect Logs
Stop Logging Setup or Teardown Teardown-${SUITE NAME}
Close All ONOS SSH Connections
+ Set Suite Variable ${TechProfile} ${EMPTY}
+ Run Keyword If ${unitag_sub} and "${workflow}"=="TT" Remove Tech Profile ${INFRA_NAMESPACE} 64
+ Run Keyword If ${unitag_sub} and "${workflow}"=="TT" Remove Tech Profile ${INFRA_NAMESPACE} 65
+ Run Keyword If ${unitag_sub} and "${workflow}"=="TT" Remove Tech Profile ${INFRA_NAMESPACE} 66
Setup Test
[Documentation] Pre-test Setup
@@ -353,9 +378,19 @@
... ELSE Perform Sanity Test
Disable Onu Device
Current State Test All Onus tech-profile-config-delete-success
+ #check no port is enabled in ONOS
+ Wait for Ports in ONOS for all OLTs ${ONOS_SSH_IP} ${ONOS_SSH_PORT} 0 BBSM
+ Wait for all ONU Ports in ONOS Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${unitag_sub}
+ # validate etcd data
+ ${List_ONU_Serial} Create List
+ Build ONU SN List ${List_ONU_Serial}
+ FOR ${onu_sn} IN @{List_ONU_Serial}
+ Wait Until Keyword Succeeds ${timeout} 2s Validate Tech Profiles and Flows in ETCD Data Per Onu
+ ... ${onu_sn} ${INFRA_NAMESPACE} ${kvstoreprefix} must_exist=False check_tcont_map_empty=True
+ END
Reconcile Onu Adapter ${NAMESPACE} ${usekill2restart} UNKNOWN
Current State Test All Onus tech-profile-config-delete-success
- Wait for all ONU Ports in ONOS Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
+ Wait for all ONU Ports in ONOS Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${unitag_sub}
Enable Onu Device
Run Keyword If "${workflow}"=="DT" Perform Sanity Test DT ${suppressaddsubscriber}
... ELSE IF "${workflow}"=="TT" Perform Sanity Tests TT ${suppressaddsubscriber}
@@ -390,7 +425,7 @@
... ELSE Perform Sanity Test ${suppressaddsubscriber}
Disable Onu Device
Current State Test All Onus tech-profile-config-delete-success
- Wait for all ONU Ports in ONOS Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
+ Wait for all ONU Ports in ONOS Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${unitag_sub}
Enable Onu Device
Run Keyword If "${workflow}"=="DT" Perform Sanity Test DT ${suppressaddsubscriber}
... ELSE IF "${workflow}"=="TT" Perform Sanity Tests TT ${suppressaddsubscriber}
@@ -482,9 +517,19 @@
END
# Collect data for remove flow(s)
${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${hosts.src[0]['olt']}
- ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${hosts.src[0]['onu']}
- ... ${of_id} ${hosts.src[0]['uni_id']}
- ${params_for_remove_flow}= Create Dictionary of_id=${of_id} onu_port=${onu_port}
+ ${onu_sn}= Set Variable ${hosts.src[0]['onu']}
+ ${onu_port_list} Create List
+ FOR ${I} IN RANGE 0 ${num_all_onus}
+ ${src}= Set Variable ${hosts.src[${I}]}
+ Continue For Loop If "${onu_sn}"!="${src['onu']}"
+ ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
+ ... ${of_id} ${src['uni_id']}
+ ${port_id}= Get Index From List ${onu_port_list} ${onu_port}
+ Continue For Loop If -1 != ${port_id}
+ Append To List ${onu_port_list} ${onu_port}
+ END
+ ${params_for_remove_flow}= Create Dictionary unitag=${unitag_sub} onu_sn=${onu_sn} of_id=${of_id}
+ ... onu_port=${onu_port_list[0]}
# Collect number of flows for comparing after Reconcile
${olt_flows_list} Create List
FOR ${I} IN RANGE 0 ${num_olts}
@@ -493,7 +538,11 @@
${olt_flows}= Create Dictionary olt=${olt_of_id} flows=${flows}
Append To List ${olt_flows_list} ${olt_flows}
END
- ${flows_onu}= Count flows ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} added ${onu_port}
+ ${flows_onu}= Set Variable 0
+ FOR ${onu_port} IN @{onu_port_list}
+ ${flows_onu_port}= Count flows ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} added ${onu_port}
+ ${flows_onu}= Evaluate ${flows_onu} + ${flows_onu_port}
+ END
# Restart onu adapter with deleting flows from first onu
Reconcile Onu Adapter ${NAMESPACE} ${usekill2restart} ACTIVE flow_delete_params=${params_for_remove_flow}
# validate flows in ONOS after remove
@@ -501,16 +550,19 @@
... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} flows -s any ${of_id}
Log ${flow}
${expected_flows_onu}= Set Variable If "${workflow}"=="ATT" 1 0
- Wait Until Keyword Succeeds ${timeout} 2s Validate number of flows ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
- ... ${expected_flows_onu} ${of_id} any ${onu_port}
+ FOR ${onu_port} IN @{onu_port_list}
+ Wait Until Keyword Succeeds ${timeout} 2s Validate number of flows ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
+ ... ${expected_flows_onu} ${of_id} any ${onu_port}
+ END
${flow}= Execute ONOS CLI Command use single connection
... ${ONOS_SSH_IP} ${ONOS_SSH_PORT} flows -s any ${of_id}
Log ${flow}
- # Beside onu port specific flows additional flows deleted depending on workflow
- ${additional_flows_deleted}= Set Variable If
- ... "${workflow}"=="DT" 1
- ... "${workflow}"=="TT" 3
- ... "${workflow}"=="ATT" 0
+ # Beside onu port specific flows additional flows deleted depending on workflow and number of onu ports
+ ${number_ports}= Get Length ${onu_port_list}
+ ${additional_flows_deleted}= Run Keyword If "${workflow}"=="DT" Set Variable ${number_ports}
+ ... ELSE IF "${workflow}"=="TT" Evaluate ${number_ports}*3
+ ... ELSE IF "${workflow}"=="ATT" Set Variable 0
+ ... ELSE Set Variable 0
FOR ${I} IN RANGE 0 ${num_olts}
${expected_flows}= Run Keyword If "${of_id}"=="${olt_flows_list}[${I}][olt]"
... Evaluate ${olt_flows_list}[${I}][flows]-${flows_onu}-${additional_flows_deleted}
@@ -536,3 +588,32 @@
${must_exist}= Set Variable If "${onu_device_id}"=="${onu_device_id_no_flows}" False True
Validate OLT Flows Per Onu ${onu_device_id} ${must_exist}
END
+
+Do Wrong MDS Counter After Adapter Restart
+ [Documentation] This keyword checks correct handling of a wrong MDS counter after adapter restart
+ ... - perform sanity test include add subscriber
+ ... - restart the ONU adapter preferred via "kubectl delete pod"
+ ... - manipulate MDS counter
+ ... - wait until the restart of the ONU adapter and the reconcile processing are finished
+ ... - check all ONUs come up to previous state
+ FOR ${I} IN RANGE 0 ${num_olts}
+ #get olt serial number
+ ${olt_serial_number}= Set Variable ${list_olts}[${I}][sn]
+ #validate olt states
+ ${olt_device_id}= Get OLTDeviceID From OLT List ${olt_serial_number}
+ Enable Device ${olt_device_id}
+ END
+ Run Keyword If "${workflow}"=="DT" Perform Sanity Test DT
+ ... ELSE IF "${workflow}"=="TT" Perform Sanity Tests TT
+ ... ELSE Perform Sanity Test
+ Reconcile Onu Adapter ${NAMESPACE} ${usekill2restart} ACTIVE wrong_MDS_counter=True
+ Run Keyword If "${workflow}"=="DT" Perform Sanity Test DT ${suppressaddsubscriber}
+ ... ELSE IF "${workflow}"=="TT" Perform Sanity Tests TT ${suppressaddsubscriber}
+ ... ELSE Perform Sanity Test ${suppressaddsubscriber}
+ Disable Onu Device
+ Current State Test All Onus tech-profile-config-delete-success
+ Wait for all ONU Ports in ONOS Disabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${unitag_sub}
+ Enable Onu Device
+ Run Keyword If "${workflow}"=="DT" Perform Sanity Test DT ${suppressaddsubscriber}
+ ... ELSE IF "${workflow}"=="TT" Perform Sanity Tests TT ${suppressaddsubscriber}
+ ... ELSE Perform Sanity Test ${suppressaddsubscriber}