...
Step 1. Run "demo.sh init" from Robot VM to populate A&AI
Step 2. Install MockServer docker in Robot VM
Code Block |
---|
>sudo docker pull jamesdbloom/mockserver
>sudo docker run --name mockserver -d -p 1080:1080 jamesdbloom/mockserver |
Step 3. Use Postman to create PE1 and PE2 in A&AI
...
title | PE1 |
---|---|
collapse | true |
...
1.1. Create VoLTE service with Huawei VNFs and set nf_type parameter to huaweivnfmdriver. Put a screenshot here
Step 1.2 Register a dummy Huawei VNFM from ESR (this is needed by VFC even though we don't use any VNFM in automated testing as we will mock huaweivnfmdriver). Attach a picture here
Step 1.3 Register CloudOwner_RegionOne from ESR. Make sure the ESR VIM entry has esr-system-info-list. If AAI record doesn't have esr-system-info-list for the VIM, update the record.
Step 2. Install MockServer docker in Robot VM
Code Block |
---|
>sudo docker pull jamesdbloom/mockserver
>sudo docker run --name mockserver -d -p 1080:1080 jamesdbloom/mockserver |
Step 3. Use Postman to create PE1 and PE2 in A&AI
Code Block | ||||
---|---|---|---|---|
| ||||
PUT https://{{aai}}:8443/aai/v11/network/pnfs/pnf/2ef788f0-407c-3070-b756-3a5cd71fde18
body:
<?xml version="1.0" encoding="UTF-8"?>
<pnf xmlns="http://org.openecomp.aai.inventory/v11">
<pnf-name>2ef788f0-407c-3070-b756-3a5cd71fde18</pnf-name>
<pnf-name2>pe1_id</pnf-name2>
<pnf-name2-source>NE40E-01</pnf-name2-source>
<pnf-id>2ef788f0-407c-3070-b756-3a5cd71fde18</pnf-id>
<equip-type>NE40E-X3A</equip-type>
<equip-vendor>HUAWEI</equip-vendor>
<equip-model>example-equip-model-val-44828</equip-model>
<management-option>example-management-option-val-84964</management-option>
<ipaddress-v4-oam>10.1.1.101</ipaddress-v4-oam>
<sw-version>V800R009C10SPC200</sw-version>
<in-maint>true</in-maint>
<frame-id>example-frame-id-val-21069</frame-id>
<serial-number>2102350FMLN0G9000019</serial-number>
<ipaddress-v4-loopback-0>example-ipaddress-v4-loopback0-val-57218</ipaddress-v4-loopback-0>
<ipaddress-v6-loopback-0>example-ipaddress-v6-loopback0-val-64041</ipaddress-v6-loopback-0>
<ipaddress-v4-aim>example-ipaddress-v4-aim-val-89025</ipaddress-v4-aim>
<ipaddress-v6-aim>example-ipaddress-v6-aim-val-89025</ipaddress-v6-aim>
<ipaddress-v6-oam>example-ipaddress-v6-oam-val-82953</ipaddress-v6-oam>
<inv-status>example-inv-status-val-1920</inv-status>
<prov-status>example-prov-status-val-35250</prov-status>
<nf-role>example-nf-role-val-75080</nf-role>
</pnf>
|
...
Step 6. Use Postman to create data center network 1,2,3,4 for overlay network. Make sure update model-invariant-id and model-version-id with VoLTE e2e service invariant uuid and uui respectively.
Code Block | ||||
---|---|---|---|---|
| ||||
PUT https://{{aai}}:8443/aai/v11/network/l3-networks/l3-network/example-network-id-val-95686
Body:
<?xml version="1.0" encoding="UTF-8"?>
<l3-network xmlns="http://org.openecomp.aai.inventory/v11">
<network-id>example-network-id-val-95686</network-id>
<network-name>network1</network-name>
<network-type>example-network-type-val-25886</network-type>
<network-role>example-network-role-val-83276</network-role>
<network-technology>example-network-technology-val-14076</network-technology>
<neutron-network-id>example-neutron-network-id-val-26627</neutron-network-id>
<is-bound-to-vpn>true</is-bound-to-vpn>
<service-id>example-service-id-val-62516</service-id>
<network-role-instance>44307133</network-role-instance>
<orchestration-status>example-orchestration-status-val-96100</orchestration-status>
<heat-stack-id>example-heat-stack-id-val-78938</heat-stack-id>
<mso-catalog-key>example-mso-catalog-key-val-87197</mso-catalog-key>
<contrail-network-fqdn>example-contrail-network-fqdn-val-7496</contrail-network-fqdn>
<model-invariant-id>e9b5654e-6627-4590-9a54-a39b4d85955e</model-invariant-id>
<model-version-id>96a01eb8-1538-40a6-a9ab-0f6bf8e0d877</model-version-id>
<model-customization-id>example-model-customization-id-val-68776</model-customization-id>
<widget-model-id>example-widget-model-id-val-80547</widget-model-id>
<widget-model-version>example-widget-model-version-val-92795</widget-model-version>
<physical-network-name>example-physical-network-name-val-18937</physical-network-name>
<is-provider-network>true</is-provider-network>
<is-shared-network>true</is-shared-network>
<is-external-network>true</is-external-network>
<selflink>example-selflink-val-16441</selflink>
<operational-status>example-operational-status-val-2969</operational-status>
</l3-network>
|
Step 7. Change huaweivnfmdriver MSB service url and point to MockServer. Assume you are running from MutliService VM
...
, update /opt/msb_vm_init.sh to replace huaweivnfmdriver host ip and port with MockServer ip and port, and rerun the script.
Code Block |
---|
Deprecated (can't delete or query huaweivnfmdriver)
>curl -X DELETE http://127.0.0.1/api/microservices/v1/services/huaweivnfmdriver/v1
>curl -X GET http://127.0.0.1/api/microservices/v1/services/huaweivnfmdriver/v1
>curl -X POST -H "Content-Type:application/json" -d '{"serviceName":"huaweivnfmdriver","version":"v1","url":"/api/huaweivnfmdriver/v1","protocol":"REST","lb_policy":"round-robin","nodes":[{"ip":"10.0.10.1","port":"1080"}]}' http://127.0.0.1/api/microservices/v1/services
|
Step 8. Create VoLTE service with Huawei VNFs and set nf_type parameter to huaweivnfmdriver. Put a screenshot hereStep 9. Open /service//vfc/nfvo/lcm/lcm/pub/config/config.py in vfc_nslcm container and change AAI_BASE_URL = "http://10.0.14.1:80/aai/v11"
Step 10. Update file basemodel.py in vfc_catalog container with the version from master branch
/service/vfc/nfvo/catalog/catalog/pub/utils/toscaparser/basemodel.py (See R1 Known Issues issue 1)
...
Code Block |
---|
root@3511e71899bc:/service/vfc/nfvo/catalog/catalog/pub/config# diff config.py config.py.orig 52,54c52,54 < SDC_BASE_URL = "http://10.0.14.1:80/api" < SDC_USER = "aai" < SDC_PASSWD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U" --- > SDC_BASE_URL = "https://127.0.0.1:8443/api" > SDC_USER = "SDC" > SDC_PASSWD = "SDC" |
Step 11-2. Validate msb-ip and sdnc-ip 1. Restart MockServer container and reset it
Code Block |
---|
ubuntu@onap-robot:~/mockserverclient$ sudo docker restart mockserver
ubuntu@onap-robot:~/mockserverclient$ curl -v -X PUT "http://localhost:1080/reset"
|
Step 11-2. Change msb and sdnc ip and port in /etc/mso/config.d/topology.properties are correct oam ips to correct ip and port in SO container testlab_mso_1. Everytime testlab_mso_1 (TODO: if this is correct, remove this step)
Step 12. Configure MockServer to simulate SDN controller and VNFM driver
...
title | Mock server script to simulate SDN controllers and huawei VNFM driver |
---|---|
linenumbers | true |
collapse | true |
...
container restarts, this file needs to be corrected like this.
Code Block |
---|
root@mso:/etc/mso/config.d# diff topology.properties topology.properties.orig
19,22c19,22
< msb-ip=10.0.14.1
< msb-port=80
< sdnc-ip=10.0.7.1
< sdnc-port=8282
---
> msb-ip=127.0.0.1
> msb-port=8080
> sdnc-ip=172.30.3.38
> sdnc-port=8282
|
Step 12. Configure MockServer to simulate SDN controller and VNFM driver
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "statusCodemethod": 200"POST", "headerspath": {"/controller/v2/tokens" }, "content-typehttpResponse": ["application/json"]{ }, "bodystatusCode": 200, { "notheaders": { "content-type": ["application/json"] }, "body": { "not": false, "type": "JSON", "json": "{\"errcode\":\"0\",\"errmsg\":\"get token successfully.\",\"data\":{\"expiredDate\":\"2018-11-10 10:03:33\",\"token_id\":\"7F06BFDDAC33A989:77DAD6058B1BB81EF1A557745E4D9C78399B31C4DB509704ED8A7DF05A362A59\"}}" } } }' curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "POST", "path": "/restconf/data/huawei-ac-net-l3vpn-svc:l3vpn-svc-cfg/vpn-services" }, "httpResponse": { "statusCode": 201 }, "times" : { "remainingTimes" : 2, "unlimited" : true }, "timeToLive" : { "unlimited" : true } }' curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "PUT", "path": "/restconf/data/huawei-ac-net-l3vpn-svc:l3vpn-svc-cfg/huawei-ac-net-l3vpn-svc-vfi:vrf-attributes" }, "httpResponse": { "statusCode": 204 }, "times" : { "remainingTimes" : 2, "unlimited" : true }, "timeToLive" : { "unlimited" : true } }' curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "POST", "path": "/restconf/data/huawei-ac-net-l3vpn-svc:l3vpn-svc-cfg/sites" }, "httpResponse": { "statusCode": 201 }, "times" : { "remainingTimes" : 2, "unlimited" : true }, "timeToLive" : { "unlimited" : true } }' # ZTE DCI curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "POST", "path": "/v2.0/l3-dci-connects" }, "httpResponse": { "statusCode": 201 }, "times" : { "remainingTimes" : 2, "unlimited" : true }, "timeToLive" : { "unlimited" : true } }' # huaweivnfmdriver curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "POST", "path": "/api/huaweivnfmdriver/v1/a0400010-11d7-4875-b4ae-5f42ed5d3a85/vnfs" }, "httpResponse": { "statusCode": 200, "headers": { "content-type": ["application/json"] }, "body": { "not": false, "type": "JSON", "json": "{\"vnfInstanceId\":\"fa3dca847b054f4eb9d3bc8bb9e5eec9\",\"jobId\":\"fa3dca847b054f4eb9d3bc8bb9e5eec9_post\"}" } }, "times" : { "remainingTimes" : 2, "unlimited" : true }, "timeToLive" : { "unlimited" : true } }' # huaweivnfmdriver curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "GET", "path": "/api/huaweivnfmdriver/v1/a0400010-11d7-4875-b4ae-5f42ed5d3a85/jobs/fa3dca847b054f4eb9d3bc8bb9e5eec9_post", "queryStringParameters": { "responseId": ["0"] } }, "httpResponse": { "statusCode": 200, "headers": { "content-type": ["application/json"] }, "body": { "not": false, "type": "JSON", "json": "{\"jobId\":\"fa3dca847b054f4eb9d3bc8bb9e5eec9\",\"responsedescriptor\":{\"progress\":\"50\",\"status\":\"processing\",\"errorCode\":null,\"responseId\":\"0\"}}" } }, "times" : { "remainingTimes" : 20, "unlimited" : false }, "timeToLive" : { "unlimited" : true } }' # huaweivnfmdriver curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "GET", "path": "/api/huaweivnfmdriver/v1/a0400010-11d7-4875-b4ae-5f42ed5d3a85/jobs/fa3dca847b054f4eb9d3bc8bb9e5eec9_post", "queryStringParameters": { "responseId": ["0"] } }, "httpResponse": { "statusCode": 200, "headers": { "content-type": ["application/json"] }, "body": { "not": false, "type": "JSON", "json": "{\"jobId\":\"fa3dca847b054f4eb9d3bc8bb9e5eec9\",\"responsedescriptor\":{\"progress\":\"100\",\"status\":\"processing\",\"errorCode\":null,\"responseId\":\"0\"}}" } }, "times" : { "remainingTimes" : 2, "unlimited" : true }, "timeToLive" : { "unlimited" : true } }' curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "GET", "path": "/api/huaweivnfmdriver/v1/a0400010-11d7-4875-b4ae-5f42ed5d3a85/jobs/fa3dca847b054f4eb9d3bc8bb9e5eec9_post", "queryStringParameters": { "responseId": ["50"] } }, "httpResponse": { "statusCode": 200, "headers": { "content-type": ["application/json"] }, "body": { "not": false, "type": "JSON", "json": "{\"jobId\":\"fa3dca847b054f4eb9d3bc8bb9e5eec9\",\"responsedescriptor\":{\"progress\":\"100\",\"status\":\"processing\",\"errorCode\":null,\"responseId\":\"50\"}}" } }, "times" : { "remainingTimes" : 2, "unlimited" : true }, "timeToLive" : { "unlimited" : true } }' curl -v -X PUT "http://localhost:1080/expectation" -d '{ "httpRequest": { "method": "GET", "path": "/api/huaweivnfmdriver/v1/a0400010-11d7-4875-b4ae-5f42ed5d3a85/jobs/fa3dca847b054f4eb9d3bc8bb9e5eec9_post", "queryStringParameters": { "responseId": ["2"] } }, "httpResponse": { "statusCode": 200, "headers": { "content-type": ["application/json"] }, "body": { "not": false, "type": "JSON", "json": "{\"jobId\":\"fa3dca847b054f4eb9d3bc8bb9e5eec9\",\"responsedescriptor\":{\"progress\":\"100\",\"status\":\"processing\",\"errorCode\":null,\"responseId\":\"2\"}}" } }, "times" : { "remainingTimes" : 2, "unlimited" : true }, "timeToLive" : { "unlimited" : true } }' |
...
Step 13. Distribute VoLTE service from SDC
Step 14. Distribute VoLTE service from UUI
Step 15. Simulate request from UUI . After distribution, use distribution monitor to make AAI, SO, SDNC all received the VoLTE service model distribution. If SDNC did not receive the model, restart sdnc_ueblistener_container from SDNC VM.
Step 14. Onboard VNFs, EPC_NS, IMS_NS, EPC Service, IMS Service in order from UUI (why EPC_NS before EPC Service)?
Step 15. Simulate request from UUI to SO
Step 16. Simulate notification message from Huawei VNFM driver to nslcm
...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
curl -v -X POST "http://10.0.14.1:80/api/nslcm/v1/ns/a0400010-11d7-4875-b4ae-5f42ed5d3a85/vnfs/fa3dca847b054f4eb9d3bc8bb9e5eec9/Notify" -d '{ "status": "Building", "vnfInstanceId": "fa3dca847b054f4eb9d3bc8bb9e5eec9", "operation": "Instantiate", "affectedVnfc": [] }' sleep 1 curl -v -X POST "http://10.0.14.1:80/api/nslcm/v1/ns/a0400010-11d7-4875-b4ae-5f42ed5d3a85/vnfs/fa3dca847b054f4eb9d3bc8bb9e5eec9/Notify" -d '{ "status":"Building","vnfInstanceId":"fa3dca847b054f4eb9d3bc8bb9e5eec9","operation":"Instantiate","affectedVnfc":[{"vnfcInstanceId":"5376027132be4ba184ad55257a031a60","changeType":"added","vimid":"core-dc_RegionOne","vmid":"5376027132be4ba184ad55257a031a60","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_OMU_1","vduid":"5376027132be4ba184ad55257a031a60"},{"vnfcInstanceId":"a40772541d5d405a85cce0013cf2afbd","changeType":"added","vimid":"core-dc_RegionOne","vmid":"a40772541d5d405a85cce0013cf2afbd","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_OMU_0","vduid":"a40772541d5d405a85cce0013cf2afbd"},{"vnfcInstanceId":"9b5080d645684ba0b16a8eb38d12d136","changeType":"added","vimid":"core-dc_RegionOne","vmid":"9b5080d645684ba0b16a8eb38d12d136","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SPU_C_0067","vduid":"9b5080d645684ba0b16a8eb38d12d136"},{"vnfcInstanceId":"c91a54f15e654fde97895efe21b1b032","changeType":"added","vimid":"core-dc_RegionOne","vmid":"c91a54f15e654fde97895efe21b1b032","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SPU_C_0066","vduid":"c91a54f15e654fde97895efe21b1b032"},{"vnfcInstanceId":"c800312379d04243a64d361142fe366d","changeType":"added","vimid":"core-dc_RegionOne","vmid":"c800312379d04243a64d361142fe366d","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_IPU_A_0065","vduid":"c800312379d04243a64d361142fe366d"},{"vnfcInstanceId":"e52ee6658768476084c7a97af26e39cf","changeType":"added","vimid":"core-dc_RegionOne","vmid":"e52ee6658768476084c7a97af26e39cf","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_IPU_A_0064","vduid":"e52ee6658768476084c7a97af26e39cf"},{"vnfcInstanceId":"30adc3ab8698479c9acd9e532c9f0d5a","changeType":"added","vimid":"core-dc_RegionOne","vmid":"30adc3ab8698479c9acd9e532c9f0d5a","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SDU_A_0068","vduid":"30adc3ab8698479c9acd9e532c9f0d5a"},{"vnfcInstanceId":"5622630bfe3f41a2bac4f69e4baec0a3","changeType":"added","vimid":"core-dc_RegionOne","vmid":"5622630bfe3f41a2bac4f69e4baec0a3","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SDU_A_0069","vduid":"5622630bfe3f41a2bac4f69e4baec0a3"},{"vnfcInstanceId":"a82f9c5a22e748139bd0569e52048cb9","changeType":"added","vimid":"core-dc_RegionOne","vmid":"a82f9c5a22e748139bd0569e52048cb9","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SDU_A_0070","vduid":"a82f9c5a22e748139bd0569e52048cb9"}] }' sleep 1 curl -v -X POST "http://10.0.14.1:80/api/nslcm/v1/ns/a0400010-11d7-4875-b4ae-5f42ed5d3a85/vnfs/fa3dca847b054f4eb9d3bc8bb9e5eec9/Notify" -d '{ "status":"Active","vnfInstanceId":"fa3dca847b054f4eb9d3bc8bb9e5eec9","operation":"Instantiate","affectedVnfc":[{"vnfcInstanceId":"5376027132be4ba184ad55257a031a60","changeType":"added","vimid":"core-dc_RegionOne","vmid":"5376027132be4ba184ad55257a031a60","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_OMU_1","vduid":"5376027132be4ba184ad55257a031a60"},{"vnfcInstanceId":"a40772541d5d405a85cce0013cf2afbd","changeType":"added","vimid":"core-dc_RegionOne","vmid":"a40772541d5d405a85cce0013cf2afbd","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_OMU_0","vduid":"a40772541d5d405a85cce0013cf2afbd"},{"vnfcInstanceId":"9b5080d645684ba0b16a8eb38d12d136","changeType":"added","vimid":"core-dc_RegionOne","vmid":"9b5080d645684ba0b16a8eb38d12d136","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SPU_C_0067","vduid":"9b5080d645684ba0b16a8eb38d12d136"},{"vnfcInstanceId":"c91a54f15e654fde97895efe21b1b032","changeType":"added","vimid":"core-dc_RegionOne","vmid":"c91a54f15e654fde97895efe21b1b032","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SPU_C_0066","vduid":"c91a54f15e654fde97895efe21b1b032"},{"vnfcInstanceId":"c800312379d04243a64d361142fe366d","changeType":"added","vimid":"core-dc_RegionOne","vmid":"c800312379d04243a64d361142fe366d","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_IPU_A_0065","vduid":"c800312379d04243a64d361142fe366d"},{"vnfcInstanceId":"e52ee6658768476084c7a97af26e39cf","changeType":"added","vimid":"core-dc_RegionOne","vmid":"e52ee6658768476084c7a97af26e39cf","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_IPU_A_0064","vduid":"e52ee6658768476084c7a97af26e39cf"},{"vnfcInstanceId":"30adc3ab8698479c9acd9e532c9f0d5a","changeType":"added","vimid":"core-dc_RegionOne","vmid":"30adc3ab8698479c9acd9e532c9f0d5a","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SDU_A_0068","vduid":"30adc3ab8698479c9acd9e532c9f0d5a"},{"vnfcInstanceId":"5622630bfe3f41a2bac4f69e4baec0a3","changeType":"added","vimid":"core-dc_RegionOne","vmid":"5622630bfe3f41a2bac4f69e4baec0a3","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SDU_A_0069","vduid":"5622630bfe3f41a2bac4f69e4baec0a3"},{"vnfcInstanceId":"8a6c8c808f6549be824375c33639a7bb","changeType":"added","vimid":"core-dc_RegionOne","vmid":"8a6c8c808f6549be824375c33639a7bb","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SDU_A_0071","vduid":"8a6c8c808f6549be824375c33639a7bb"},{"vnfcInstanceId":"a82f9c5a22e748139bd0569e52048cb9","changeType":"added","vimid":"core-dc_RegionOne","vmid":"a82f9c5a22e748139bd0569e52048cb9","vmname":"vnfab40e6ba-df1f-458c-94c5-a45_SDU_A_0070","vduid":"a82f9c5a22e748139bd0569e52048cb9"}] }' |
Step 17. Verify the requests received by MockServer. e.g.:
Code Block |
---|
ubuntu@onap-robot:~/mockserverclient$ curl -X PUT "http://localhost:1080/retrieve?type=REQUESTS&format=JSON"
|
or a particular request by url, e.g.:
Code Block |
---|
ubuntu@onap-robot:~/mockserverclient$ curl -X PUT "http://localhost:1080/retrieve?type=REQUESTS&format=JSON" -d '{
"path": "/controller/v2/tokens"
}'
|
Step 18. Verify service instance and network entries are created in A&AI
Step 19. Record resource usage of major containers with docker stats command
Code Block |
---|
ubuntu@onap-so:~$ sudo docker stats testlab_mso_1 testlab_mariadb_1 --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}" --no-stream
NAME CPU % MEM USAGE / LIMIT
testlab_mso_1 65.26% 3.21GiB / 7.796GiB
testlab_mariadb_1 100.44% 3.323GiB / 7.796GiB |