diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/install.sh b/install.sh new file mode 100755 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/postman/TTF_T029.postman_collection.json b/postman/TTF_T029.postman_collection.json new file mode 100644 index 0000000000000000000000000000000000000000..1d040f0f38efb3b64e81906ada219d32c3ced78f --- /dev/null +++ b/postman/TTF_T029.postman_collection.json @@ -0,0 +1,4652 @@ +{ + "info": { + "_postman_id": "52110c8a-6639-4da2-9fcb-553004c29de9", + "name": "TTF_T029", + "description": "This is is the Enmvironment used by the ETSI TTF T029 millimetre Wave Transmission (mWT); \nDefinition of a Wireless Transport Profile for Standard SDN Northbound Interfaces Conformance test suite", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "152820", + "_collection_link": "https://red-trinity-563699.postman.co/workspace/New-Team-Workspace~d54f0e73-b65d-41a2-8e4e-35b7b23cdd96/collection/152820-52110c8a-6639-4da2-9fcb-553004c29de9?action=share&source=collection_link&creator=152820" + }, + "item": [ + { + "name": "Nokia Lab Testing", + "item": [ + { + "name": "Initial Authentication - Get Token", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "username", + "value": "{{PX_USER}}", + "type": "string" + }, + { + "key": "password", + "value": "{{PX_USER_PASSWD}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"grant_type\": \"client_credentials\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}/rest-gateway/rest/api/v1/auth/token", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "path": [ + "rest-gateway", + "rest", + "api", + "v1", + "auth", + "token" + ] + } + }, + "response": [] + }, + { + "name": "Initial Authentication - Refresh Token", + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "username", + "value": "{{PX_USER}}", + "type": "string" + }, + { + "key": "password", + "value": "{{PX_USER_PASSWD}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"grant_type\": \"refresh_token\",\r\n \"refresh_token\": \"{{refreshToken}}\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}/rest-gateway/rest/api/v1/auth/token", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "path": [ + "rest-gateway", + "rest", + "api", + "v1", + "auth", + "token" + ] + } + }, + "response": [] + }, + { + "name": "Location Services", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}/rest-gateway/rest/api/v1/location/services", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "path": [ + "rest-gateway", + "rest", + "api", + "v1", + "location", + "services" + ] + } + }, + "response": [] + } + ], + "description": "Request to get Nokia Lab bearer token (see [https://network.developer.nokia.com/cloudlab/lab-catalog/public-lab/IP/](https://network.developer.nokia.com/cloudlab/lab-catalog/public-lab/IP/))" + }, + { + "name": "RESTCONF", + "item": [ + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "var responseData = '';", + "", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json'\", function () {", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json');", + " responseData = pm.response.json()['ietf-yang-library:yang-library'];", + " pm.expect(responseData).to.be.an('object');", + " pm.expect(responseData).to.have.property('content-id');", + "});", + "", + "var topLevelPropertyName = '';", + "var moduleList = {};", + "", + "pm.test(\"Validate the main field is 'module-set'\", function () {", + " topLevelPropertyName = 'module-set';", + " pm.expect(responseData[topLevelPropertyName]).to.be.an('array');", + " pm.expect(responseData[topLevelPropertyName]).to.be.an('array').with.lengthOf.at.least(1);", + " // Build the list of the modules", + " responseData[topLevelPropertyName][0].module.forEach(function (item, index) {", + " pm.expect(item).to.have.property('name');", + " pm.expect(item).to.have.property('revision');", + " pm.expect(item).to.have.property('namespace');", + " if (moduleList.hasOwnProperty(item.name)) {", + " if (moduleList[item.name].revision < item.revision) {", + " moduleList[item.name] = item;", + " }", + " } else {", + " moduleList[item.name] = item;", + " }", + " });", + " console.info(\"moduleList=\", moduleList)", + "});", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS are required.');\r", + "}\r", + " \r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json", + "type": "text" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-yang-library:yang-library", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-yang-library:yang-library" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [ + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_01", + "originalRequest": { + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json", + "type": "text" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-yang-library:yang-library", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-yang-library:yang-library" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Date", + "value": "Mon, 08 Jul 2024 06:56:11 GMT" + }, + { + "key": "Content-Type", + "value": "application/yang-data+json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Cache-Control", + "value": "no-store, no-cache, max-age=0, must-revalidate" + }, + { + "key": "Cache-Control", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "Thu, 01 Jan 1970 00:00:00 GMT" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Strict-Transport-Security", + "value": "max-age=0" + }, + { + "key": "X-Frame-Options", + "value": "SAMEORIGIN" + }, + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "1; mode=block" + }, + { + "key": "Content-Security-Policy", + "value": "frame-src * https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; frame-ancestors 'self' https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; connect-src 'self' wss://139.178.74.219:* wss://139.178.74.218:* wss://10.233.20.242:* wss://10.233.31.14:* wss://10.233.20.198:* wss://10.233.13.232:* https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; default-src 'self' data: https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:* 'unsafe-inline' ; img-src * data:;" + }, + { + "key": "Set-Cookie", + "value": "NSPOSAPP2_JSESSIONID=91336A5B017792076A4A1B2B49F3AB8F; Expires=Wed, 07 Aug 2024 06:56:11 GMT; Path=/restconf; Secure; HttpOnly" + }, + { + "key": "total-count", + "value": "0" + }, + { + "key": "start-index", + "value": "0" + }, + { + "key": "end-index", + "value": "-1" + } + ], + "cookie": [], + "body": "{\n \"ietf-yang-library:yang-library\": {\n \"content-id\": \"NSP-2019-05-20\",\n \"module-set\": [\n {\n \"name\": \"NSP-MDC-2019-05-20\",\n \"module\": [\n {\n \"name\": \"network-device-mgr\",\n \"revision\": \"2018-06-06\",\n \"namespace\": \"urn:nokia:nsp:mdm:network-device-mgr\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-yang-library\",\n \"revision\": \"2019-01-04\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-yang-library\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-yang-schema-mount\",\n \"revision\": \"2017-10-09\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-restconf\",\n \"revision\": \"2016-08-15\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-restconf\",\n \"conformance-type\": \"implement\"\n }\n ]\n }\n ]\n }\n}" + } + ] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT supports RESTCONF API request.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 5.2.1 RESTCONF Protocol\",\n- \"RFC 8040 RESTCONF Protocol\",\n- \"RFC 8525 YANG Library\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS" + }, + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_02", + "item": [ + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "var responseData = '';", + "", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json'\", function () {", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json');", + " responseData = pm.response.json()['ietf-yang-library:yang-library'];", + " pm.expect(responseData).to.be.an('object');", + " pm.expect(responseData).to.have.property('content-id');", + "});", + "", + "var topLevelPropertyName = '';", + "var moduleList = {};", + "", + "pm.test(\"Validate the main field is 'module-set'\", function () {", + " topLevelPropertyName = 'module-set';", + " pm.expect(responseData[topLevelPropertyName]).to.be.an('array');", + " pm.expect(responseData[topLevelPropertyName]).to.be.an('array').with.lengthOf.at.least(1);", + " // Build the list of the modules", + " responseData[topLevelPropertyName][0].module.forEach(function (item, index) {", + " pm.expect(item).to.have.property('name');", + " pm.expect(item).to.have.property('revision');", + " pm.expect(item).to.have.property('namespace');", + " if (moduleList.hasOwnProperty(item.name)) {", + " if (moduleList[item.name].revision < item.revision) {", + " moduleList[item.name] = item;", + " }", + " } else {", + " moduleList[item.name] = item;", + " }", + " });", + " console.info(\"moduleList=\", moduleList)", + "});", + "", + "var modulesVersion = {", + " 'ietf-yang-library':[pm.environment.get('PX_IETF_YANG_LIBRARY_VERSION'), pm.environment.get('PX_IETF_YANG_LIBRARY_NAMESPACE')], ", + " 'ietf-restconf':[pm.environment.get('PX_IETF_RESTCONF_VERSION'), pm.environment.get('PX_IETF_RESTCONF_NAMESPACE')],", + " 'ietf-network':[pm.environment.get('PX_IETF_NETWORK_VERSION'), pm.environment.get('PX_IETF_NETWORK_NAMESPACE')]", + "};", + "pm.test(\"Verify that the 'module' array contains all mandatories IETF Yang modules'\", function () {", + " pm.expect(moduleList).to.have.property(\"ietf-restconf\");", + " pm.expect(moduleList).to.have.property(\"ietf-yang-library\"); ", + " for (var key in moduleList) {", + " var item = moduleList[key];", + " console.info(\"Processing item \", item);", + " if (modulesVersion[key] !== undefined) {", + " pm.expect(item).to.have.property('revision', modulesVersion[key][0]);", + " pm.expect(item).to.have.property('namespace', modulesVersion[key][1]);", + " }", + " }; // End of 'for' statement", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS are required.');\r", + "}\r", + " \r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json", + "type": "text" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-yang-library:yang-library", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-yang-library:yang-library" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [ + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_02", + "originalRequest": { + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json", + "type": "text" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-yang-library:yang-library", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-yang-library:yang-library" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Date", + "value": "Mon, 08 Jul 2024 06:56:35 GMT" + }, + { + "key": "Content-Type", + "value": "application/yang-data+json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Cache-Control", + "value": "no-store, no-cache, max-age=0, must-revalidate" + }, + { + "key": "Cache-Control", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "Thu, 01 Jan 1970 00:00:00 GMT" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Strict-Transport-Security", + "value": "max-age=0" + }, + { + "key": "X-Frame-Options", + "value": "SAMEORIGIN" + }, + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "1; mode=block" + }, + { + "key": "Content-Security-Policy", + "value": "frame-src * https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; frame-ancestors 'self' https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; connect-src 'self' wss://139.178.74.219:* wss://139.178.74.218:* wss://10.233.20.242:* wss://10.233.31.14:* wss://10.233.20.198:* wss://10.233.13.232:* https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; default-src 'self' data: https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:* 'unsafe-inline' ; img-src * data:;" + }, + { + "key": "Set-Cookie", + "value": "NSPOSAPP2_JSESSIONID=17B1C61E6B573FFA8D8406EE03A3D116; Expires=Wed, 07 Aug 2024 06:56:35 GMT; Path=/restconf; Secure; HttpOnly" + }, + { + "key": "total-count", + "value": "0" + }, + { + "key": "start-index", + "value": "0" + }, + { + "key": "end-index", + "value": "-1" + } + ], + "cookie": [], + "body": "{\n \"ietf-yang-library:yang-library\": {\n \"content-id\": \"NSP-2019-05-20\",\n \"module-set\": [\n {\n \"name\": \"NSP-MDC-2019-05-20\",\n \"module\": [\n {\n \"name\": \"network-device-mgr\",\n \"revision\": \"2018-06-06\",\n \"namespace\": \"urn:nokia:nsp:mdm:network-device-mgr\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-yang-library\",\n \"revision\": \"2019-01-04\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-yang-library\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-yang-schema-mount\",\n \"revision\": \"2017-10-09\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-restconf\",\n \"revision\": \"2016-08-15\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-restconf\",\n \"conformance-type\": \"implement\"\n }\n ]\n }\n ]\n }\n}" + } + ] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT supports the basic YANG data models.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 5.2.2.1 YANG Version\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS" + }, + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_03", + "item": [ + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_03", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseData = '';\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json');\r", + " responseData = pm.response.json()['ietf-yang-library:yang-library'];\r", + " pm.expect(responseData).to.be.an('object');\r", + " pm.expect(responseData).to.have.property('content-id');\r", + "});\r", + "\r", + "var topLevelPropertyName = '';\r", + "var moduleList = {};\r", + "\r", + "pm.test(\"Validate the main field is 'module-set'\", function () {\r", + " topLevelPropertyName = 'module-set';\r", + " pm.expect(responseData[topLevelPropertyName]).to.be.an('array');\r", + " pm.expect(responseData[topLevelPropertyName]).to.be.an('array').with.lengthOf.at.least(1);\r", + " // Build the list of the modules\r", + " responseData[topLevelPropertyName][0].module.forEach(function (item, index) {\r", + " pm.expect(item).to.have.property('name');\r", + " pm.expect(item).to.have.property('revision');\r", + " pm.expect(item).to.have.property('namespace');\r", + " if (moduleList.hasOwnProperty(item.name)) {\r", + " if (moduleList[item.name].revision < item.revision) {\r", + " moduleList[item.name] = item;\r", + " }\r", + " } else {\r", + " moduleList[item.name] = item;\r", + " }\r", + " });\r", + " console.info(\"moduleList=\", moduleList)\r", + "});\r", + "\r", + "var modulesVersion = {\r", + " 'ietf-network-topology':[pm.environment.get('PX_IETF_NETWORK_TOPOLOGY_VERSION'), pm.environment.get('PX_IETF_NETWORK_TOPOLOGY_NAMESPACE')],\r", + " 'ietf-te-topology':[pm.environment.get('PX_IETF_TE_TOPOLOGY_VERSION'), pm.environment.get('PX_IETF_TE_TOPOLOGY_NAMESPACE')],\r", + " 'ietf-eth-te-topology':[pm.environment.get('PX_IETF_ETH_TE_TOPOLOGY_VERSION'), pm.environment.get('PX_IETF_ETH_TE_TOPOLOGY_NAMESPACE')],\r", + " 'ietf-microwave-topology':[pm.environment.get('PX_IETF_MW_TOPOLOGY_VERSION'), pm.environment.get('PX_IETF_MW_TOPOLOGY_NAMESPACE')],\r", + " 'ietf-eth-tran-service':[pm.environment.get('PX_IETF_ETH_TRAN_SVC_VERSION'), pm.environment.get('PX_IETF_ETH_TRAN_SVC_NAMESPACE')],\r", + " 'ietf-eth-tran-types':[pm.environment.get('PX_IETF_ETH_TRAN_TYPES_VERSION'), pm.environment.get('PX_IETF_ETH_TRAN_TYPES_NAMESPACE')]\r", + "};\r", + "\r", + "pm.test(\"Verify that the 'module' array contains all mandatories IETF Yang modules'\", function () {\r", + " pm.expect(moduleList).to.have.property(\"ietf-restconf\");\r", + " pm.expect(moduleList).to.have.property(\"ietf-yang-library\");\r", + " var counter = 0\r", + " for (var key in moduleList) {\r", + " var item = moduleList[key];\r", + " console.info(\"Processing item \", item);\r", + " if (modulesVersion[key] !== undefined) {\r", + " pm.expect(item).to.have.property('revision', modulesVersion[key][0]);\r", + " pm.expect(item).to.have.property('namespace', modulesVersion[key][1]);\r", + " counter += 1\r", + " }\r", + " }; // End of 'for' statement\r", + "\r", + " if (counter !== modulesVersion.length) {\r", + " throw new Error('Mandatories modules are missing');\r", + " }\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json", + "type": "text" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-yang-library:yang-library", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-yang-library:yang-library" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [ + { + "name": "TC_mWT_PNC_RESTCONF_GET_BV_03", + "originalRequest": { + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json", + "type": "text" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-yang-library:yang-library", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-yang-library:yang-library" + ] + } + }, + "status": "OK", + "code": 200, + "_postman_previewlanguage": "json", + "header": [ + { + "key": "Date", + "value": "Mon, 08 Jul 2024 06:57:08 GMT" + }, + { + "key": "Content-Type", + "value": "application/yang-data+json" + }, + { + "key": "Transfer-Encoding", + "value": "chunked" + }, + { + "key": "Connection", + "value": "keep-alive" + }, + { + "key": "Cache-Control", + "value": "no-store, no-cache, max-age=0, must-revalidate" + }, + { + "key": "Cache-Control", + "value": "no-cache" + }, + { + "key": "Expires", + "value": "Thu, 01 Jan 1970 00:00:00 GMT" + }, + { + "key": "Pragma", + "value": "no-cache" + }, + { + "key": "Strict-Transport-Security", + "value": "max-age=0" + }, + { + "key": "X-Frame-Options", + "value": "SAMEORIGIN" + }, + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-XSS-Protection", + "value": "1; mode=block" + }, + { + "key": "Content-Security-Policy", + "value": "frame-src * https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; frame-ancestors 'self' https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; connect-src 'self' wss://139.178.74.219:* wss://139.178.74.218:* wss://10.233.20.242:* wss://10.233.31.14:* wss://10.233.20.198:* wss://10.233.13.232:* https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:*; default-src 'self' data: https://10.233.20.198:* https://10.233.31.14:* https://139.178.74.218:* https://139.178.74.219:* https://10.233.13.232:* https://10.233.20.242:* 'unsafe-inline' ; img-src * data:;" + }, + { + "key": "Set-Cookie", + "value": "NSPOSAPP2_JSESSIONID=7F3F9CD1A85087309F705C1ACE2A16CF; Expires=Wed, 07 Aug 2024 06:57:08 GMT; Path=/restconf; Secure; HttpOnly" + }, + { + "key": "total-count", + "value": "0" + }, + { + "key": "start-index", + "value": "0" + }, + { + "key": "end-index", + "value": "-1" + } + ], + "cookie": [], + "body": "{\n \"ietf-yang-library:yang-library\": {\n \"content-id\": \"NSP-2019-05-20\",\n \"module-set\": [\n {\n \"name\": \"NSP-MDC-2019-05-20\",\n \"module\": [\n {\n \"name\": \"network-device-mgr\",\n \"revision\": \"2018-06-06\",\n \"namespace\": \"urn:nokia:nsp:mdm:network-device-mgr\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-yang-library\",\n \"revision\": \"2019-01-04\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-yang-library\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-yang-schema-mount\",\n \"revision\": \"2017-10-09\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount\",\n \"conformance-type\": \"implement\"\n },\n {\n \"name\": \"ietf-restconf\",\n \"revision\": \"2016-08-15\",\n \"namespace\": \"urn:ietf:params:xml:ns:yang:ietf-restconf\",\n \"conformance-type\": \"implement\"\n }\n ]\n }\n ]\n }\n}" + } + ] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides the list of supported mWT GS 024 YANG data models.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 5.2.2.2 Common YANG data models\",\n \n- \"ETSI GS mWT 024 Clause 5.2.2.3 YANG Data Models at the Microwave MPI\",\n \n- \"ETSI GS mWT 024 Clause 5.2.2.4 Hierarchical relationship among YANG data models\"EndFragment\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS" + } + ] + }, + { + "name": "Blackbox", + "item": [ + { + "name": "TC_mWT_PNC_BB_MW_TOPO_GET_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_BB_MW_TOPO_GET_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that the IUT contains network information', function() {\r", + " pm.expect(eth).to.not.equal(null);\r", + "});\r", + "\r", + "pm.test('Verify that the IUT does not contain microwave network information', function() {\r", + " mw = findMWNetwork(networksObj.network);\r", + " pm.expect(mw).to.equal(null);\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_BB') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_BB are required.');\r", + "}\r", + " " + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks" + ] + } + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT does not provide any MW network topology\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.2\",\n \n- \"ETSI GS mWT 024 Annex A.2.3\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_BB and MW_TOPO" + }, + { + "name": "TC_mWT_PNC_BB_MW_TOPO_GET_BV_02", + "item": [ + { + "name": "TC_mWT_PNC_BB_MW_TOPO_GET_BV_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that the IUT provides a network list containing only one node', function() {\r", + " pm.expect(eth).to.not.equal(null);\r", + " pm.expect(networkList.length).to.equal(1);\r", + "});\r", + "\r", + "pm.test('Verify that the IUT does not contain microwave network information', function() {\r", + " mw = findMWNetwork(networksObj.network);\r", + " pm.expect(mw).to.equal(null);\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_BB') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_BB are required.');\r", + "}\r", + " " + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks" + ] + } + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides a network list containing only one node.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.2\",\n \n- \"ETSI GS mWT 024 Annex A.2.3\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_BB and MW_TOPO" + } + ], + "description": "This group provides test case for Black-box abstraction level.\n\nReference\n\n- \"4.3.2 AL1: Abstraction Level 1 - \"Black-box\"\"" + }, + { + "name": "PartiallyTransparent", + "item": [ + { + "name": "MWTopologyDiscovery", + "item": [ + { + "name": "TC_mWT_PNC_PT_MW_TOPO_GET_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_MW_TOPO_GET_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null;\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that are present all mandatories microwave topology attributes', function() {\r", + " pm.expect(mw).to.have.property('network-id');\r", + "\r", + " pm.expect(mw).to.have.property('network-types');\r", + " pm.expect(mw['network-types']).to.have.property('ietf-te-topology:te-topology');\r", + " pm.expect(mw['network-types']['ietf-te-topology:te-topology']).to.have.property('ietf-microwave-topology:mw-topology');\r", + "\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:provider-id\"); //, provider_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:client-id\"); //, client_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:te-topology-id\"); //, mw_topology_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:te\");\r", + " pm.expect(mw['ietf-te-topology:te']).to.have.property('name'); //, mw_network_name);\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_MW_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_MW_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks/topologyId/mw-native-topology", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks", + "topologyId", + "mw-native-topology" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n\"Verify that the IUT provides the MW network topology for all networks with mandatory mWT GC 024 data elements subset.\"\n\nReference\n\n- \"ETSI GS mWT 024 Annex A.1.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology\"\n \n\nPICS Selection StartFragmentIUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_MW_TOPO_GET_BO_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_MW_TOPO_GET_BO_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 400\", function () {\r", + " pm.response.to.have.status(400);\r", + "});\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_MW_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_MW_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/networks", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "networks" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when the request is malformed.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Annex A.2.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_MW_TOPO_GET_BV_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_MW_TOPO_GET_BV_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null;\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that are present all mandatories microwave topology attributes', function() {\r", + " pm.expect(mw).to.have.property('network-id');\r", + "\r", + " pm.expect(mw).to.have.property('network-types');\r", + " pm.expect(mw['network-types']).to.have.property('ietf-te-topology:te-topology');\r", + " pm.expect(mw['network-types']['ietf-te-topology:te-topology']).to.have.property('ietf-microwave-topology:mw-topology');\r", + "\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:provider-id\"); //, provider_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:client-id\"); //, client_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:te-topology-id\"); //, mw_topology_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:te\");\r", + " pm.expect(mw['ietf-te-topology:te']).to.have.property('name'); //, mw_network_name);\r", + "});\r", + "\r", + "pm.test('Verifiy that Microwave topology nodes conatins all mandatory fileds', function() {\r", + " var nodeListMW = {};\r", + " pm.expect(mw).to.have.property('node');\r", + " mw.node.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('node-id');\r", + " pm.expect(nodeListMW).to.not.have.property(item['node-id']); // Make sure each node-id appears only once\r", + " nodeListMW[item['node-id']] = item;\r", + " var regExpStr = '^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';\r", + " var regExp = new RegExp(regExpStr);\r", + " pm.expect(regExp.test(item['node-id'])).to.be.true;\r", + " pm.expect(item).to.have.property('ietf-te-topology:te-node-id', item['node-id']);\r", + " pm.expect(item).to.have.property('ietf-te-topology:te');\r", + " pm.expect(item['ietf-te-topology:te']).to.have.property('te-node-attributes');\r", + " pm.expect(item['ietf-te-topology:te']['te-node-attributes']).to.have.property('name'); //vendor independent\r", + " });\r", + " pm.expect(Object.keys(nodeListMW).length).to.equal(2);\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_MW_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_MW_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-microwave-topology/ietf-network:networks/network={{PX_NETWORK_ID}}/topologyId/mw-native-topology", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-microwave-topology", + "ietf-network:networks", + "network={{PX_NETWORK_ID}}", + "topologyId", + "mw-native-topology" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides the MW network topology for a specific network with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.2.1\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_MW_TOPO_GET_BO_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_MW_TOPO_GET_BO_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 400\", function () {\r", + " pm.response.to.have.status(404);\r", + "});\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_MW_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_MW_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks/network={{PX_UNKNOWN_NETWORK_ID}}/topologyId/mw-native-topology", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks", + "network={{PX_UNKNOWN_NETWORK_ID}}", + "topologyId", + "mw-native-topology" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n\"Verify that the IUT replies with an error code when the network identifier is unknown.\"\n\nReference\n\n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Annex A.1.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\"\n \n\nPICS Selection IUT_MDSC and ABSTRACT_BB and MW_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_MW_NODE_GET_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_MW_NODE_GET_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null;\r", + "var nodes = null;\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that are present all mandatories microwave topology attributes', function() {\r", + " pm.expect(mw).to.have.property('network-id');\r", + "\r", + " pm.expect(mw).to.have.property('network-types');\r", + " pm.expect(mw['network-types']).to.have.property('ietf-te-topology:te-topology');\r", + " pm.expect(mw['network-types']['ietf-te-topology:te-topology']).to.have.property('ietf-microwave-topology:mw-topology');\r", + "\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:provider-id\"); //, provider_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:client-id\"); //, client_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:te-topology-id\"); //, mw_topology_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:te\");\r", + " pm.expect(mw['ietf-te-topology:te']).to.have.property('name'); //, mw_network_name);\r", + "});\r", + "\r", + "pm.test('Verifiy that Microwave topology nodes conatins all mandatory fileds', function() {\r", + " pm.expect(mw).to.have.property('node');\r", + " pm.expect(Object.keys(nodes).length).to.equal(2);\r", + " nodes.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('ietf-te-topology:te-node-id', item['node-id']);\r", + " pm.expect(item).to.have.property('ietf-te-topology:te');\r", + " pm.expect(item['ietf-te-topology:te']).to.have.property('te-node-attributes');\r", + " pm.expect(item['ietf-te-topology:te']['te-node-attributes']).to.have.property('name'); //vendor independent\r", + " });\r", + "});\r", + "\r", + "pm.test('Microwave topology nodes OPER verification', function() {\r", + " for (var key in nodes) {\r", + " pm.expect(nodes[key]['ietf-te-topology:te']).to.have.property('oper-status', 'up');\r", + " }\r", + "});\r", + "\r", + "pm.test('Microwave topology termination points verification', function() {\r", + " for (var key in nodes) {\r", + " var node = nodes[key];\r", + " pm.expect(node).to.have.property('ietf-network-topology:termination-point');\r", + " node.tp = {};\r", + " node['ietf-network-topology:termination-point'].sort(compare_tpid);\r", + " node['ietf-network-topology:termination-point'].forEach(function(tp, index) {\r", + " pm.expect(tp).to.have.property('tp-id'); // Vendor independent, only check existence\r", + " pm.expect(node.tp).to.not.have.property(tp['tp-id']); // Make sure each tp-id appears only once\r", + " node.tp[tp['tp-id']] = tp;\r", + " pm.expect(tp).to.have.property('ietf-te-topology:te-tp-id'); // Vendor independent, only check existence\r", + " pm.expect(tp).to.have.property('ietf-te-topology:te');\r", + " pm.expect(tp['ietf-te-topology:te']).to.have.property('admin-status', 'up');\r", + " pm.expect(tp['ietf-te-topology:te']).to.have.property('name');\r", + " });\r", + " }\r", + "});\r", + "\r", + "// Ensure nodes have the full tp information when the above verification partially fails, or the link verification will fail\r", + "for (var key in nodes) {\r", + " var node = nodes[key];\r", + " node.tp = {};\r", + " node['ietf-network-topology:termination-point'].sort(compare_tpid);\r", + " node['ietf-network-topology:termination-point'].forEach(function(tp, index) {\r", + " node.tp[tp['tp-id']] = tp;\r", + " });\r", + "}\r", + "\r", + "pm.test('Microwave topology termination points OPER verification', function() {\r", + " for (var key in nodes) {\r", + " var node = nodes[key];\r", + " pm.expect(node).to.have.property('ietf-network-topology:termination-point');\r", + " node['ietf-network-topology:termination-point'].forEach(function(tp, index) {\r", + " pm.expect(tp['ietf-te-topology:te']).to.have.property('oper-status', 'up');\r", + " });\r", + " }\r", + "});\r", + "\r", + "pm.test('Microwave topology links verification', function() {\r", + " var mwLinkPoints = [];\r", + " pm.expect(mw).to.have.property('ietf-network-topology:link');\r", + " mw['ietf-network-topology:link'].forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('link-id');\r", + " pm.expect(linkListMW).to.not.have.property(item['link-id']); // Make sure each link-id appears only once\r", + " linkListMW[item['link-id']] = item;\r", + " pm.expect(item).to.have.property('source');\r", + " pm.expect(item.source).to.have.property('source-node');\r", + " pm.expect(item.source).to.have.property('source-tp');\r", + " pm.expect(nodes).to.have.property(item.source['source-node']);\r", + " pm.expect(nodes[item.source['source-node']].tp).to.have.property(item.source['source-tp']);\r", + " pm.expect(item).to.have.property('destination');\r", + " pm.expect(item.destination).to.have.property('dest-node');\r", + " pm.expect(item.destination).to.have.property('dest-tp');\r", + " pm.expect(nodes).to.have.property(item.destination['dest-node']);\r", + " pm.expect(nodes[item.destination['dest-node']].tp).to.have.property(item.destination['dest-tp']);\r", + "\r", + " pm.expect(item).to.have.property('ietf-te-topology:te');\r", + " pm.expect(item['ietf-te-topology:te']).to.have.property('te-link-attributes');\r", + "\r", + " pm.expect(item['ietf-te-topology:te']['te-link-attributes']).to.have.property('admin-status', 'up');\r", + " pm.expect(item['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-frequency');\r", + " pm.expect(item['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-channel-separation');\r", + " // pm.expect(item['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-availability');\r", + " // TODO - do we need to check anything with the availability? Likely not. Do we need this at all for now?\r", + " });\r", + " pm.expect(Object.keys(linkListMW).length).to.equal(2);\r", + " pm.expect(mwLinkPoints.length).to.equal(2);\r", + " pm.expect(mwLinkPoints[0][0][\"te-node-id\"]).to.equal(\r", + " mwLinkPoints[1][1][\"te-node-id\"]);\r", + " pm.expect(mwLinkPoints[0][0][\"te-tp-id\"]).to.equal(\r", + " mwLinkPoints[1][1][\"te-tp-id\"]);\r", + " pm.expect(mwLinkPoints[0][1][\"te-node-id\"]).to.equal(\r", + " mwLinkPoints[1][0][\"te-node-id\"]);\r", + " pm.expect(mwLinkPoints[0][1][\"te-tp-id\"]).to.equal(\r", + " mwLinkPoints[1][0][\"te-tp-id\"]);\r", + "});\r", + "\r", + "pm.test('Microwave topology links OPER verification', function() {\r", + " for (var key in linkListMW) {\r", + " var link = linkListMW[key];\r", + " pm.expect(link).to.have.property('ietf-te-topology:te');\r", + " pm.expect(link['ietf-te-topology:te']).to.have.property(\"oper-status\", \"up\");\r", + " pm.expect(link['ietf-te-topology:te']).to.have.property('te-link-attributes');\r", + " pm.expect(link['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-nominal-bandwidth');\r", + " pm.expect(link['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-current-bandwidth');\r", + " pm.expect(link['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-unreserved-bandwidth'); \r", + " }\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findNetworkNodes(networks) {\r", + " networks.node.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('node-id');\r", + " pm.expect(nodes).to.not.have.property(item['node-id']); // Make sure each node-id appears only once\r", + " nodes[item['node-id']] = item;\r", + " var regExpStr = '^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';\r", + " var regExp = new RegExp(regExpStr);\r", + " pm.expect(regExp.test(item['node-id'])).to.be.true;\r", + " });\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_MW_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_MW_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-microwave-topology/ietf-network:networks/network={{PX_NETWORK_ID}}/node/topologyId/mw-native-topology", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-microwave-topology", + "ietf-network:networks", + "network={{PX_NETWORK_ID}}", + "node", + "topologyId", + "mw-native-topology" + ] + } + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides the MW network topology for all nodes with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.2.1\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_MW_NODE_GET_BO_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_MW_NODE_GET_BO_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 404\", function () {\r", + " pm.response.to.have.status(404);\r", + "});\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_MW_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_MW_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-microwave-topology/ietf-network:networks/network={{PX_NETWORK_ID}}/node={{PX_UNKNOWN_NODE_ID}}/topologyId/mw-native-topology", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-microwave-topology", + "ietf-network:networks", + "network={{PX_NETWORK_ID}}", + "node={{PX_UNKNOWN_NODE_ID}}", + "topologyId", + "mw-native-topology" + ] + } + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when the node identifier is unknown\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Annex A.2.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology\"EndFragment\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_MW_NODE_GET_BV_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_MW_NODE_GET_BV_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null;\r", + "var nodes = null;\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that are present all mandatories microwave topology attributes', function() {\r", + " pm.expect(mw).to.have.property('network-id');\r", + "\r", + " pm.expect(mw).to.have.property('network-types');\r", + " pm.expect(mw['network-types']).to.have.property('ietf-te-topology:te-topology');\r", + " pm.expect(mw['network-types']['ietf-te-topology:te-topology']).to.have.property('ietf-microwave-topology:mw-topology');\r", + "\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:provider-id\"); //, provider_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:client-id\"); //, client_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:te-topology-id\"); //, mw_topology_id);\r", + " pm.expect(mw).to.have.property(\"ietf-te-topology:te\");\r", + " pm.expect(mw['ietf-te-topology:te']).to.have.property('name'); //, mw_network_name);\r", + "});\r", + "\r", + "pm.test('Verifiy that Microwave topology nodes conatins all mandatory fileds', function() {\r", + " pm.expect(mw).to.have.property('node');\r", + " pm.expect(Object.keys(nodes).length).to.equal(2);\r", + " nodes.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('ietf-te-topology:te-node-id', item['node-id']);\r", + " pm.expect(item).to.have.property('ietf-te-topology:te');\r", + " pm.expect(item['ietf-te-topology:te']).to.have.property('te-node-attributes');\r", + " pm.expect(item['ietf-te-topology:te']['te-node-attributes']).to.have.property('name'); //vendor independent\r", + " });\r", + "});\r", + "\r", + "pm.test('Microwave topology nodes OPER verification', function() {\r", + " for (var key in nodes) {\r", + " pm.expect(nodes[key]['ietf-te-topology:te']).to.have.property('oper-status', 'up');\r", + " }\r", + "});\r", + "\r", + "pm.test('Microwave topology termination points verification', function() {\r", + " for (var key in nodes) {\r", + " var node = nodes[key];\r", + " pm.expect(node).to.have.property('ietf-network-topology:termination-point');\r", + " node.tp = {};\r", + " node['ietf-network-topology:termination-point'].sort(compare_tpid);\r", + " node['ietf-network-topology:termination-point'].forEach(function(tp, index) {\r", + " pm.expect(tp).to.have.property('tp-id'); // Vendor independent, only check existence\r", + " pm.expect(node.tp).to.not.have.property(tp['tp-id']); // Make sure each tp-id appears only once\r", + " node.tp[tp['tp-id']] = tp;\r", + " pm.expect(tp).to.have.property('ietf-te-topology:te-tp-id'); // Vendor independent, only check existence\r", + " pm.expect(tp).to.have.property('ietf-te-topology:te');\r", + " pm.expect(tp['ietf-te-topology:te']).to.have.property('admin-status', 'up');\r", + " pm.expect(tp['ietf-te-topology:te']).to.have.property('name');\r", + " });\r", + " }\r", + "});\r", + "\r", + "// Ensure nodes have the full tp information when the above verification partially fails, or the link verification will fail\r", + "for (var key in nodes) {\r", + " var node = nodes[key];\r", + " node.tp = {};\r", + " node['ietf-network-topology:termination-point'].sort(compare_tpid);\r", + " node['ietf-network-topology:termination-point'].forEach(function(tp, index) {\r", + " node.tp[tp['tp-id']] = tp;\r", + " });\r", + "}\r", + "\r", + "pm.test('Microwave topology termination points OPER verification', function() {\r", + " for (var key in nodes) {\r", + " var node = nodes[key];\r", + " pm.expect(node).to.have.property('ietf-network-topology:termination-point');\r", + " node['ietf-network-topology:termination-point'].forEach(function(tp, index) {\r", + " pm.expect(tp['ietf-te-topology:te']).to.have.property('oper-status', 'up');\r", + " });\r", + " }\r", + "});\r", + "\r", + "pm.test('Microwave topology links verification', function() {\r", + " var mwLinkPoints = [];\r", + " pm.expect(mw).to.have.property('ietf-network-topology:link');\r", + " mw['ietf-network-topology:link'].forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('link-id');\r", + " pm.expect(linkListMW).to.not.have.property(item['link-id']); // Make sure each link-id appears only once\r", + " linkListMW[item['link-id']] = item;\r", + " pm.expect(item).to.have.property('source');\r", + " pm.expect(item.source).to.have.property('source-node');\r", + " pm.expect(item.source).to.have.property('source-tp');\r", + " pm.expect(nodes).to.have.property(item.source['source-node']);\r", + " pm.expect(nodes[item.source['source-node']].tp).to.have.property(item.source['source-tp']);\r", + " pm.expect(item).to.have.property('destination');\r", + " pm.expect(item.destination).to.have.property('dest-node');\r", + " pm.expect(item.destination).to.have.property('dest-tp');\r", + " pm.expect(nodes).to.have.property(item.destination['dest-node']);\r", + " pm.expect(nodes[item.destination['dest-node']].tp).to.have.property(item.destination['dest-tp']);\r", + "\r", + " pm.expect(item).to.have.property('ietf-te-topology:te');\r", + " pm.expect(item['ietf-te-topology:te']).to.have.property('te-link-attributes');\r", + "\r", + " pm.expect(item['ietf-te-topology:te']['te-link-attributes']).to.have.property('admin-status', 'up');\r", + " pm.expect(item['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-frequency');\r", + " pm.expect(item['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-channel-separation');\r", + " // pm.expect(item['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-availability');\r", + " // TODO - do we need to check anything with the availability? Likely not. Do we need this at all for now?\r", + " });\r", + " pm.expect(Object.keys(linkListMW).length).to.equal(2);\r", + " pm.expect(mwLinkPoints.length).to.equal(2);\r", + " pm.expect(mwLinkPoints[0][0][\"te-node-id\"]).to.equal(\r", + " mwLinkPoints[1][1][\"te-node-id\"]);\r", + " pm.expect(mwLinkPoints[0][0][\"te-tp-id\"]).to.equal(\r", + " mwLinkPoints[1][1][\"te-tp-id\"]);\r", + " pm.expect(mwLinkPoints[0][1][\"te-node-id\"]).to.equal(\r", + " mwLinkPoints[1][0][\"te-node-id\"]);\r", + " pm.expect(mwLinkPoints[0][1][\"te-tp-id\"]).to.equal(\r", + " mwLinkPoints[1][0][\"te-tp-id\"]);\r", + "});\r", + "\r", + "pm.test('Microwave topology links OPER verification', function() {\r", + " for (var key in linkListMW) {\r", + " var link = linkListMW[key];\r", + " pm.expect(link).to.have.property('ietf-te-topology:te');\r", + " pm.expect(link['ietf-te-topology:te']).to.have.property(\"oper-status\", \"up\");\r", + " pm.expect(link['ietf-te-topology:te']).to.have.property('te-link-attributes');\r", + " pm.expect(link['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-nominal-bandwidth');\r", + " pm.expect(link['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-current-bandwidth');\r", + " pm.expect(link['ietf-te-topology:te']['te-link-attributes']).to.have.property('ietf-microwave-topology:mw-link-unreserved-bandwidth'); \r", + " }\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findNetworkNodes(networks) {\r", + " networks.node.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('node-id');\r", + " pm.expect(nodes).to.not.have.property(item['node-id']); // Make sure each node-id appears only once\r", + " nodes[item['node-id']] = item;\r", + " var regExpStr = '^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';\r", + " var regExp = new RegExp(regExpStr);\r", + " pm.expect(regExp.test(item['node-id'])).to.be.true;\r", + " });\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_MW_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_MW_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-microwave-topology/ietf-network:networks/network={{PX_NETWORK_ID}}/node={{PX_NODE_ID}}/topologyId/mw-native-topology", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-microwave-topology", + "ietf-network:networks", + "network={{PX_NETWORK_ID}}", + "node={{PX_NODE_ID}}", + "topologyId", + "mw-native-topology" + ] + } + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides the MW network topology for a specific node with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.2.1\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO" + } + ] + }, + { + "name": "EthernetTopologyDiscovery", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null;\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that the IUT contains network information', function() {\r", + " pm.expect(eth).to.not.equal(null);\r", + "});\r", + "\r", + "pm.test('Ethernet topology attributes verification', function() {\r", + " pm.expect(eth).to.have.property('network-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:provider-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:client-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:te-topology-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:te');\r", + " pm.expect(eth['ietf-te-topology:te']).to.have.property('name');\r", + "\r", + " if (!eth.hasOwnProperty('network-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:provider-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:client-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:te-topology-id')) {\r", + " throw new Error('One of the identifiers is missing'); \r", + " }\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_ETH_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_ETH_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides the Ethernet network topology for all networks with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BV_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BV_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var ethNodes = {};\r", + "var mw = null;\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('ethNodes: ', ethNodes)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that the IUT contains network information', function() {\r", + " pm.expect(ethNodes).to.not.equal(null);\r", + " pm.expect(ethNodes.len).to.not.equal(0);\r", + "});\r", + "\r", + "pm.test('Ethernet topology attributes verification', function() {\r", + " pm.expect(eth).to.have.property('network-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:provider-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:client-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:te-topology-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:te');\r", + " pm.expect(eth['ietf-te-topology:te']).to.have.property('name');\r", + "\r", + " if (!eth.hasOwnProperty('network-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:provider-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:client-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:te-topology-id')) {\r", + " throw new Error('One of the identifiers is missing'); \r", + " }\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + " ethNodes = findNetworkNodes(eth)\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findNetworkNodes(networks) {\r", + " var nodeListETH = {}\r", + "\r", + " networks.node.forEach(function(item, index) {\r", + " if(networks.node != null){\r", + " nodeListETH[item['node-id']] = item;\r", + " }\r", + " });\r", + "\r", + " return nodeListETH\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_ETH_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_ETH_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks/network={{PX_NETWORK_ID}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks", + "network={{PX_NETWORK_ID}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides the Ethernet network topology for a specific network with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.1.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BO_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BO_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 400\", function () {\r", + " pm.response.to.have.status(400);\r", + "});\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_ETH_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_ETH_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/networks/{{PX_NETWORK_ID}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "networks", + "{{PX_NETWORK_ID}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when the request is malformed.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception HandlingEndFragment\",\n \n- \"ETSI GS mWT 024 Annex A.1.3\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BO_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BO_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 404\", function () {\r", + " pm.response.to.have.status(404);\r", + "});\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_ETH_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_ETH_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks/network-id={{PX_UNKNOWN_NETWORK_ID}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks", + "network-id={{PX_UNKNOWN_NETWORK_ID}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when the network identifier is unknown.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception HandlingEndFragment\",\n \n- \"ETSI GS mWT 024 Annex A.1.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NODE_GET_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NODE_GET_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null;\r", + "var nodes = null;\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that the IUT contains network information', function() {\r", + " pm.expect(eth).to.not.equal(null);\r", + "});\r", + "\r", + "pm.test('Ethernet topology attributes verification', function() {\r", + " pm.expect(eth).to.have.property('network-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:provider-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:client-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:te-topology-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:te');\r", + " pm.expect(eth['ietf-te-topology:te']).to.have.property('name');\r", + "\r", + " if (!eth.hasOwnProperty('network-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:provider-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:client-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:te-topology-id')) {\r", + " throw new Error('One of the identifiers is missing'); \r", + " }\r", + "});\r", + "\r", + "pm.test('Ethernet topology nodes verification', function() {\r", + " pm.expect(eth).to.have.property('node');\r", + " pm.expect(Object.keys(nodes).length).to.equal(2);\r", + " pm.expect(mw).to.have.property('node');\r", + " nodes.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('ietf-te-topology:te-node-id', item['node-id']);\r", + " pm.expect(item).to.have.property('ietf-te-topology:te');\r", + " pm.expect(item['ietf-te-topology:te']).to.have.property('te-node-attributes');\r", + " pm.expect(item['ietf-te-topology:te']['te-node-attributes']).to.have.property('name'); //vendor independent\r", + " });\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findNetworkNodes(networks) {\r", + " networks.node.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('node-id');\r", + " pm.expect(nodes).to.not.have.property(item['node-id']); // Make sure each node-id appears only once\r", + " nodes[item['node-id']] = item;\r", + " var regExpStr = '^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';\r", + " var regExp = new RegExp(regExpStr);\r", + " pm.expect(regExp.test(item['node-id'])).to.be.true;\r", + " });\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_ETH_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_ETH_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks/network={{PX_NETWORK_ID}}/node", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks", + "network={{PX_NETWORK_ID}}", + "node" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides the Ethernet network topology for all nodes with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NODE_GET_BV_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NODE_GET_BV_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "var networkList = null;\r", + "var eth = null;\r", + "var mw = null;\r", + "var nodes = null;\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + " parseAllNetworks()\r", + " console.info('networkList: ', networkList)\r", + " console.info('eth: ', eth)\r", + " console.info('mw: ', mw)\r", + "});\r", + "\r", + "pm.test('Verify that the IUT contains network information', function() {\r", + " pm.expect(eth).to.not.equal(null);\r", + "});\r", + "\r", + "pm.test('Ethernet topology attributes verification', function() {\r", + " pm.expect(eth).to.have.property('network-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:provider-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:client-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:te-topology-id');\r", + " pm.expect(eth).to.have.property('ietf-te-topology:te');\r", + " pm.expect(eth['ietf-te-topology:te']).to.have.property('name');\r", + "\r", + " if (!eth.hasOwnProperty('network-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:provider-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:client-id')\r", + " || !eth.hasOwnProperty('ietf-te-topology:te-topology-id')) {\r", + " throw new Error('One of the identifiers is missing'); \r", + " }\r", + "});\r", + "\r", + "pm.test('Ethernet topology nodes verification', function() {\r", + " pm.expect(eth).to.have.property('node');\r", + " pm.expect(Object.keys(nodes).length).to.equal(2);\r", + " pm.expect(mw).to.have.property('node');\r", + " nodes.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('ietf-te-topology:te-node-id', item['node-id']);\r", + " pm.expect(item).to.have.property('ietf-te-topology:te');\r", + " pm.expect(item['ietf-te-topology:te']).to.have.property('te-node-attributes');\r", + " pm.expect(item['ietf-te-topology:te']['te-node-attributes']).to.have.property('name'); //vendor independent\r", + " });\r", + "});\r", + "\r", + "function parseAllNetworks() {\r", + " var topLevelPropertyName = responseJson.hasOwnProperty('networks') ? 'networks' : 'ietf-network:networks';\r", + " console.info('topLevelPropertyName=', topLevelPropertyName)\r", + " pm.test('The response body should contain information about networks', function() {\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " pm.expect(responseJson[topLevelPropertyName]).to.have.property('network');\r", + " responseJson[topLevelPropertyName].network.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('network-id');\r", + " pm.expect(networkList).to.not.have.property(item['network-id']); // Make sure each network-id appears only once\r", + " networkList[item['network-id']] = item;\r", + " });\r", + " });\r", + " \r", + " eth = findEthNetwork(responseJson[topLevelPropertyName].network);\r", + "\r", + " mw = findMWNetwork(responseJson[topLevelPropertyName].network);\r", + "}\r", + "\r", + "function findEthNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-eth-te-topology:eth-tran-topology']) {\r", + " return net;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findMWNetwork(networks) {\r", + " var len = networks.length;\r", + " var i;\r", + " var net;\r", + " for (i = 0; i < len; ++i) {\r", + " net = networks[i];\r", + " if (net['network-types']\r", + " && net['network-types']['ietf-te-topology:te-topology']\r", + " && net['network-types']['ietf-te-topology:te-topology']['ietf-microwave-topology:mw-topology']) {\r", + " return net; \r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function findNetworkNodes(networks) {\r", + " networks.node.forEach(function(item, index) {\r", + " pm.expect(item).to.have.property('node-id');\r", + " pm.expect(nodes).to.not.have.property(item['node-id']); // Make sure each node-id appears only once\r", + " nodes[item['node-id']] = item;\r", + " var regExpStr = '^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.'\r", + " + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$';\r", + " var regExp = new RegExp(regExpStr);\r", + " pm.expect(regExp.test(item['node-id'])).to.be.true;\r", + " });\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_ETH_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_ETH_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks/network={{PX_NETWORK_ID}}/node={{PX_NODE_ID}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks", + "network={{PX_NETWORK_ID}}", + "node={{PX_NODE_ID}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides the Ethernet network topology for specific node with mandatory mWT GC 024 data elements subset\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO" + }, + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NODE_GET_BO_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_TOPO_NODE_GET_BO_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(404);\r", + "});\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_ETH_TOPO') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_ETH_TOPO are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-network:networks/network={{PX_NETWORK_ID}}/node={{PX_UNKNOWN_NODE_ID}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-network:networks", + "network={{PX_NETWORK_ID}}", + "node={{PX_UNKNOWN_NODE_ID}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when the node identifier is unknown.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Annex A.2.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO" + } + ] + }, + { + "name": "EthernetService", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_GET_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_GET_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test('Response is OK', function() {\r", + " pm.expect(pm.response).to.have.property('code', 200);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "\r", + "var profileName = 'bw_profile_' + pm.environment.get('PX_ETH_SVC_NAME');\r", + "\r", + "var provider_id = pm.environment.get('PX_BB_PROVIDER_ID');\r", + "var client_id = pm.environment.get('PX_BB_CLIENT_ID');\r", + "var eth_topology_id = pm.environment.get('PX_NETWORK_ID');\r", + "\r", + "// id of the nodes\r", + "var access_node_1_id = pm.environment.get('PX_ACCESS_NODE_ID_1');\r", + "var access_node_2_id = pm.environment.get('PX_ACCESS_NODE_ID_2');\r", + "\r", + "// id of node1 -> a-link-aggr\r", + "var access_node_1_ltp_aggr_access_port_id = 1;\r", + "var access_node_1_ltp_aggr_access_ltp_id = pm.environment.get('PX_LINK_AGGREG_ID_1');\r", + "\r", + "// id of node2 -> a-link-local\r", + "var access_node_2_ltp_local_access_port_id = 2; \r", + "var access_node_2_ltp_local_access_ltp_id = pm.environment.get('PX_LINK_AGGREG_ID_2');\r", + "\r", + "// id of node2 -> inter-d-w\r", + "var access_node_2_ltp_west_access_port_id = 2;\r", + "var access_node_2_ltp_west_access_ltp_id = pm.environment.get('PX_I_D_LINK_W_ID');\r", + "\r", + "// id of node2 -> inter-d-e\r", + "var access_node_2_ltp_east_access_port_id = 2;\r", + "var access_node_2_ltp_east_access_ltp_id = pm.environment.get('PX_I_D_LINK_E_ID');\r", + "\r", + "var sVlan = 'ietf-eth-tran-types:classify-s-vlan';\r", + "var cVlan = 'ietf-eth-tran-types:classify-c-vlan';\r", + "\r", + "var topLevelPropertyName = null;\r", + "var topLevelObject = null;\r", + "pm.test('Verify that response contains ietf-eth-tran-service:etht-svc', function() {\r", + " topLevelPropertyName = responseJson.hasOwnProperty('etht-svc') ? 'etht-svc' : 'ietf-eth-tran-service:etht-svc';\r", + " pm.expect(responseJson).to.have.property(topLevelPropertyName);\r", + " topLevelObject = responseJson[topLevelPropertyName];\r", + "});\r", + "\r", + "var bandwidthProfile = null;\r", + "pm.test('Verify that Ethernet services contain bandwidth profiles', function() {\r", + " pm.expect(topLevelObject).to.have.property('globals');\r", + " pm.expect(responseJson[topLevelPropertyName].globals).to.have.property('etht-svc-bandwidth-profiles');\r", + "\r", + " var profileArr = responseJson[topLevelPropertyName].globals['etht-svc-bandwidth-profiles'];\r", + " pm.expect(Array.isArray(profileArr)).be.true;\r", + " bandwidthProfile = findBWProfile(profileArr);\r", + " pm.expect(bandwidthProfile !== null).to.be.true;\r", + "\r", + " parseProfileValues(bandwidthProfile)\r", + "\r", + "});\r", + "\r", + "var serviceNames; // FIXME Use PX parameters\r", + "if (pm.info.iteration === 0) {\r", + " serviceNames = ['S1-local', 'S2-local-1', 'S3-local-1', 'S1-inter-d-1', 'S2-inter-d-1', 'S3-inter-d-1', 'S4-inter-d-1', 'S1-leaf-2', 'S2-leaf-2', 'S3-leaf-1'];\r", + "} else if (pm.info.iteration === 1) {\r", + " serviceNames = ['S1-local-1', 'S1-inter-d-2', 'S2-inter-d-2', 'S1-leaf-1', 'S2-leaf-1'];\r", + "} else if (pm.info.iteration === 2) {\r", + " serviceNames = ['S3-local-1', 'S3-inter-d-2', 'S4-inter-d-2', 'S2-leaf-3', 'S3-leaf-2'];\r", + "}\r", + "pm.test('Verify that Ethernet services contain services instances', function() {\r", + " var serviceInstances = responseJson[topLevelPropertyName][\"etht-svc-instances\"];\r", + " for(var i = 0; i < serviceNames.length; i++) {\r", + " var serviceName = serviceNames[i];\r", + " var service = findService(serviceInstances, serviceName);\r", + " pm.expect(service !== null).to.be.true;\r", + " parseServiceValues(pm.info.iteration + 1, service, serviceName);\r", + " }\r", + "});\r", + "\r", + "function findBWProfile(profileArr) {\r", + " var len = profileArr.length;\r", + " for (var i = 0; i < len; ++i) {\r", + " var prof = profileArr[i];\r", + " if (prof['bandwidth-profile-name'] === profileName) {\r", + " return prof;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function parseProfileValues(bandwidthProfile) {\r", + " pm.test('Bandwidth profile values check', function(){\r", + " pm.expect(bandwidthProfile).to.have.property('bandwidth-profile-type','ietf-eth-tran-types:mef-10-bwp');\r", + " pm.expect(bandwidthProfile).to.have.property('CIR');\r", + " pm.expect(parseInt(bandwidthProfile['CIR'])).to.equal(parseInt(pm.environment.get('PX_CIR_VALUE')));\r", + " pm.expect(bandwidthProfile).to.have.property('EIR');\r", + " pm.expect(parseInt(bandwidthProfile['EIR'])).to.equal(parseInt(pm.environment.get('PX_EIR_VALUE')));\r", + " pm.expect(bandwidthProfile).to.have.property('color-aware');\r", + " if (typeof(bandwidthProfile['color-aware']) === 'boolean') {\r", + " pm.expect(bandwidthProfile['color-aware']).be.true;\r", + " } else {\r", + " pm.expect('' + bandwidthProfile['color-aware']).to.equal('' + true);\r", + " }\r", + " pm.expect(bandwidthProfile).to.have.property('coupling-flag');\r", + " if (typeof(bandwidthProfile['coupling-flag']) === 'boolean') {\r", + " pm.expect(bandwidthProfile['coupling-flag']).be.true;\r", + " } else {\r", + " pm.expect('' + bandwidthProfile['coupling-flag']).to.equal('' + true);\r", + " }\r", + " });\r", + "}\r", + "\r", + "function findService(instanceArr, serviceName) {\r", + " var len = instanceArr.length;\r", + " for (var i = 0; i < len; ++i) {\r", + " var svc = instanceArr[i];\r", + " if (svc['etht-svc-name'] === serviceName) {\r", + " return svc;\r", + " }\r", + " }\r", + " return null;\r", + "}\r", + "\r", + "function parseServiceValues(domainIndex, service) { // FIXME To be reviewed during validations\r", + " var serviceName = service['etht-svc-name'];\r", + " \r", + " pm.test('Validate service values: ' + serviceName, function() {\r", + " checkServiceBeginning(service);\r", + " checkServiceEnding(service);\r", + " \r", + " var accessPortId1 = 1;\r", + " var accessNodeId1;\r", + " var accessLtpId1;\r", + " var vlanId1;\r", + " var vlanType1;\r", + " \r", + " var accessPortId2 = 2;\r", + " var accessNodeId2;\r", + " var accessLtpId2;\r", + " var vlanId2;\r", + " var vlanType2;\r", + " \r", + " if (1 === domainIndex) {\r", + " if ( 'S1-local' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 201;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId2 = 101;\r", + " vlanType2 = cVlan;\r", + " } else if ('S2-local-1' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 202;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_west_access_ltp_id;\r", + " vlanId2 = 202;\r", + " vlanType2 = sVlan;\r", + " } else if ('S3-local-1' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 203;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_east_access_ltp_id;\r", + " vlanId2 = 203;\r", + " vlanType2 = sVlan;\r", + " } else if ('S1-inter-d-1' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 204;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_west_access_ltp_id;\r", + " vlanId2 = 204;\r", + " vlanType2 = sVlan;\r", + " } else if ('S2-inter-d-1' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 205;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_west_access_ltp_id;\r", + " vlanId2 = 205;\r", + " vlanType2 = sVlan;\r", + " } else if ('S3-inter-d-1' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 206;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_east_access_ltp_id;\r", + " vlanId2 = 206;\r", + " vlanType2 = sVlan;\r", + " } else if ('S4-inter-d-1' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 207;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_east_access_ltp_id;\r", + " vlanId2 = 207;\r", + " vlanType2 = sVlan;\r", + " } else if ('S1-leaf-2' === serviceName) {\r", + " accessNodeId1 = access_node_2_id;\r", + " accessLtpId1 = access_node_2_ltp_west_access_ltp_id;\r", + " vlanId1 = 208;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_east_access_ltp_id;\r", + " vlanId2 = 208;\r", + " vlanType2 = sVlan;\r", + " } else if ('S2-leaf-2' === serviceName) {\r", + " accessNodeId1 = access_node_2_id;\r", + " accessLtpId1 = access_node_2_ltp_west_access_ltp_id;\r", + " vlanId1 = 209;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId2 = 103;\r", + " vlanType2 = cVlan; \r", + " } else if ('S3-leaf-1' === serviceName) {\r", + " accessNodeId1 = access_node_2_id;\r", + " accessLtpId1 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId1 = 104;\r", + " vlanType1 = cVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_east_access_ltp_id;\r", + " vlanId2 = 210;\r", + " vlanType2 = sVlan;\r", + " }\r", + " } else if (2 === domainIndex) {\r", + " if ( 'S2-local-2' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 202;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId2 = 101;\r", + " vlanType2 = cVlan;\r", + " } else if ('S1-inter-d-2' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 204;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_west_access_ltp_id;\r", + " vlanId2 = 204;\r", + " vlanType2 = sVlan;\r", + " } else if ('S2-inter-d-2' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 205;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_east_access_ltp_id;\r", + " vlanId2 = 205;\r", + " vlanType2 = sVlan;\r", + " } else if ('S1-leaf-1' === serviceName) {\r", + " accessNodeId1 = access_node_2_id;\r", + " accessLtpId1 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId1 = 102;\r", + " vlanType1 = cVlan;\r", + " accessNodeId2 = access_node_1_id;\r", + " accessLtpId2 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId2 = 208;\r", + " vlanType2 = sVlan;\r", + " } else if ('S2-leaf-2' === serviceName) {\r", + " accessNodeId1 = access_node_2_id;\r", + " accessLtpId1 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId1 = 103;\r", + " vlanType1 = cVlan;\r", + " accessNodeId2 = access_node_1_id;\r", + " accessLtpId2 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId2 = 209;\r", + " vlanType2 = sVlan;\r", + " } \r", + " } else if (3 === domainIndex) {\r", + " if ( 'S3-local-2' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 203;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId2 = 101;\r", + " vlanType2 = cVlan;\r", + " } else if ('S3-inter-d-2' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 206;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_west_access_ltp_id;\r", + " vlanId2 = 206;\r", + " vlanType2 = sVlan;\r", + " } else if ('S4-inter-d-2' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 207;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_east_access_ltp_id;\r", + " vlanId2 = 207;\r", + " vlanType2 = sVlan;\r", + " } else if ('S1-leaf-3' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 208;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId2 = 102;\r", + " vlanType2 = cVlan;\r", + " } else if ('S3-leaf-2' === serviceName) {\r", + " accessNodeId1 = access_node_1_id;\r", + " accessLtpId1 = access_node_1_ltp_aggr_access_ltp_id;\r", + " vlanId1 = 210;\r", + " vlanType1 = sVlan;\r", + " accessNodeId2 = access_node_2_id;\r", + " accessLtpId2 = access_node_2_ltp_local_access_ltp_id;\r", + " vlanId2 = 104;\r", + " vlanType2 = cVlan;\r", + " } \r", + " }\r", + " \r", + " checkServiceElement(service, 0, accessPortId1, accessNodeId1, accessLtpId1, vlanId1, vlanType1);\r", + " checkServiceElement(service, 1, accessPortId2, accessNodeId2, accessLtpId2, vlanId2, vlanType2);\r", + " });\r", + " \r", + "}\r", + "\r", + "function checkServiceBeginning(service) {\r", + " pm.expect(service).to.have.property('etht-svc-type','ietf-eth-tran-types:p2p-svc');\r", + " pm.expect(service).to.have.property('access-provider-id',provider_id);\r", + " pm.expect(service).to.have.property('access-client-id',client_id);\r", + " pm.expect(service).to.have.property('access-topology-id',eth_topology_id);\r", + "}\r", + "\r", + "function checkServiceElement(service, n, accessPortId, accessNodeId, accessLtpPortId, vlanId, vlanType) {\r", + " pm.expect(service['etht-svc-access-ports'][n]).to.have.property('access-port-id',accessPortId);\r", + " pm.expect(service['etht-svc-access-ports'][n]).to.have.property('access-node-id',accessNodeId);\r", + " pm.expect(service['etht-svc-access-ports'][n]).to.have.property('access-ltp-id', accessLtpPortId);\r", + " pm.expect(service['etht-svc-access-ports'][n]).to.have.property('service-classification-type','ietf-eth-tran-types:vlan-classification');\r", + " pm.expect(service['etht-svc-access-ports'][n]).to.have.property('outer-tag');\r", + " pm.expect(service['etht-svc-access-ports'][n]['outer-tag']).to.have.property('tag-type',vlanType);\r", + " pm.expect(service['etht-svc-access-ports'][n]['outer-tag']).to.have.property('vlan-value', vlanId);\r", + " if (vlanType === 'ietf-eth-tran-types:classify-c-vlan') {\r", + " pm.expect(service['etht-svc-access-ports'][n]).to.have.property('ingress-egress-bandwidth-profile-name', profileName);\r", + " } else {\r", + " pm.expect(service['etht-svc-access-ports'][n]).to.not.have.property('ingress-egress-bandwidth-profile-name');\r", + " }\r", + "}\r", + "\r", + "function checkServiceEnding(service) {\r", + " var state = \"up\";\r", + " var serviceName = service[\"etht-svc-name\"];\r", + " if ('Intracom' === companyName && ['S1-local', 'S3-leaf-1', 'S2-leaf-2'].includes(serviceName) && currentlyActiveLocalService !== serviceName) {\r", + " state = \"down\";\r", + " }\r", + " pm.expect(service).to.have.property('admin-status','ietf-te-types:tunnel-state-' + state);\r", + " pm.expect(service).to.have.property('state');\r", + " pm.expect(service['state']).to.have.property('operational-state','ietf-te-types:tunnel-state-' + state);\r", + " pm.expect(service['state']).to.have.property('provisioning-state','ietf-te-types:lsp-state-up');\r", + "}\r", + "\r", + "\r", + "\r", + "\r", + "\r", + "\r", + "\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT provides all the Bandwidth profiles with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.2\",\n \n- \"RFC 8345 A YANG Data Model for Network Topologies\",\n \n- \"RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_GET_BO_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_GET_BO_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 400\", function () {\r", + " pm.response.to.have.status(400);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "GET", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/tran-service:etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "tran-service:etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when the request is malformed.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 201\", function () {\r", + " pm.response.to.have.status(201);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + "});\r", + "\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_BWP_SVS_IN_ONE_REQUEST') == \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and not PICS_BWP_SVS_IN_ONE_REQUEST are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"etht-svc-bandwidth-profiles\": [\r\n {\r\n \"bandwidth-profile-name\": \"bw_profile_{{PX_ETH_SVC_NAME}}\",\r\n \"bandwidth-profile-type\": \"ietf-eth-tran-types:mef-10-bwp\",\r\n \"CIR\": \"{{PX_CIR_VALUE}}\",\r\n \"EIR\": \"{{PX_EIR_VALUE}}\",\r\n \"color-aware\": {{PX_COLOR_AWARE}},\r\n \"coupling-flag\": {{PX_COUPLING_FLAG}}\r\n }\r\n ]\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT creates a new Bandwidth profile with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BV_02_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BV_02_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 201\", function () {\r", + " pm.response.to.have.status(201);\r", + "});\r", + "\r", + "\r", + "// Postamble\r", + "// TODO Use pm.sendRequest to initiate the delete: see TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_01\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_BWP_SVS_IN_ONE_REQUEST') == \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT and not PICS_BWP_SVS_IN_ONE_REQUEST are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "jwt", + "jwt": [ + { + "key": "algorithm", + "value": "HS256", + "type": "string" + }, + { + "key": "isSecretBase64Encoded", + "value": false, + "type": "boolean" + }, + { + "key": "payload", + "value": "{}", + "type": "string" + }, + { + "key": "addTokenTo", + "value": "header", + "type": "string" + }, + { + "key": "headerPrefix", + "value": "Bearer", + "type": "string" + }, + { + "key": "queryParamKey", + "value": "token", + "type": "string" + }, + { + "key": "header", + "value": "{}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"ietf-eth-tran-service:etht-svc-instances\": [\r\n {\r\n \"etht-svc-name\": \"S1_local\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-{{PX_LOCAL_ADMIN_STATUS_1}}\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 201\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 101\r\n },\r\n \"ingress-egress-bandwidth-profile-name\": \"bw_profile_{{PX_ETH_SVC_NAME}}\"\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S2_local\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-{{PX_LOCAL_ADMIN_STATUS_2}}\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 209\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 103\r\n },\r\n \"ingress-egress-bandwidth-profile-name\": \"bw_profile_{{PX_ETH_SVC_NAME}}\"\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S3_local\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-{{PX_LOCAL_ADMIN_STATUS_3}}\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 210\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 104\r\n },\r\n \"ingress-egress-bandwidth-profile-name\": \"bw_profile_{{PX_SERVICE_NAME}}\"\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S1-inter-d\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-up\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 202\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 202\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S2-inter-d\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-up\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 203\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 203\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT creates a new ethernet service with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BV_02_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BV_02_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 201\", function () {\r", + " pm.response.to.have.status(201);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + "});\r", + "\r", + "// Postamble\r", + "// TODO Use pm.sendRequest to initiate the delete: see TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_01\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_BWP_SVS_IN_ONE_REQUEST') == \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and not PICS_BWP_SVS_IN_ONE_REQUEST are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"ietf-eth-tran-service:etht-svc-instances\": [\r\n {\r\n \"etht-svc-name\": \"S1_local\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-{{PX_LOCAL_ADMIN_STATUS_1}}\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 201\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 101\r\n },\r\n \"ingress-egress-bandwidth-profile-name\": \"bw_profile_{{PX_ETH_SVC_NAME}}\"\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S2_local\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-{{PX_LOCAL_ADMIN_STATUS_2}}\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 209\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 103\r\n },\r\n \"ingress-egress-bandwidth-profile-name\": \"bw_profile_{{PX_ETH_SVC_NAME}}\"\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S3_local\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-{{PX_LOCAL_ADMIN_STATUS_3}}\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 210\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 104\r\n },\r\n \"ingress-egress-bandwidth-profile-name\": \"bw_profile_{{PX_SERVICE_NAME}}\"\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S1-inter-d\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-up\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 202\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 202\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S2-inter-d\",\r\n \"access-provider-id\": \"{{PX_ETH_PROVIDER_ID}}\",\r\n \"access-client-id\": \"{{PX_ETH_CLIENT_ID}}\",\r\n \"access-topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\",\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"admin-status\": \"ietf-te-types:tunnel-state-up\",\r\n \"etht-svc-access-ports\": [\r\n {\r\n \"access-port-id\": 1,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 203\r\n }\r\n },\r\n {\r\n \"access-port-id\": 2,\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}},\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 203\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT creates successfully a new Bandwidth profile.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BV_03", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BV_03", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 201\", function () {\r", + " pm.response.to.have.status(201);\r", + "});\r", + "\r", + "var responseJson = pm.response.json();\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json; charset=utf-8'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json; charset=utf-8');\r", + " responseJson = pm.response.json();\r", + "});\r", + "\r", + "// Postamble\r", + "// TODO Use pm.sendRequest to initiate the delete: see TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_01\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('PICS_ABSTRACT_PT') != \"true\") || (pm.environment.get('PICS_BWP_SVS_IN_ONE_REQUEST') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and PICS_ABSTRACT_PT and PICS_BWP_SVS_IN_ONE_REQUEST are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "body": { + "mode": "raw", + "raw": "{\r\n \"ietf-eth-tran-service:etht-svc-instances\": [\r\n {\r\n \"etht-svc-name\": \"S1_local\",\r\n \"te-topology-identifier\": {\r\n \"provider-id\": {{PX_ETH_PROVIDER_ID}},\r\n \"client-id\": {{PX_ETH_CLIENT_ID}},\r\n \"topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\"\r\n },\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"etht-svc-end-points\": [\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"1\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 201\r\n }\r\n },\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"2\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 101\r\n },\r\n \"ingress-egress-bandwidth-profile\": {\r\n \"bandwidth-profile-type\": \"ietf-eth-tran-types:mef-10-bwp\",\r\n \"CIR\": \"{{PX_CIR_VALUE}}\",\r\n \"EIR\": \"{{PX_EIR_VALUE}}\"\r\n }\r\n }\r\n ]\r\n },\r\n\t\t{\r\n \"etht-svc-name\": \"S2_local\",\r\n \"te-topology-identifier\": {\r\n \"provider-id\": {{PX_ETH_PROVIDER_ID}},\r\n \"client-id\": {{PX_ETH_CLIENT_ID}},\r\n \"topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\"\r\n },\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"etht-svc-end-points\": [\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"1\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 209\r\n }\r\n },\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"2\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 103\r\n },\r\n \"ingress-egress-bandwidth-profile\": {\r\n \"bandwidth-profile-type\": \"ietf-eth-tran-types:mef-10-bwp\",\r\n \"CIR\": \"{{PX_CIR_VALUE}}\",\r\n \"EIR\": \"{{PX_EIR_VALUE}}\"\r\n }\r\n }\r\n ]\r\n },\r\n\t\t{\r\n \"etht-svc-name\": \"S3_local\",\r\n \"te-topology-identifier\": {\r\n \"provider-id\": {{PX_ETH_PROVIDER_ID}},\r\n \"client-id\": {{PX_ETH_CLIENT_ID}},\r\n \"topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\"\r\n },\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"etht-svc-end-points\": [\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"1\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 210\r\n }\r\n },\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"2\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 104\r\n },\r\n \"ingress-egress-bandwidth-profile\": {\r\n \"bandwidth-profile-type\": \"ietf-eth-tran-types:mef-10-bwp\",\r\n \"CIR\": \"{{PX_CIR_VALUE}}\",\r\n \"EIR\": \"{{PX_EIR_VALUE}}\"\r\n }\r\n }\r\n ]\r\n },\r\n\t\t{\r\n \"etht-svc-name\": \"S1-inter-d\",\r\n \"te-topology-identifier\": {\r\n \"provider-id\": {{PX_ETH_PROVIDER_ID}},\r\n \"client-id\": {{PX_ETH_CLIENT_ID}},\r\n \"topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\"\r\n },\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"etht-svc-end-points\": [\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"1\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 202\r\n }\r\n },\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"2\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_I_D_LINK_W_ID}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 202\r\n }\r\n }\r\n ]\r\n },\r\n\t\t{\r\n \"etht-svc-name\": \"S2-inter-d\",\r\n \"te-topology-identifier\": {\r\n \"provider-id\": {{PX_ETH_PROVIDER_ID}},\r\n \"client-id\": {{PX_ETH_CLIENT_ID}},\r\n \"topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\"\r\n },\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"etht-svc-end-points\": [\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"1\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_1}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_1}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 203\r\n }\r\n },\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"2\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_I_D_LINK_E_ID}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 203\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S1-leaf2\",\r\n \"te-topology-identifier\": {\r\n \"provider-id\": {{PX_ETH_PROVIDER_ID}},\r\n \"client-id\": {{PX_ETH_CLIENT_ID}},\r\n \"topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\"\r\n },\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"etht-svc-end-points\": [\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"1\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_I_D_LINK_W_ID}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 208\r\n }\r\n },\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"2\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_I_D_LINK_E_ID}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 208\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n \"etht-svc-name\": \"S2-leaf2\",\r\n \"te-topology-identifier\": {\r\n \"provider-id\": {{PX_ETH_PROVIDER_ID}},\r\n \"client-id\": {{PX_ETH_CLIENT_ID}},\r\n \"topology-id\": \"{{PX_ETH_TOPOLOGY_ID}}\"\r\n },\r\n \"etht-svc-type\": \"ietf-eth-tran-types:p2p-svc\",\r\n \"etht-svc-end-points\": [\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"1\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_I_D_LINK_W_ID}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-s-vlan\",\r\n \"vlan-value\": 2009\r\n }\r\n },\r\n {\r\n \"etht-svc-access-points\": [\r\n {\r\n \"access-point-id\": \"2\",\r\n \"access-node-id\": \"{{PX_ACCESS_NODE_ID_2}}\",\r\n \"access-ltp-id\": {{PX_LINK_AGGREG_ID_2}}\r\n }\r\n ],\r\n \"service-classification-type\": \"ietf-eth-tran-types:vlan-classification\",\r\n \"outer-tag\": {\r\n \"tag-type\": \"ietf-eth-tran-types:classify-c-vlan\",\r\n \"vlan-value\": 1003\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT creates a new Bandwidth profile and and a new ethernet service in one POST with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and BWP_SVS_IN_ONE_REQUEST" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BO_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_POST_BO_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 400\", function () {\r", + " pm.response.to.have.status(400);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "POST", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error when the request is malformed.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_PUT_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_PUT_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "// Preamble\r", + "// TODO Use pm.sendRequest to initiate the post: see TC_mWT_PNC_PT_ETH_SVC_POST_BV_01\r", + "\r", + "\r", + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseData = '';\r", + "var topLevelPropertyName = '';\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json');\r", + " responseData = pm.response.json();\r", + " topLevelPropertyName = responseData.hasOwnProperty('modules-state') ? 'modules-state' : 'ietf-yang-library:modules-state';\r", + " console.info(topLevelPropertyName)\r", + "});\r", + "\r", + "// Postamble\r", + "// TODO Use pm.sendRequest to initiate the delete: see TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_01\r", + "\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "PUT", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT updates an existing Bandwidth profile with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_PUT_BV_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_PUT_BV_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "// Preamble\r", + "// TODO Use pm.sendRequest to initiate the post: see TC_mWT_PNC_PT_ETH_SVC_POST_BV_01\r", + "\r", + "\r", + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseData = '';\r", + "var topLevelPropertyName = '';\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json');\r", + " responseData = pm.response.json();\r", + " topLevelPropertyName = responseData.hasOwnProperty('modules-state') ? 'modules-state' : 'ietf-yang-library:modules-state';\r", + " console.info(topLevelPropertyName)\r", + "});\r", + "\r", + "// Postamble\r", + "// TODO Use pm.sendRequest to initiate the delete: see TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_01\r", + "\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "PUT", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT updates an existing ethernet service.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_PUT_BO_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_PUT_BO_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 200\", function () {\r", + " pm.response.to.have.status(200);\r", + "});\r", + "\r", + "var responseData = '';\r", + "var topLevelPropertyName = '';\r", + "\r", + "pm.test(\"Verify that headers.Content-Type is 'application/yang-data+json'\", function () {\r", + " pm.expect(pm.response.headers.get('Content-Type')).is.equals('application/yang-data+json');\r", + " responseData = pm.response.json();\r", + " topLevelPropertyName = responseData.hasOwnProperty('modules-state') ? 'modules-state' : 'ietf-yang-library:modules-state';\r", + " console.info(topLevelPropertyName)\r", + "});\r", + "\r", + "// var moduleList = {};\r", + "\r", + "// pm.test(\"Validate the main field is 'ietf-yang-library:modules-state'\", function () {\r", + "// pm.expect(responseData).to.be.an('object');\r", + "// pm.expect(responseData).to.have.property(topLevelPropertyName);\r", + "// });\r", + "\r", + "// pm.test(\"Verify that the 'module' array is present and not empty\", function () {\r", + "// pm.expect(responseData).to.be.an('object');\r", + "// pm.expect(responseData[topLevelPropertyName][\"module\"]).to.be.an('array').with.lengthOf.at.least(1);\r", + "// // Build the module list\r", + "// responseData[topLevelPropertyName].module.forEach(function(item, index) {\r", + "// pm.expect(item).to.have.property('name');\r", + "// pm.expect(item).to.have.property('revision');\r", + "// pm.expect(item).to.have.property('namespace');\r", + "// if (moduleList.hasOwnProperty(item.name)) {\r", + "// if (moduleList[item.name].revision < item.revision) {\r", + "// moduleList[item.name] = item;\r", + "// }\r", + "// } else {\r", + "// moduleList[item.name] = item;\r", + "// }\r", + "// });\r", + "\r", + "// });\r", + "\r", + "// pm.test('Verify that the basics YANG modules are supported', function() {\r", + "// pm.expect(moduleList).to.have.property(\"ietf-restconf\");\r", + "// pm.expect(moduleList).to.have.property(\"ietf-yang-library\");\r", + "// pm.expect(moduleList).to.have.property(\"ietf-datastores\");\r", + "// pm.expect(moduleList).to.have.property(\"ietf-inet-types\");\r", + "// pm.expect(moduleList).to.have.property(\"ietf-interfaces\");\r", + "// pm.expect(moduleList).to.have.property(\"ietf-ip\");\r", + "//});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "PUT", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/globals", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "globals" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when updating an unknown Bandwidth profile with mandatory mWT GC 024 data elements subset.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"EndFragment\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 204\", function () {\r", + " pm.response.to.have.status(204);\r", + "});\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/etht-svc-instances={{PX_ETHT_SVC_NAME}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "etht-svc-instances={{PX_ETHT_SVC_NAME}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT deletes an existing ethernet service.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"EndFragment\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_DELETE_BV_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 204\", function () {\r", + " pm.response.to.have.status(204);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/globals/bandwitdh_profile_name={{PX_BANDWIDTH_PROFILE_NAME}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "globals", + "bandwitdh_profile_name={{PX_BANDWIDTH_PROFILE_NAME}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT deletes an existing bandwidth profile.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services\",\n \n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"EndFragment\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_DELETE_BO_01", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_DELETE_BO_01", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 400\", function () {\r", + " pm.response.to.have.status(400);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "basic", + "basic": [ + { + "key": "password", + "value": "{{PX_USER_PASSWD}}", + "type": "string" + }, + { + "key": "username", + "value": "{{PX_USER}}", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/instances={{PX_ETHT_SVC_NAME}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "instances={{PX_ETHT_SVC_NAME}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when the request is malformed.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"EndFragment\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST" + }, + { + "name": "TC_mWT_PNC_PT_ETH_SVC_DELETE_BO_02", + "item": [ + { + "name": "TC_mWT_PNC_PT_ETH_SVC_DELETE_BO_02", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Verify that the response status code is 404\", function () {\r", + " pm.response.to.have.status(404);\r", + "});" + ], + "type": "text/javascript", + "packages": {} + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "// Check PICS requirements\r", + "if ((pm.environment.get('PICS_IUT_PNC') != \"true\") || (pm.environment.get('PICS_RESTCONF') != \"true\") || (pm.environment.get('PICS_SEC_TLS') != \"true\") || (pm.environment.get('ABSTRACT_PT') != \"true\")) {\r", + " throw new Error('PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS and ABSTRACT_PT are required.');\r", + "}\r", + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "{{PX_ACCESS_TOKEN}}", + "type": "string" + } + ] + }, + "method": "DELETE", + "header": [ + { + "key": "Accept", + "value": "application/yang-data+json" + } + ], + "url": { + "raw": "{{PX_PROTOCOL}}://{{PX_IUT_IP_ADDRESS}}:{{PX_IUT_IP_PORT}}/{{PX_ROOT_API}}/ietf-eth-tran-service:etht-svc/etht-svc-instances={{PX_UNKNOWN_ETHT_SVC_NAME}}", + "protocol": "{{PX_PROTOCOL}}", + "host": [ + "{{PX_IUT_IP_ADDRESS}}" + ], + "port": "{{PX_IUT_IP_PORT}}", + "path": [ + "{{PX_ROOT_API}}", + "ietf-eth-tran-service:etht-svc", + "etht-svc-instances={{PX_UNKNOWN_ETHT_SVC_NAME}}" + ] + }, + "description": "/restconf/data/ietf-yang-library:modules-state" + }, + "response": [] + } + ], + "description": "Test objective\n\n- \"Verify that the IUT replies with an error code when it is requested to delete an unknown Bandwidth profile.\"\n \n\nReference\n\n- \"ETSI GS mWT 024 Clause 4.3.3\",\n \n- \"ETSI GS mWT 024 Clause 5.3.2 Exception Handling\",\n \n- \"ETSI GS mWT 024 Annex A.2.4\",\n \n- \"RFC 6991 Common YANG Data Types\",\n \n- \"RFC 8776 Common YANG Data Types for Traffic Engineering\",\n \n- \"draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals\"EndFragment\n \n\nPICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST" + } + ] + } + ], + "description": "This group provides test case for PartiallyTransparent abstraction level.\n\nReference\n\n- \"4.3.3 AL2: Abstraction Level 2 - \"Partially Transparent\"\"" + } + ] +} \ No newline at end of file diff --git a/postman/TTF_T029.postman_environment.json b/postman/TTF_T029.postman_environment.json new file mode 100644 index 0000000000000000000000000000000000000000..8757c44560ee5a045112229154c3c2186b7e3f6d --- /dev/null +++ b/postman/TTF_T029.postman_environment.json @@ -0,0 +1,375 @@ +{ + "id": "c7214617-e241-497c-a967-2c5d67723939", + "name": "TTF_T029", + "values": [ + { + "key": "PICS_IUT_PNC", + "value": "true", + "type": "default", + "enabled": true + }, + { + "key": "PICS_RESTCONF", + "value": "true", + "type": "default", + "enabled": true + }, + { + "key": "PICS_SEC_TLS", + "value": "true", + "type": "default", + "enabled": true + }, + { + "key": "PICS_ABSTRACT_BB", + "value": "true", + "type": "default", + "enabled": true + }, + { + "key": "PICS_MW_TOPO", + "value": "true", + "type": "default", + "enabled": true + }, + { + "key": "PX_IUT_IP_ADDRESS", + "value": "127.0.01", + "type": "default", + "enabled": true + }, + { + "key": "PX_PROTOCOL", + "value": "https", + "type": "default", + "enabled": true + }, + { + "key": "PX_IUT_IP_PORT", + "value": "443", + "type": "default", + "enabled": true + }, + { + "key": "PX_ROOT_API", + "value": "restconf/data", + "type": "default", + "enabled": true + }, + { + "key": "PX_USER", + "value": "user", + "type": "default", + "enabled": true + }, + { + "key": "PX_USER_PASSWD", + "value": "passwd", + "type": "default", + "enabled": true + }, + { + "key": "PX_ACCESS_TOKEN", + "value": "token", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_YANG_LIBRARY_VERSION", + "value": "2019-01-04", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_YANG_LIBRARY_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-yang-library", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_RESTCONF_VERSION", + "value": "2016-08-15", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_RESTCONF_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-restconf", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_NETWORK_VERSION", + "value": "2018-02-26", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_NETWORK_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-network", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_NETWORK_TOPOLOGY_VERSION", + "value": "2018-02-26", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_NETWORK_TOPOLOGY_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-network-topology", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_TE_TOPOLOGY_VERSION", + "value": "2018-06-15", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_TE_TOPOLOGY_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-te-topology", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_ETH_TE_TOPOLOGY_VERSION", + "value": "2018-03-01", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_ETH_TE_TOPOLOGY_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-eth-te-topology", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_MW_TOPOLOGY_VERSION", + "value": "2018-10-22", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_MW_TOPOLOGY_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-microwave-topology", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_ETH_TRAN_SVC_VERSION", + "value": "2018-08-30", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_ETH_TRAN_SVC_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-eth-tran-service", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_ETH_TRAN_TYPES_VERSION", + "value": "2018-08-30", + "type": "default", + "enabled": true + }, + { + "key": "PX_IETF_ETH_TRAN_TYPES_NAMESPACE", + "value": "urn:ietf:params:xml:ns:yang:ietf-eth-tran-types", + "type": "default", + "enabled": true + }, + { + "key": "PX_BB_NETWORK_ID", + "value": "network1", + "type": "default", + "enabled": true + }, + { + "key": "PX_BB_PROVIDER_ID", + "value": "provider1", + "type": "default", + "enabled": true + }, + { + "key": "PX_BB_CLIENT_ID", + "value": "client1", + "type": "default", + "enabled": true + }, + { + "key": "PX_NETWORK_ID", + "value": "network1", + "type": "default", + "enabled": true + }, + { + "key": "PX_UNKNOWN_NETWORK_ID", + "value": "johndoe", + "type": "default", + "enabled": true + }, + { + "key": "PX_NODE_ID", + "value": "node1", + "type": "default", + "enabled": true + }, + { + "key": "PX_UNKNOWN_NODE_ID", + "value": "johndoe", + "type": "default", + "enabled": true + }, + { + "key": "PX_ETH_SVC_NAME", + "value": "svc_name", + "type": "default", + "enabled": true + }, + { + "key": "PX_UNKNOWN_ETHT_SVC_NAME", + "value": "johndoe", + "type": "default", + "enabled": true + }, + { + "key": "PX_BANDWIDTH_PROFILE_NAME", + "value": "bandwidth1", + "type": "default", + "enabled": true + }, + { + "key": "PX_UNKNOWN_BANDWIDTH_PROFILE_NAME", + "value": "johndoe", + "type": "default", + "enabled": true + }, + { + "key": "PX_CIR_VALUE", + "value": "1", + "type": "default", + "enabled": true + }, + { + "key": "PX_CBS_VALUE", + "value": "1", + "type": "default", + "enabled": true + }, + { + "key": "PX_EIR_VALUE", + "value": "1", + "type": "default", + "enabled": true + }, + { + "key": "PX_EBS_VALUE", + "value": "1", + "type": "default", + "enabled": true + }, + { + "key": "PX_COLOR_AWARE", + "value": "true", + "type": "default", + "enabled": true + }, + { + "key": "PX_COUPLING_FLAG", + "value": "false", + "type": "default", + "enabled": true + }, + { + "key": "PX_ETH_SVC_TITLE", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_ETH_SVC_DESC", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_ETH_SVC_CUSTOMER", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_ACCESS_NODE_ID_1", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_ACCESS_NODE_ID_2", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_LINK_AGGREG_ID_1", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_LINK_AGGREG_ID_2", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_I_D_LINK_W_ID", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_I_D_LINK_E_ID", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_LOCAL_ADMIN_STATUS_1", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_ETH_CLIENT_ID", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_ETH_TOPOLOGY_ID", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_LOCAL_ADMIN_STATUS_1", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "PX_LOCAL_ADMIN_STATUS_2", + "value": "", + "type": "default", + "enabled": true + } + ], + "_postman_variable_scope": "environment", + "_postman_exported_at": "2024-07-24T08:01:54.815Z", + "_postman_exported_using": "Postman/11.3.2" +} \ No newline at end of file diff --git a/tdl/.project b/tdl/.project new file mode 100644 index 0000000000000000000000000000000000000000..507451cf82680cc757862d4abfbe28c4e1868fa5 --- /dev/null +++ b/tdl/.project @@ -0,0 +1,17 @@ + + + TTF T029 Ext + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + + diff --git a/tdl/src/lib/org.etsi.mts.tdl.execution.java-1.0.0.jar b/tdl/src/lib/org.etsi.mts.tdl.execution.java-1.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..d7c31c8cdfd963232c54908f5cf8b57bf89fbcd3 Binary files /dev/null and b/tdl/src/lib/org.etsi.mts.tdl.execution.java-1.0.0.jar differ diff --git a/tdl/src/tdl/AtsPNC_TCs.tdltx b/tdl/src/tdl/AtsPNC_TCs.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..eafda62de42da31e637fd1fd76f9236a1d92cf14 --- /dev/null +++ b/tdl/src/tdl/AtsPNC_TCs.tdltx @@ -0,0 +1,87 @@ +Package AtsPNC_TCs { + Import all from Standard + + Import all from ietf_yang_library + Import all from ietf_networks + + Import all from HTTP + Import all from HTTP.MessageBased + Import all from mWT_Common + Import all from mWT_Common.Data + + Import all from AtsPNC_TPs + + // Mappings for code generation + //Import all from AtsPNC_API.JavaMapping + Import all from HttpJavaMappings + Import all from Java + + Annotation PICS_IUT_PNC + Annotation PICS_RESTCONF + Annotation PICS_SEC_TLS + + Objective: TO_mWT_PNC_RESTCONF_GET_BV_01 + @Test Purpose Description TP_mWT_PNC_RESTCONF_GET_BV_01 + @PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS + Test Description TC_mWT_PNC_RESTCONF_GET_BV_01 uses Config_mWT_2 { + IUT receives vRequestGet(uri="/restconf/data/ietf-yang-library:modules-state") + from TEST_SYSTEM + start TEST_SYSTEM::receiveTimer for default_recv_timeout + alternatively { + IUT sends r200 to TEST_SYSTEM + body = ( + modules_state = ( + name_ = "ietf-yang-library:modules-state", + modules )) // FIXME list not empty + set verdict to pass + } or { + IUT sends vErrorResponse to TEST_SYSTEM + set verdict to fail + } or { + // Timeout -> if using timers + timeout on TEST_SYSTEM::receiveTimer + set verdict to inconclusive + } // End of 'alternate' statement + } + + Objective: TO_mWT_PNC_RESTCONF_GET_BV_02 + @Test Purpose Description + @PICS_IUT_PNC and PICS_RESTCONF and PICS_SEC_TLS + Test Description TC_mWT_PNC_RESTCONF_GET_BV_02 uses Config_mWT_2 { + IUT receives vRequestGet(uri="/restconf/data/ietf-yang-library:modules-state") + from TEST_SYSTEM + start TEST_SYSTEM::receiveTimer for default_recv_timeout + alternatively { + IUT sends r200 to TEST_SYSTEM + body = ( + modules_state = ( + name_ = "ietf-yang-library:modules-state", + modules = ( // A list of items + ( + name_ = "ietf-datastores", + revision = ?, + schema = ?, + namespace = ?, + conformance_type = ? + ), + ( + name_ = "ietf-inet-types", + revision = ?, + schema = ?, + namespace = ?, + conformance_type = ? + ) + // FIXME list of item + ))) + set verdict to pass + } or { + IUT sends vErrorResponse to TEST_SYSTEM + set verdict to fail + } or { + // Timeout -> if using timers + timeout on TEST_SYSTEM::receiveTimer + set verdict to inconclusive + } // End of 'alternate' statement + } + +} // End of Package AtsPNC_TCs \ No newline at end of file diff --git a/tdl/src/tdl/AtsPNC_TPs.tdltx b/tdl/src/tdl/AtsPNC_TPs.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..8b397576b08de1fa4b1a9b0b5a130c325ddc37f6 --- /dev/null +++ b/tdl/src/tdl/AtsPNC_TPs.tdltx @@ -0,0 +1,175 @@ +Package AtsPNC_TPs { + Import all from Standard + Import all from HTTP + Import all from HTTP.MessageBased + Import all from ietf_yang_library + Import all from ietf_networks + Import all from mWT_Common + Import all from mWT_Common.Data + + Boolean IUT_PNC + Boolean RESTCONF + Boolean SEC_TLS + + Objective TO_mWT_PNC_RESTCONF_GET_BV_01 { + Description: "Verify that the IUT supports RESTCONF API request" + References: "ETSI GS mWT 024 Clause 5.2.1 RESTCONF Protocol", + "RFC 8040 RESTCONF Protocol", + "RFC 8525 YANG Library" + } + + Test Purpose Description TP_mWT_PNC_RESTCONF_GET_BV_01 { + Objective: TO_mWT_PNC_RESTCONF_GET_BV_01 + Configuration: Config_mWT_2 + PICS: { IUT_PNC and { RESTCONF and SEC_TLS } } + Initial conditions with { + the IUT entity is idle + } + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-yang-library:modules-state"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + modules_state containing + name_ indicating value "ietf-yang-library:modules-state", + modules containing + non empty list;;;; // FIXME How to express it + to the TEST_SYSTEM entity + } + } + } + + Objective TO_mWT_PNC_RESTCONF_GET_BV_02 { + Description: "Verify that the IUT supports the basic YANG data models" + References: "ETSI GS mWT 024 Clause 5.2.2.1 YANG Version" + } + + Test Purpose Description TP_mWT_PNC_RESTCONF_GET_BV_02 { + Objective: TO_mWT_PNC_RESTCONF_GET_BV_02 + Configuration: Config_mWT_2 + PICS: IUT_PNC and RESTCONF and SEC_TLS + Initial conditions with { + the IUT entity is idle + } + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-yang-library:modules-state"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + modules_state containing + name_ indicating value "ietf-yang-library:modules-state", + modules containing + entry containing + name_ indicating value "ietf-datastores", + revision indicating value "2018-02-14", + schema indicating value "https://localhost:443/restconf/data/modules/ietf-datastores/2018-02-14", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-datastores", + conformance_type indicating value "import";, + entry containing + name_ indicating value "ietf-inet-types", + revision indicating value "2013-07-15", + schema indicating value "https://localhost:443/restconf/data/modules/ietf-inet-types/2013-07-15", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-inet-types", + conformance_type indicating value "import";, + entry containing + name_ indicating value "ietf-interfaces", + revision indicating value "2018-02-20", + schema indicating value "https://localhost:443/restconf/data/modules/ietf-interfaces/2018-02-20", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-interfaces", + conformance_type indicating value "import", + entry containing + name_ indicating value "ietf-ip", + revision indicating value "2018-02-22", + schema indicating value "https://localhost:443/restconf/data/modules/ietf-ip/2018-02-22", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-ip", + conformance_type indicating value "import";, + entry containing + name_ indicating value "ietf-network-instance", + revision indicating value "2019-01-21", + schema indicating value "https://localhost:443/restconf/data/modules/ietf-network-instance/2019-01-21", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-network-instance", + conformance_type indicating value "import";, + entry containing + name_ indicating value "ietf-restconf", + revision indicating value "2017-01-26", + schema indicating value "https://localhost:443/restconf/data/modules/ietf-restconf/2017-01-26", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-restconf", + conformance_type indicating value "implement";, + entry containing + name_ indicating value "ietf-yang-types", + revision indicating value "2013-07-15", + schema indicating value "https://localhost:443/restconf/data/modules/ietf-restconf/2017-01-26", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-restconf", + conformance_type indicating value "import";, + entry containing + name_ indicating value "ietf-yang-library", + revision indicating value "2019-01-04", + schema indicating value "https://localhost:443/restconf/data/modules/ietf-yang-types/2013-07-15", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-yang-types", + conformance_type indicating value "implement";;;;;; + to the TEST_SYSTEM entity + } + } + } + + Objective TO_mWT_PNC_RESTCONF_GET_BV_03 { + Description: "Verify that the IUT provides the list of supported mWT GS 024 YANG data models" + References: "ETSI GS mWT 024 Clause 5.2.2.2 Common YANG data models", + "ETSI GS mWT 024 Clause 5.2.2.3 YANG Data Models at the Microwave MPI", + "ETSI GS mWT 024 Clause 5.2.2.4 Hierarchical relationship among YANG data models" + } + + Test Purpose Description TP_mWT_PNC_RESTCONF_GET_BV_03 { + Objective: TO_mWT_PNC_RESTCONF_GET_BV_03 + Configuration: Config_mWT_2 + PICS: IUT_PNC and RESTCONF and SEC_TLS + Initial conditions with { + the IUT entity is idle + } + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-yang-library:modules-state"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + body containing + modules_state containing + modules containing + entry containing + name_ indicating value "ietf-microwave-topology", + revision indicating value "2021-10-12", + schema indicating value "draft-ietf-ccamp-mw-topo-yang-02", + namespace indicating value "", + conformance_type indicating value "implement";, + entry containing + name_ indicating value "ietf-eth-te-topology", + revision indicating value "2019-11-18", + schema indicating value "draft-ietf-ccamp-eth-client-te-topo-yang-01", + namespace indicating value "", + conformance_type indicating value "implement";, + entry containing + name_ indicating value "idraft-ietf-ccamp-client-signal-yang-06", + revision indicating value "", + schema indicating value "draft-ietf-ccamp-client-signal-yang-06", + namespace indicating value "", + conformance_type indicating value "";;;;; + to the TEST_SYSTEM entity + } + } + } + +} // End of Package AtsPNC_TPs diff --git a/tdl/src/tdl/HTTP.tdltx b/tdl/src/tdl/HTTP.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..f06ce3160078203003175041877ce61dc68085a0 --- /dev/null +++ b/tdl/src/tdl/HTTP.tdltx @@ -0,0 +1,127 @@ +Package HTTP { + Package MessageBasedConfiguration { + Import all from MessageBased + Message Gate HTTPGate accepts Request,Response + Message Gate HTTPSGate accepts Request,Response + Component API { + //Add variables and timers here or define new component types and configurations + gate HTTPGate http + } + Configuration BasicClientServer { + API client as Tester, + API server as SUT, + connect client::http to server::http + } + + } Note : "Message based types and instances" + + Package MessageBased { + Import all from Standard + + //Generic Method type -> required for generation!!! + Enumerated Method { + Method GET, + Method POST, + Method PUT, + Method PATCH, + Method DELETE + } + + //Generic Request type + Structure Request ( + String uri, + optional Method method, + optional Headers headers, + optional Parameters parameters, + optional Body body + ) + + //Generic Request instances + Request GET ( ) + Request POST ( ) + Request PUT ( ) + Request PATCH ( ) + Request DELETE ( ) + + //Generic Response type + Structure Response ( + optional Integer status, + optional String statusMessage, + optional Headers headers, + optional Body body + ) + + //Generic Response instances, name = status code + + Response r200 (statusMessage = "OK") + Response r201 (statusMessage = "Created") + Response r204 (statusMessage = "No Content") + Response r400 (statusMessage = "Bad Request") + Response r401 (statusMessage = "Not Found") + Response r403 (statusMessage = "Not Authorized") + Response r404 (statusMessage = "Forbidden") + + //Generic Response instances, name = status message + Response OK (status = "200") + Response Created (status = "201") + Response NoContent (status = "204") + Response BadRequest (status = "400") + Response NotFound (status = "404") + Response NotAuthorized (status = "401") + Response Forbidden (status = "403") + + //supporting types + Collection Parameters of Parameter + Structure Parameter ( + Location location, + String ^name, + String ^value + ) + Type Location + Location path + Location query + + //may need a structure, not necessarily relevant in standardized testing + Location cookie + + //separate headers -> not necessary + //Location header; + Collection Headers of Header + Structure Header ( + String ^name, + String ^value + //not relevant in TDL? + //optional contentLength of type Integer, + //optional contentType of type String + ) + + //Base body for extension + Structure Body ( ) + + //Basic string body + Structure StringBody extends Body ( + String text + ) + + //Basic wrapper for collection responses + Structure CollectionBody extends Body ( + Bodies items + ) + + //Any body can be included + //If consistent type is needed, a custom subtype shall be defined and used + Collection Bodies of Body + + //Custom collection data instances can be defined + // - inline in the responses + // - predefined as a separate data element + //Custom collection data instances can be defined + //to enforce type consistency specific for API + + //Basic form body + Structure FormBody extends Body ( + String field, + String content + ) + } +} \ No newline at end of file diff --git a/tdl/src/tdl/HttpJavaMappings.tdltx b/tdl/src/tdl/HttpJavaMappings.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..06856417e44f86228ce3f0f92125e7bf1373507c --- /dev/null +++ b/tdl/src/tdl/HttpJavaMappings.tdltx @@ -0,0 +1,58 @@ +Package HttpJavaMappings { + Import all from Standard + Import all from Java + Import all from HTTP.MessageBased + + @JavaPackage + @MappingName : "Java" + Use "org.etsi.mts.tdl.execution.java.adapters.http" as HttpAdapter + + @JavaClass + Map Request to "HttpRequestData" in HttpAdapter as Request_Mapping { + uri -> "uri", + method -> "method", + headers -> "headers", + parameters -> "parameters", + body -> "body" + } + @JavaClass + Map Response to "HttpResponseData" in HttpAdapter as Response_Mapping { + status -> "status", + statusMessage -> "statusMessage", + headers -> "headers", + body -> "body" + } + @JavaClass + Map Header to "HttpHeader" in HttpAdapter as Header_Mapping { + ^name -> "name", + ^value -> "value" + } + @JavaClass + Map Parameter to "HttpRequestParameter" in HttpAdapter as Parameter_Mapping { + location -> "location", + ^name -> "name", + ^value -> "value" + } + @JavaClass + Map Location to "HttpParameterLocation" in HttpAdapter as Location_Mapping + + @JavaClass + @MappingName : "Java" + Use "org.etsi.mts.tdl.execution.java.adapters.http.HttpParameterLocation" as HttpParameterLocation + Map path to "path" in HttpParameterLocation as path_mapping + Map query to "query" in HttpParameterLocation as query_mapping + Map cookie to "cookie" in HttpParameterLocation as cookie_mapping + + + @JavaClass + Map Method to "HttpMethod" in HttpAdapter as Method_Mapping + + @JavaClass + @MappingName : "Java" + Use "org.etsi.mts.tdl.execution.java.adapters.http.HttpMethod" as HttpMethod + Map GET to "GET" in HttpMethod as GET_mapping + Map POST to "POST" in HttpMethod as POST_mapping + Map PUT to "PUT" in HttpMethod as PUT_mapping + Map PATCH to "PATCH" in HttpMethod as PATCH_mapping + Map DELETE to "DELETE" in HttpMethod as DELETE_mapping +} diff --git a/tdl/src/tdl/Java.tdltx b/tdl/src/tdl/Java.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..8651f4d539038c27419ce9eefa70248c897c8b82 --- /dev/null +++ b/tdl/src/tdl/Java.tdltx @@ -0,0 +1,56 @@ +Package Java { + Import all from Standard + + /* Applied to a DataResourceMapping to specify a package */ + Annotation JavaPackage + /* Applied to a DataElementMapping to specify an instance method */ + Annotation JavaMethod + /* Applied to a DataElementMapping to specify an class method */ + Annotation JavaStaticMethod + /* Applied to a DataResourceMapping or DataElementMapping to specify a class */ + Annotation JavaClass + /* Applied to a DataElementMapping to specify a field (of a class) */ + Annotation JavaField + /* Applied to a DataElementMapping to specify a static field (of a class) */ + Annotation JavaStaticField + /* Applied to a ParameterMapping to specify an instance method that returns the value of a field */ + Annotation JavaGetter + /* Applied to a ParameterMapping to specify an instance method that sets the field value */ + Annotation JavaSetter + + + @JavaPackage + @MappingName : "Java" + Use "java.lang" as JavaLang + Map Boolean to "Boolean" in JavaLang as Boolean_mapping + Map Integer to "Integer" in JavaLang as Integer_mapping + Map String to "String" in JavaLang as String_mapping + + + + @JavaPackage + @MappingName : "Java" + Use "org.etsi.mts.tdl.execution.java.tri" as Tri + + @JavaClass + Map Verdict to "Verdict" in Tri as Verdict_Mapping + + @JavaClass + @MappingName : "Java" + Use "org.etsi.mts.tdl.execution.java.tri.Verdict" as VerdictClass + Map pass to "pass" in VerdictClass as pass_mapping + Map fail to "fail" in VerdictClass as fail_mapping + Map inconclusive to "inconclusive" in VerdictClass as inconclusive_mapping + + + @JavaPackage + @MappingName : "Java" + Use "org.etsi.mts.tdl.execution.java.rt.core" as RuntimeCore + + @JavaClass + @MappingName : "Java" + Use "org.etsi.mts.tdl.execution.java.rt.core.TimeUnit" as TimeUnitClass + Map second to "Second" in TimeUnitClass as second_mapping + + +} \ No newline at end of file diff --git a/tdl/src/tdl/Standard.tdltx b/tdl/src/tdl/Standard.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..4500c309f17045baee623bf0f7779e038cf28824 --- /dev/null +++ b/tdl/src/tdl/Standard.tdltx @@ -0,0 +1,56 @@ +Package Standard { + //TODO: extract to standard library + Constraint length + Constraint minLength + Constraint maxLength + Constraint range + Constraint format + Constraint union + Constraint uniontype + + Type Boolean + Type Integer + Type String + Type Verdict + + //TODO: these do not work at present -> literal values take precedence? +// Boolean true +// Boolean false + Boolean True + Boolean False + + Verdict pass + Verdict fail + Verdict inconclusive + + Time second + + Annotation Master + Annotation MappingName + + //standard annotations for STO + Annotation Initial conditions + Annotation Expected behaviour + Annotation Final conditions + Annotation Test Purpose Description + Annotation when + Annotation then + + Predefined == returns Boolean + Predefined != returns Boolean + Predefined and returns Boolean + Predefined or returns Boolean + Predefined xor returns Boolean + Predefined not returns Boolean + Predefined < returns Boolean + Predefined > returns Boolean + Predefined <= returns Boolean + Predefined >= returns Boolean + Predefined + + Predefined - + Predefined * + Predefined / + Predefined mod + Predefined size returns Integer + +} \ No newline at end of file diff --git a/tdl/src/tdl/TdlRuntime.tdltx b/tdl/src/tdl/TdlRuntime.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..07cd10d7322ab592da097e98561c6fa6375010fd --- /dev/null +++ b/tdl/src/tdl/TdlRuntime.tdltx @@ -0,0 +1,3 @@ +Package TdlRuntime { + Annotation Language +} \ No newline at end of file diff --git a/tdl/src/tdl/ietf_networks.tdltx b/tdl/src/tdl/ietf_networks.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..d8eda232634fc5f2863065e955dc4be22083e99f --- /dev/null +++ b/tdl/src/tdl/ietf_networks.tdltx @@ -0,0 +1,21 @@ +Package ietf_networks { + + Import all from Standard + Import all from ietf_yang_library + + Structure Networks ( + String name_, + NetworksList networks + ) + + Structure Network ( + String network_id, + String network_types + // TODO + ) + Collection NetworksList of Network + + // String declaration + //String "/restconf/data/ietf-network:networks"; + +} \ No newline at end of file diff --git a/tdl/src/tdl/ietf_yang_library.tdltx b/tdl/src/tdl/ietf_yang_library.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..e26ba316e2591239212a6fee04b3d11c38b3c6cd --- /dev/null +++ b/tdl/src/tdl/ietf_yang_library.tdltx @@ -0,0 +1,46 @@ +Package ietf_yang_library { + + Import all from Standard + + // RFC 6991 + Type Counter32 // (SNMPv2-SMI) + Type ZeroBasedCounter32 // (RMON2-MIB) + Type Counter64 //(SNMPv2-SMI) + Type ZeroBasedCounter64 // (HCNUM-TC) + Type Gauge32 // (SNMPv2-SMI) + Type CounterBasedGauge64 // (HCNUM-TC) + Type OID + Type OID128 + Type YangIdentifier + Type DateAndTime + Type TimeTicks // (SNMPv2-SMI) + Type TimeStamp // (SNMPv2-TC) + Type PhysAddress // (SNMPv2-TC) + Type MacAddress // (SNMPv2-TC) + Type XPath1_0 + Type HexString + Type UUID + Type DottedQuad + Type URI // e.g., "https://localhost:443/restconf/tailf/modules/ietf-yang-library/2019-01-04" + + // RFC 8525 + Structure ModuleState ( + String name_, + ModuleList modules + ) + + Structure Module ( + String name_, + String revision, + URI schema, + URI namespace, + String conformance_type + ) + Collection ModuleList of Module + + // String declaration + //String "application/yang-data+xml"; + + //String "/restconf/data/ietf-yang-library:modules-state"; +} + diff --git a/tdl/src/tdl/mWT_Common.tdltx b/tdl/src/tdl/mWT_Common.tdltx new file mode 100644 index 0000000000000000000000000000000000000000..db9c5ada83ead9843a095cbe713b6b513e3735d8 --- /dev/null +++ b/tdl/src/tdl/mWT_Common.tdltx @@ -0,0 +1,94 @@ +Package mWT_Common { + Import all from Standard + Import all from ietf_yang_library + Import all from ietf_networks + Import all from HTTP + Import all from HTTP.MessageBased + + PICS IUT_MDSC // ETSI GS mWT 0029-1 Table A.1.1 + PICS IUT_PNC // ETSI GS mWT 0029-1 Table A.1.1 + PICS RESTCONF // ETSI GS mWT 0029-1 Table A.2.1 + PICS ABSTRACT_BB // ETSI GS mWT 0029-1 Table A.3.1 + PICS MW_TOPO // ETSI GS mWT 0029-1 Table A.4.1 + PICS ETH_TOPO // ETSI GS mWT 0029-1 Table A.4.2 + PICS BWPs_LOCALLY // ETSI GS mWT 0029-1 Table A.5.1 + PICS BWPs_GLOBALLY // ETSI GS mWT 0029-1 Table A.5.2 + PICS SEC_TLS // ETSI GS mWT 0029-1 Table Table A.6 + + Entity IUT // IUT entity + Entity TEST_SYSTEM // Test System entity + + Event idle // The IUT is ready to serve request + Event discovered // The IUT has discovered available network topologies + Event send + Event sends + Event receives + + Package Data { + Import all from Standard + Import all from HTTP.MessageBased + Import all from HTTP.MessageBasedConfiguration + + Import all from ietf_yang_library + Import all from ietf_networks + + String VALID_TOKEN + + Headers vHeadersGet [ + new Header ( + ^name = "Content-Type", + ^value = "application/yang-data+xml" + ), + new Header ( + ^name = "Accept", + ^value = "application/yang-data+xml" + ), + new Header ( + ^name = "Authorization", + ^value = VALID_TOKEN ) + ] + + Request vRequestGet ( + method = GET, + uri = "/", + // HTTP version currently not supported + headers = vHeadersGet + ) + + Response vErrorResponse ( + + ) + + Structure mWTBody extends Body ( + optional ModuleState modules_state, + optional Networks networks + ) + + second default_recv_timeout + + Component MDSCComponent { + // Add variables and timers here or define new component types and configurations + gate HTTPGate http + gate HTTPSGate https + timer receiveTimer + } + Component PNCComponent { + // Add variables and timers here or define new component types and configurations + gate HTTPGate http + gate HTTPSGate https + timer receiveTimer + } + Configuration Config_mWT_1 + { + PNCComponent TEST_SYSTEM as Tester, + MDSCComponent IUT as SUT, + connect TEST_SYSTEM=TEST_SYSTEM::http to IUT=IUT::http + } + Configuration Config_mWT_2 + { + MDSCComponent TEST_SYSTEM as Tester, + PNCComponent IUT as SUT, + connect TEST_SYSTEM=TEST_SYSTEM::http to IUT=IUT::http + } + } +} // End of Package mWT_Common \ No newline at end of file diff --git a/test-purposes/AtsMDSC.tplan2 b/test-purposes/AtsMDSC.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..d37d0625b3630fbb6c526240ae7bd4eb8b8938c3 --- /dev/null +++ b/test-purposes/AtsMDSC.tplan2 @@ -0,0 +1,1654 @@ +Package AtsMDSC { + + Group "mdsc" { + + } // End of Group "mdsc" + + Group "pnc" { + + Group "RESTCONF" { + + import all from mWT_Common; + + Test Purpose { + TP Id TP_mWT_PNC_RESTCONF_GET_BV_01 + + Test objective + "Verify that the IUT supports RESTCONF API request." + + Reference + "ETSI GS mWT 024 Clause 5.2.1 RESTCONF Protocol", + "RFC 8040 RESTCONF Protocol", + "RFC 8525 YANG Library" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS + + Initial conditions with { + the IUT entity is idle + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-yang-library:module-set"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + module_setate containing + name_ indicating value "ietf-yang-library:module-set", + modules containing + non empty list;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_RESTCONF_GET_BV_02 + + Test objective + "Verify that the IUT supports the basic YANG data models." + + Reference + "ETSI GS mWT 024 Clause 5.2.1 RESTCONF Protocol", + "ETSI GS mWT 024 Clause 5.2.2 YANG Version", + "RFC 8040 RESTCONF Protocol", + "RFC 8525 YANG Library" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS + + Initial conditions with { + the IUT entity is idle + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-yang-library:module-set"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + module_setles_state containing + name_ indicating value "ietf-yang-library:module-set", + modules containing + entry containing + name_ indicating value "ietf-datastores", + revision indicating value "2018-02-14", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-datastores";, + entry containing + name_ indicating value "ietf-inet-types", + revision indicating value "2013-07-15", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-inet-types";, + entry containing + name_ indicating value "ietf-interfaces", + revision indicating value "2018-02-20", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-interfaces";, + entry containing + name_ indicating value "ietf-ip", + revision indicating value "2018-02-22", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-ip";, + entry containing + name_ indicating value "ietf-network-instance", + revision indicating value "2019-01-21", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-network-instance";, + entry containing + name_ indicating value "ietf-restconf", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-restconf";, + entry containing + name_ indicating value "ietf-yang-types", + revision indicating value "2013-07-15", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-restconf";, + entry containing + name_ indicating value "ietf-yang-library", + revision indicating value "2019-01-04", + namespace indicating value "urn:ietf:params:xml:ns:yang:ietf-yang-library";;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_RESTCONF_GET_BV_03 + + Test objective + "Verify that the IUT provides the list of supported mWT GS 024 YANG data models." + + Reference + "ETSI GS mWT 024 Clause 5.2.2.2 Common YANG data models", + "ETSI GS mWT 024 Clause 5.2.2.3 YANG Data Models at the Microwave MPI", + "ETSI GS mWT 024 Clause 5.2.2.4 Hierarchical relationship among YANG data models" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS + + Initial conditions with { + the IUT entity is idle + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-yang-library:module-set"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + body containing + module_set modules_state containing + modules containing + entry containing + name_ indicating value "ietf-microwave-topology", + revision indicating value "2021-10-12", + schema indicating value "draft-ietf-ccamp-mw-topo-yang-02", + namespace indicating value "";, + entry containing + name_ indicating value "ietf-eth-te-topology", + revision indicating value "2019-11-18", + namespace indicating value "";, + entry containing + name_ indicating value "idraft-ietf-ccamp-client-signal-yang-06", + revision indicating value "", + namespace indicating value "";;;;; + to the TEST_SYSTEM entity + } + } + } + + } // End of Group Group "RESTCONF" + + Group "Blackbox" { + + import all from mWT_Common; + + Test Purpose { + TP Id TP_mWT_PNC_BB_MW_TOPO_GET_BV_01 + + Test objective + "Verify that the IUT does not provide any MW network topology." + + Reference + "ETSI GS mWT 024 Clause 4.3.2", + "ETSI GS mWT 024 Annex A.2.3", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_BB + + Initial conditions with { + the IUT entity is idle + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + name_ indicating value any_value, + networks containing + network_id indicating value any_value, + network_types containing + not te_topology + ;, + node_id indicating value any_value, + termination_points indicating value any_value, + links indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_BB_MW_TOPO_GET_BV_02 + + Test objective + "Verify that the IUT provides a network list containing only one node." + + Reference + "ETSI GS mWT 024 Clause 4.3.2", + "ETSI GS mWT 024 Annex A.2.3", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_BB + + Initial conditions with { + the IUT entity is idle + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + one network node + ;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_BB_MW_TOPO_GET_BV_03 + + Test objective + "Verify that the IUT provides a network list containing ietf-network entries." + + Reference + "ETSI GS mWT 024 Clause 4.3.2", + "ETSI GS mWT 024 Annex A.2.3", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_BB + + Initial conditions with { + the IUT entity is idle + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + one network node + ;;;; + to the TEST_SYSTEM entity + } + } + } + + } // End of Group "Blackbox" + + Group "PartiallyTransparent" { + + Group "MWTopologyDiscovery" { + + import all from mWT_Common; + + Test Purpose { + TP Id TP_mWT_PNC_PT_MW_TOPO_GET_BV_01 + + Test objective + "Verify that the IUT provides the MW network topology for all networks with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks/topologyId/mw-native-topology", + headers containing + content_type indicating value "application/yang-data+xml";; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + name_ indicating value any_value, + networks containing + network_id indicating value any_value, + network_types containing + te_topology containing + mw_topology containing + mw_tp_choice indicating value any_value + ;;;, + node_id indicating value any_value, + termination_points indicating value any_value, + links indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_MW_TOPO_GET_BV_02 + + Test objective + "Verify that the IUT provides the MW network topology for a specific network with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2.1", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered a network topology NETWORK_TOPO + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-microwave-topology/ietf-network:networks/network={NETWORK_ID)/topologyId/mw-native-topology", + headers containing + content_type indicating value "application/yang-data+xml";; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + network_id indicating value NETWORK_ID, + network_types containing + te_topology containing + mw_topology containing + mw_tp_choice indicating value any_value + ;;;, + node_id indicating value any_value, + termination_points indicating value any_value, + links indicating value any_value + ;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_MW_TOPO_GET_BO_01 + + Test objective + "Verify that the IUT replies with an error code when the request is malformed." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered a network topology NETWORK_TOPO + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/networks"; // Malformed URI + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r400 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_MW_TOPO_GET_BO_02 + + Test objective + "Verify that the IUT replies with an error code when the network identifier is unknown." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered a network topology NETWORK_TOPO + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks/network={UNKNOWN_NETWORK_ID)/topologyId/mw-native-topology"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r404 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_MW_NODE_GET_BV_01 + + Test objective + "Verify that the IUT provides the MW network topology for all nodes with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2.1", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-microwave-topology/ietf-network:networks/network={NETWORK_ID)/node/topologyId/mw-native-topology"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + name_ indicating value any_value, + networks containing + network_id indicating value any_value, + network_types containing + te_topology containing + mw_native_topology indicating value any_value + ;;, + node_id indicating value any_value, + termination_points indicating value any_value, + links indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_MW_NODE_GET_BV_02 + + Test objective + "Verify that the IUT provides the MW network topology for a specific node with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2.1", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-microwave-topology/ietf-network:networks/network={NETWORK_ID)/node={NODE_ID}/topologyId/mw-native-topology"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + name_ indicating value any_value, + networks containing + network_id indicating value NETWORK_ID, + network_types containing + te_topology containing + mw_native_topology indicating value any_value + ;;, + node_id indicating value NODE_ID, + termination_points indicating value any_value, + links indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_MW_NODE_GET_BO_01 + + Test objective + "Verify that the IUT replies with an error code when the node identifier is unknown." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and MW_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-microwave-topology/ietf-network:networks/network={NETWORK_ID)/node={UNKNOWN_NODE_ID}/topologyId/mw-native-topology"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r404 + to the TEST_SYSTEM entity + } + } + } + + } // End of Group "MWTopologyDiscovery" + + Group "EthernetTopologyDiscovery" { + + import all from mWT_Common; + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BV_01 + + Test objective + "Verify that the IUT provides the Ethernet network topology for all networks with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks", + headers containing + content_type indicating value "application/yang-data+xml";; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + name_ indicating value any_value, + networks containing + network_id indicating value any_value, + network_types containing + te_topology containing + mw_topology containing + mw_tp_choice indicating value any_value + ;;;, + node_id indicating value any_value, + termination_points indicating value any_value, + links indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BV_02 + + Test objective + "Verify that the IUT provides the Ethernet network topology for a specific network with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.1.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered a network topology NETWORK_TOPO + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks/network={NETWORK_ID}", + headers containing + content_type indicating value "application/yang-data+xml";; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + network_id indicating value NETWORK_ID, + network_types containing + te_topology indicating value any_value;, + node_id indicating value any_value, + termination_points indicating value any_value, + links indicating value any_value + ;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BO_01 + + Test objective + "Verify that the IUT replies with an error code when the request is malformed." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.1.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered a network topology NETWORK_TOPO + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/networks/{NETWORK_ID}"; // Malformed URI + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r400 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_TOPO_NETWORK_GET_BO_02 + + Test objective + "Verify that the IUT replies with an error code when the network identifier is unknown." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.1.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered a network topology NETWORK_TOPO + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks/network={UNKNOWN_NETWORK_ID}"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r404 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_TOPO_NODE_GET_BV_01 + + Test objective + "Verify that the IUT provides the Ethernet network topology for all nodes with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks/network={NETWORK_ID}/node"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + name_ indicating value any_value, + networks containing + network_id indicating value any_value, + network_types containing + te_topology containing + mw_topology containing + mw_tp_choice indicating value any_value + ;;;, + node_id indicating value any_value, + termination_points indicating value any_value, + links indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_NODE_GET_BV_02 + + Test objective + "Verify that the IUT provides the Ethernet network topology for specific node with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks/network={NETWORK_ID}/node={NODE_ID}"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + networks containing + networksList containing + name_ indicating value any_value, + networks containing + network_id indicating value any_value, + network_types containing + te_topology containing + mw_topology containing + mw_tp_choice indicating value any_value + ;;;, + node_id indicating value any_value, + termination_points indicating value any_value, + links indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_NODE_GET_BO_01 + + Test objective + "Verify that the IUT replies with an error code when the node identifier is unknown." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-mw-topo-yang-02 A YANG Data Model for Microwave Topology" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and ETH_TOPO + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-network:networks/network={NETWORK_ID}/node={UNKNOWN_NODE_ID}"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r404 + to the TEST_SYSTEM entity + } + } + } + + } // End of Group "EthernetTopologyDiscovery" + + Group "EthernetService" { + + import all from mWT_Common; + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_GET_BV_01 + + Test objective + "Verify that the IUT provides all the Bandwidth profiles with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity having a Bandwidth profile created and + the IUT entity having a service profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/globals"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r200 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + globals containing + band_width_profiles containing + band_width_profile indicating value BAND_WIDTH_PROFILE + ;;, + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value any_value, + title indicating value any_value, + desc indicating value any_value, + customer indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_GET_BO_01 + + Test objective + "Verify that the IUT replies with an error code when the request is malformed." + + Reference + "ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestGet containing + uri indicating value "/restconf/data/tran-service:etht-svc/globals"; // Malformed URI + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r400 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_POST_BV_01 + + Test objective + "Verify that the IUT creates a new Bandwidth profile with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity not having a Bandwidth profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestPost containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/globals", + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value any_value, + desc indicating value any_value, + customer indicating value any_value + ;;;;; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r201 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value any_value, + desc indicating value any_value, + customer indicating value any_value + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_POST_BV_02_01 + + Test objective + "Verify that the IUT creates a new ethernet service with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity having a Bandwidth profile created and + the IUT entity not having a service profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestPost containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc", + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value any_value, + desc indicating value any_value, + customer indicating value any_value + ;;;;; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r201 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value any_value, + desc indicating value any_value, + customer indicating value any_value + ;, + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value ETH_SVC_TITLE, + desc indicating value ETH_SVC_DESC, + customer indicating value ETH_SVC_CUSTOMER + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_POST_BV_02_02 + + Test objective + "Verify that the IUT creates successfully a new Bandwidth profile." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.2", + "RFC 8345 A YANG Data Model for Network Topologies", + "RFC 8795 YANG Data Model for Traffic Engineering (TE) Topologies", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity having a Bandwidth profile created and + the IUT entity not having a Bandwidth profile containing + bandwidthProfileName indicating value SDN_BANDWIDTH_PROFILE_NAME; and + the IUT entity having a service profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestPost containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/globals", + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + bandwidthProfiles containing + bandwidthProfileName indicating value SDN_BANDWIDTH_PROFILE_NAME, + bandwidthProfileType indicating value SDN_SERVICE_TYPE, + bandwidthProfileCir indicating value CIR, + bandwidthProfileEir indicating value EIR, + bandwidthProfileColorAware indicating value COLOR_AWARE, + bandwidthCouplingFlag indicating value true + ;;; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r201 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + bandwidthProfiles containing + bandwidthProfileName indicating value SDN_BANDWIDTH_PROFILE_NAME, + bandwidthProfileType indicating value SDN_SERVICE_TYPE, + bandwidthProfileCir indicating value CIR, + bandwidthProfileEir indicating value EIR, + bandwidthProfileColorAware indicating value COLOR_AWARE, + bandwidthCouplingFlag indicating value true + ;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_POST_BV_03 + + Test objective + "Verify that the IUT creates a new Bandwidth profile and and a new ethernet service in one POST with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and BWP_SVS_IN_ONE_REQUEST + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity not having a Bandwidth profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestPost containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/globals", + headers containing + content_type indicating value "application/yang-data+xml", + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value ETH_SVC_TITLE, + desc indicating value ETH_SVC_DESC, + customer indicating value ETH_SVC_CUSTOMER, + ingress_egress_bandwidth_profile containing + bandwidth_profile_type indicating value BANDWIDTH_PROFILE_TYPE, + cir indicating value CIR, + eir indicating value EIR + ;;;;;;; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r201 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value ETH_SVC_TITLE, + desc indicating value ETH_SVC_DESC, + customer indicating value ETH_SVC_CUSTOMER + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_POST_BO_01 + + Test objective + "Verify that the IUT replies with an error when the request is malformed." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT and not BWP_SVS_IN_ONE_REQUEST + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestPost containing + uri indicating value "/restconf/data/etht-svc/globals", // Malformed URI + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value ETH_SVC_TITLE, + desc indicating value ETH_SVC_DESC, + customer indicating value ETH_SVC_CUSTOMER + ;;;;; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r400 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_PUT_BV_01 + + Test objective + "Verify that the IUT updates an existing Bandwidth profile with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity having a Bandwidth profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestPut containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/globals", + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + globals containing + namedBandwidthProfile containing + bandwidth_profile_name indicating value BANDWIDTH_PROFILE_NAME, + CIR indicating value CIR_VALUE, + CBS indicating value CBS_VALUE, + EIR indicating value EIR_VALUE, + EBS indicating value EBS_VALUE, + color_aware indicating value COLOR_AWARE, + coupling_flag indicating value COUPLING_FLAG + ;;;;; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r201 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + globals containing + namedBandwidthProfile containing + bandwidth_profile_name indicating value BANDWIDTH_PROFILE_NAME, + CIR indicating value CIR_VALUE, + CBS indicating value CBS_VALUE, + EIR indicating value EIR_VALUE, + EBS indicating value EBS_VALUE, + color_aware indicating value COLOR_AWARE, + coupling_flag indicating value COUPLING_FLAG + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_PUT_BV_02 + + Test objective + "Verify that the IUT updates an existing ethernet service." + + Reference + "ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity having a Bandwidth profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestPut containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/globals", + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value ETH_SVC_TITLE, + desc indicating value ETH_SVC_DESC, + customer indicating value ETH_SVC_CUSTOMER + ;;;;; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r201 containing + headers containing + content_type indicating value "application/yang-data+xml";, + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value ETHT_SVC_NAME, + title indicating value ETH_SVC_TITLE, + desc indicating value ETH_SVC_DESC, + customer indicating value ETH_SVC_CUSTOMER + ;;;;; + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_PUT_BO_01 + + Test objective + "Verify that the IUT replies with an error code when updating an unknown Bandwidth profile with mandatory mWT GC 024 data elements subset." + + Reference + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestPut containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/globals", + body containing + eth_svc containing + ethtSvcInstanceList containing + ethtSvcInstance containing + name_ indicating value UNKNOWN_ETHT_SVC_NAME, + title indicating value ETH_SVC_TITLE, + desc indicating value ETH_SVC_DESC, + customer indicating value ETH_SVC_CUSTOMER + ;;;;; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r404 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_DELETE_BV_01 + + Test objective + "Verify that the IUT deletes an existing ethernet service." + + Reference + "ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity having a Bandwidth profile created and + the IUT entity having a service profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestDelete containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/etht-svc-instances={ETHT_SVC_NAME}", + headers containing + content_type indicating value "application/yang-data+xml";; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r204 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_DELETE_BV_02 + + Test objective + "Verify that the IUT deletes an existing bandwidth profile." + + Reference + "ETSI GS mWT 024 Clause 4.2.2.1 Ethernet Ethernet Services", + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies and + the IUT entity having a Bandwidth profile created + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestDelete containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/globals/bandwitdh_profile_name={BANDWIDTH_PROFILE_NAME}", + headers containing + content_type indicating value "application/yang-data+xml";; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r204 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_PT_ETH_SVC_DELETE_BO_01 + + Test objective + "Verify that the IUT replies with an error code when the request is malformed." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestDelete containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/instances={ETHT_SVC_NAME}"; // Malformed URI + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r400 + to the TEST_SYSTEM entity + } + } + } + + Test Purpose { + TP Id TP_mWT_PNC_ETH_PT_SVC_DELETE_BO_02 + + Test objective + "Verify that the IUT replies with an error code when it is requested to delete an unknown Bandwidth profile." + + Reference + "ETSI GS mWT 024 Clause 4.3.3", + "ETSI GS mWT 024 Clause 5.3.2 Exception Handling", + "ETSI GS mWT 024 Annex A.2.4", + "RFC 6991 Common YANG Data Types", + "RFC 8776 Common YANG Data Types for Traffic Engineering", + "draft-ietf-ccamp-client-signal-yang-05 A YANG Data Model for Transport Network Client Signals" + + Config Id Config_mWT_2 + + PICS Selection IUT_PNC and RESTCONF and SEC_TLS and ABSTRACT_PT + + Initial conditions with { + the IUT entity is idle and + the IUT entity having discovered several MW ethernet networks topologies + } + + Expected behaviour + ensure that { + when { + the IUT entity receives a vRequestDelete containing + uri indicating value "/restconf/data/ietf-eth-tran-service:etht-svc/etht-svc-instances={UNKNOWN_ETHT_SVC_NAME}"; + from the TEST_SYSTEM entity + } then { + the IUT entity sends a r404 + to the TEST_SYSTEM entity + } + } + } + + } // End of Group "EthernetService" + + } // End of Group "PartiallyTransparent" + + } // End of Group "pnc" + +} // End of Package AtsMDSC \ No newline at end of file diff --git a/test-purposes/Reference.txt b/test-purposes/Reference.txt new file mode 100644 index 0000000000000000000000000000000000000000..18479190b672a7e59165747f4387358f6bd6def8 --- /dev/null +++ b/test-purposes/Reference.txt @@ -0,0 +1,28 @@ + +==========+=========================+===================================+ + | Prefix | YANG Module | References | + +==========+=========================+===================================+ + | yang | ietf-[yang|inet]-types | [RFC6991] | + +----------+-------------------------+-----------------------------------+ + | mwt | ietf-microwave-topology | draft-ietf-ccamp-mw-topo-yang | + +----------+-------------------------+-----------------------------------+ + | nw | ietf-network | [RFC8345] | + +----------+-------------------------+-----------------------------------+ + | nt | ietf-network-topology | [RFC8345] | + +----------+-------------------------+-----------------------------------+ + | mw-types | ietf-microwave-types | [RFC8561] | + +----------+-------------------------+-----------------------------------+ + | te | ietf-te-type | [RFC8776] | + +----------+-------------------------+-----------------------------------+ + | tet | ietf-te-topology | [RFC8795] | + +----------+-------------------------+-----------------------------------+ + |etht-types| ietf-eth-tran-types |draft-ietf-ccamp-client-signal-yang-05| + +----------+-------------------------+-----------------------------------+ + | clnt-svc |ietf-trans-client-service|draft-ietf-ccamp-client-signal-yang-05| + +----------+-------------------------+-----------------------------------+ + | etht-svc | ietf-eth-tran-service |draft-ietf-ccamp-client-signal-yang-05| + +----------+-------------------------+-----------------------------------+ + | | geo-json | [RFC7946] | + +----------+-------------------------+-----------------------------------+ + + + \ No newline at end of file diff --git a/test-purposes/ietf_eth_tran_service.tplan2 b/test-purposes/ietf_eth_tran_service.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..bcb46ca8aefb5652b11b629232a8e066acb1961a --- /dev/null +++ b/test-purposes/ietf_eth_tran_service.tplan2 @@ -0,0 +1,37 @@ +// draft_ietf_ccamp_client_signal_yang_05 +Package ietf_eth_tran_types { + + import all from ietf_eth_tran_service; + import all from mWT_Common; + + + Data { + + type Globals with + named_bandwidth_profiles of type NamedBandwidthProfiles + ; + + type NamedBandwidthProfile with + bandwidth_profile_name of type string, + bandwidth_profile_type of type BandwidthProfileType + ; + type NamedBandwidthProfiles; // List of NamedBandwidthProfile + + type EthtSvcInstance with + etht_svc_name of type string, + etht_svc_title of type string, + etht_svc_descr of type string, + etht_svc_customer of type string, + etht_svc_type of type service_type, + etht_svc_lifecycle of type lifecycle_status + ; + type EthtSvcInstances; // List of EthtSvcInstance + + type EthtSvc with + globals of type Globals, + etht_svc_instances of type EthtSvcInstances + ; + + } + +} // End of Package ietf_eth_tran_types \ No newline at end of file diff --git a/test-purposes/ietf_eth_tran_types.tplan2 b/test-purposes/ietf_eth_tran_types.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..210e6b4db8ef10a6060af41fa3235b31f798e040 --- /dev/null +++ b/test-purposes/ietf_eth_tran_types.tplan2 @@ -0,0 +1,26 @@ +// draft-ietf-ccamp-client-signal-yang-05 +Package ietf_eth_tran_service { + + import all from mWT_Common; + + Data { + + type vlanid; + type service_type; + type performance; + type access_role; + type eth_tag_type; + type eth_tag_classify; + type vid_range_type; + type lifecycle_status; + + type BandwidthProfileType with + CIR of type uint64, + CBS of type uint64, + EIR of type uint64, + BS of type uint64, + color_aware of type boolean, + coupling_flag of type boolean + ; + } +} // End of Package ietf_eth_tran_service \ No newline at end of file diff --git a/test-purposes/ietf_geo_json.tplan2 b/test-purposes/ietf_geo_json.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..b71da5ef5852147f796ea92841a1bad351ff96a3 --- /dev/null +++ b/test-purposes/ietf_geo_json.tplan2 @@ -0,0 +1,9 @@ +// RFC 8525 +Package ietf_geop_json { + + Data { + type GeographicCoordinateDegree; + + } + +} \ No newline at end of file diff --git a/test-purposes/ietf_inet_types.tplan2 b/test-purposes/ietf_inet_types.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..c6504856a8d414b5f1c7622c372a7bbb72523edf --- /dev/null +++ b/test-purposes/ietf_inet_types.tplan2 @@ -0,0 +1,25 @@ +// RFC xxx +Package ietf_inet_types { + + Data { + + // RFC xxx + type ip_version; // InetVersion (INET_ADDRESS_MIB) + type dscp; // Dscp (DIFFSERV_DSCP_TC) + type ipv6_flow_label; // IPv6FlowLabel (IPV6_FLOW_LABEL_MIB) + type port_number; // InetPortNumber (INET_ADDRESS_MIB) + type ip_address; + type ipv4_address; + type ipv6_address; + type ip_address_no_zone; + type ipv4_address_no_zone; + type ipv6_address_no_zone; + type ip_prefix; + type ipv4_prefix; + type ipv6_prefix; + type domain_name; + type host; + type uri; + } + +} \ No newline at end of file diff --git a/test-purposes/ietf_microwave_topology.tplan2 b/test-purposes/ietf_microwave_topology.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..53f65aba12869bbc8c859926ccfc2c4130516c9d --- /dev/null +++ b/test-purposes/ietf_microwave_topology.tplan2 @@ -0,0 +1,9 @@ +// RFC 8561 +Package ietf_microwave_topology { // mwt + + Data { + type Mw_Topology; + type MwTp; + } + +} \ No newline at end of file diff --git a/test-purposes/ietf_networks_topology.tplan2 b/test-purposes/ietf_networks_topology.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..4307ef5c817b98ae9a519af719bca5b990a3f0d4 --- /dev/null +++ b/test-purposes/ietf_networks_topology.tplan2 @@ -0,0 +1,60 @@ +// RFC 8345 +Package ietf_networks_topology { // nt + + import all from ietf_yang_types; + import all from ietf_inet_types; + import all from ietf_te_types; + import all from ietf_yang_library; + + import all from ietf_microwave_topology; + import all from ietf_te_topology; + + Data { + + // RFC 8345 Clause 4.1. Base Network Model + type Networks with // ietf-network + networksList of type NetworksList + ; + + type NetworksList; // FIXME Collection of Network + + type Network with + network_id of type uri, + network_types of type NetworkTypes, + supporting_network of type SupportingNetworkList + ; + + type NetworkTypes with + optional te_topology of type Te_Topology, + optional mw_topology of type Mw_Topology + ; + + type NodesList; // FIXME Collection of Node + + type Node with + node_id of type uri, + supported_node of type SupportingNetworkList + ; + + type Node with + node_id of type uri, + termination_point of type TerminationPointList + ; + + type SupportingNetworkList; // FIXME Collection of SupportingNetwork + + type SupportingNetwork with + network_ref of type uri // /nw:networks/nw:network/nw:network-id + ; + + type SupportingNodeList; // FIXME Collection of SupportingNode + + type SupportingNode with + network_ref of type uri, // /networks/network/network-id + node_id of type uri // /networks/network/node/node-id + ; + + // String declaration + string "/restconf/data/ietf-network/networks"; + } +} \ No newline at end of file diff --git a/test-purposes/ietf_te_topology.tplan2 b/test-purposes/ietf_te_topology.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..9ed3db3b81553c4d09627b5e2922d381e4fa9fd1 --- /dev/null +++ b/test-purposes/ietf_te_topology.tplan2 @@ -0,0 +1,48 @@ +// RFC 8795 +Package ietf_te_topology { // tet + + import all from ietf_yang_types; + import all from ietf_inet_types; + import all from ietf_te_types; + import all from ietf_yang_library; + + import all from ietf_microwave_topology; + + import all from ietf_geop_json; + + Data { + type TerminationPointList; // FIXME Collection of TerminationPoint + + type TerminationPoint with + tp_id of type uri, // /nw:networks/nw:network/nw:network-id + supporting_termination_point of type SupportingTerminationPointList, + te_tp_id of type TeTpId, //te-types:te-tp-id + te of type Te // + ; + + type SupportingTerminationPointList; // FIXME Collection of SupportingTermination + + type SupportingTerminationPoint with + network_ref of type uri, + node_ref of type uri, + tp_ref of type uri + ; + + type TeTpId; + + type Te with + name_ of type string, + optional geolocation of type Geolocation, + mw_tp of type MwTp // Cyclic import with ietf_microwave_topology + ; + + type Geolocation with + optional altitude of type int64, + optional latitude of type GeographicCoordinateDegree, + optional longitude of type GeographicCoordinateDegree + ; + + type Te_Topology; + } + +} \ No newline at end of file diff --git a/test-purposes/ietf_te_types.tplan2 b/test-purposes/ietf_te_types.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..36feea4f8019298c95e9dc2e93b51fc50e278a3c --- /dev/null +++ b/test-purposes/ietf_te_types.tplan2 @@ -0,0 +1,12 @@ +// RFC 8776 +Package ietf_te_types { // te + + import all from ietf_yang_library; + + Data { + type te_common_status; + type te_admin_status; + + } + +} \ No newline at end of file diff --git a/test-purposes/ietf_yang_data_base.tplan2 b/test-purposes/ietf_yang_data_base.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..a22542b3b426f91074e04476c2b8368647c81114 --- /dev/null +++ b/test-purposes/ietf_yang_data_base.tplan2 @@ -0,0 +1,27 @@ +// RFC 6991 +Package ietf_yang_types { + + Data { + + // RFC 6991 Clause 2 Overview + type Counter32; // (SNMPv2-SMI) + type ZeroBasedCounter32; // (RMON2-MIB) + type Counter64; //(SNMPv2-SMI) + type ZeroBasedCounter64; // (HCNUM-TC) + type Gauge32; // (SNMPv2-SMI) + type CounterBasedGauge64; // (HCNUM-TC) + type OID; + type OID128; + type YangIdentifier; + type DateAndTime; + type TimeTicks; // (SNMPv2-SMI) + type TimeStamp; // (SNMPv2-TC) + type PhysAddress; // (SNMPv2-TC) + type MacAddress; // (SNMPv2-TC) + type XPath1_0; + type HexString; + type UUID; + type DottedQuad; + } + +} \ No newline at end of file diff --git a/test-purposes/ietf_yang_library.tplan2 b/test-purposes/ietf_yang_library.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..b1a6227df1bd38a3a86ff831c1dbd0ce358734a8 --- /dev/null +++ b/test-purposes/ietf_yang_library.tplan2 @@ -0,0 +1,41 @@ +// RFC 8525 +Package ietf_yang_library { + + import all from ietf_yang_types; + import all from ietf_inet_types; + + Data { + type string; + type json; + type integer; + type int64; + type boolean; + + type ModulesState with + name_ of type string, + optional modules of type ModuleList, + optional import_only_module of type ModuleList, + content_id of type string + ; + + type ModuleList with + name_ of type string, + revision of type string, + namespace of type uri, + optional location of type uri, + optional submodule of type Submodule + ; + + type Submodule with + name_ of type string, + revision of type string, + optional location of type uri + ; + + // String declaration + string "application/yang-data+xml"; + + string "/restconf/data/ietf-yang-library:modules-state"; + } + +} \ No newline at end of file diff --git a/test-purposes/mWT_Common.tplan2 b/test-purposes/mWT_Common.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..62934e8f7192a9836f9d32b86485c05f98dac222 --- /dev/null +++ b/test-purposes/mWT_Common.tplan2 @@ -0,0 +1,147 @@ +Package mWT_Common { + + import all from ietf_yang_library; + import all from ietf_networks_topology; + + Domain { + pics: + - IUT_MDSC // ETSI GS mWT 0029-1 Table A.1.1 + - IUT_PNC // ETSI GS mWT 0029-1 Table A.1.1 + - RESTCONF // ETSI GS mWT 0029-1 Table A.2.1 + - ABSTRACT_BB // ETSI GS mWT 0029-1 Table A.3.1 + - ABSTRACT_PT // ETSI GS mWT 0029-1 Table A.3.2 + - MW_TOPO // ETSI GS mWT 0029-1 Table A.4.1 + - ETH_TOPO // ETSI GS mWT 0029-1 Table A.4.2 + - BWP_SVS_IN_ONE_REQUEST // + - SEC_TLS // ETSI GS mWT 0029-1 Table Table A.6 + ; + + entities: + - IUT // IUT entity + - TEST_SYSTEM // Test System entity + ; + + events: + - idle // The IUT is ready to serve request + - discovered // The IUT has discovered available network topologies + - send + - sends + - receives + - having + - created + ; + + } + + Data { + type string; + type json; + type integer; + type uint64; + type boolean; + + // String declaration + string "GET"; + string "application/yang-data+xml"; + string "application/yang-data+xml"; + // URIs declarations + string "/"; + // Integer declaration + integer 1; + + type HttpMessage with + optional request of type HttpRequest, + optional response of type HttpResponse + ; + + type HttpRequest with + method of type string, + uri of type string, + version_major of type integer, + version_minor of type integer, + headers of type HttpHeaders, + optional body of type json + ; + + type HttpResponse with + version_major of type integer, + version_minor of type integer, + statuscode of type integer, + statustext of type string, + headers of type HttpHeaders, + optional body of type body_restconf, + optional tls of type boolean, + optional mutual_tls of type boolean + ; + + type HttpHeaders with + content_type of type string, + accept of type string, + authorization of type string + // TODO Add missing ones + ; + + type body_restconf with + optional module_set of type ModulesState, + optional networks of type Networks + ; + + HttpHeaders vHeadersGet containing + content_type set to "application/yang-data+xml", + accept set to "application/yang-data+xml", + authorization set to VALID_TOKEN + ; + + HttpRequest vRequestGet containing + method set to "GET", + uri set to "/", + version_major set to 1, + version_minor set to 1, + headers set to vHeadersGet + ; + + // Pixits + string VALID_TOKEN; + string NETWORK_ID; + string UNKNOWN_NETWORK_ID; + string NODE_ID; + string UNKNOWN_NODE_ID; + string BANDWIDTH_PROFILE_NAME; + string ETHT_SVC_NAME; + string UNKNOWN_ETHT_SVC_NAME; + string NETWORK_TOPO; + string BANDWIDTH_PROFILE_TYPE; + uint64 CIR_VALUE; + uint64 CBS_VALUE; + uint64 EIR_VALUE; + uint64 EBS_VALUE; + boolean COLOR_AWARE; + boolean COUPLING_FLAG; + string ETH_SVC_TITLE; + string ETH_SVC_DESC; + string ETH_SVC_CUSTOMER; + + } + + Configuration { + + Interface Type HttpPort accepts HttpMessage; + + Component Type MDSCComponent with gate httpPort of type HttpPort; + Component Type PNCComponent with gate httpPort of type HttpPort; + + Test Configuration Config_mWT_1 containing + Tester component TEST_SYSTEM of type PNCComponent + SUT component IUT of type MDSCComponent + connection between TEST_SYSTEM.httpPort and IUT.httpPort + ; + + Test Configuration Config_mWT_2 containing + Tester component TEST_SYSTEM of type MDSCComponent + SUT component IUT of type PNCComponent + connection between TEST_SYSTEM.httpPort and IUT.httpPort + ; + + } + +} // End of Package mWT_Common \ No newline at end of file