Create shared postman collections 21/137221/5
authorJvD_Ericsson <jeff.van.dam@est.tech>
Thu, 15 Feb 2024 11:34:36 +0000 (11:34 +0000)
committerJeff van Dam <jeff.van.dam@est.tech>
Fri, 23 Feb 2024 13:04:49 +0000 (13:04 +0000)
Issue-ID: CPS-2054
Signed-off-by: JvD_Ericsson <jeff.van.dam@est.tech>
Change-Id: I0a7e941bc4accfe00edaf7157df5a8ebabadb187

postman-collections/CPS Environment.postman_environment.json [new file with mode: 0644]
postman-collections/CPS-CORE.postman_collection.json [new file with mode: 0644]
postman-collections/DMI Stub.postman_collection.json [new file with mode: 0644]
postman-collections/Data Operational Performance Test.postman_collection.json [new file with mode: 0644]
postman-collections/NCMP Register CmHandle and Query.postman_collection.json [new file with mode: 0644]
postman-collections/README.md [new file with mode: 0644]
postman-collections/bookstore-types.yang [new file with mode: 0644]
postman-collections/bookstore.yang [new file with mode: 0644]

diff --git a/postman-collections/CPS Environment.postman_environment.json b/postman-collections/CPS Environment.postman_environment.json
new file mode 100644 (file)
index 0000000..84dcb64
--- /dev/null
@@ -0,0 +1,45 @@
+{
+    "id": "e8e90dd2-20be-49be-813f-07db44c6a4c2",
+    "name": "CPS Environment",
+    "values": [
+        {
+            "key": "CPS_HOST",
+            "value": "localhost",
+            "type": "default",
+            "enabled": true
+        },
+        {
+            "key": "CPS_PORT",
+            "value": "8883",
+            "type": "default",
+            "enabled": true
+        },
+        {
+            "key": "DMI_HOST",
+            "value": "localhost",
+            "type": "default",
+            "enabled": true
+        },
+        {
+            "key": "DMI_PORT",
+            "value": "8784",
+            "type": "default",
+            "enabled": true
+        },
+        {
+            "key": "SDNC_HOST",
+            "value": "localhost",
+            "type": "default",
+            "enabled": true
+        },
+        {
+            "key": "SDNC_PORT",
+            "value": "8282",
+            "type": "default",
+            "enabled": true
+        }
+    ],
+    "_postman_variable_scope": "environment",
+    "_postman_exported_at": "2024-02-23T13:00:33.537Z",
+    "_postman_exported_using": "Postman/10.23.4"
+}
\ No newline at end of file
diff --git a/postman-collections/CPS-CORE.postman_collection.json b/postman-collections/CPS-CORE.postman_collection.json
new file mode 100644 (file)
index 0000000..24717bc
--- /dev/null
@@ -0,0 +1,781 @@
+{
+    "info": {
+        "_postman_id": "e86df76f-6b33-4648-ba66-ea9d3129c052",
+        "name": "CPS-CORE",
+        "description": "A collection of the endpoints in CPS-CORE. This is not an exhaustive collection but captures the main functionality.\n\nTo perform this functionality execute the API calls in order to create a dataspace, schema set (file is provided), anchor, and data node. Then GET the nodes to retrieve the information. The APIs in CPS-ADMIN can be used after initial POST requests.\n\nbookstore-model.yang can be found at cps/postman-collections/bookstore-model.yang",
+        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
+        "_exporter_id": "17907116"
+    },
+    "item": [
+        {
+            "name": "CPS-ADMIN",
+            "item": [
+                {
+                    "name": "Get all dataspaces",
+                    "request": {
+                        "method": "GET",
+                        "header": [
+                            {
+                                "key": "Accept",
+                                "value": "application/json"
+                            }
+                        ],
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/admin/dataspaces",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "cps",
+                                "api",
+                                "v2",
+                                "admin",
+                                "dataspaces"
+                            ]
+                        },
+                        "description": "Read all dataspaces"
+                    },
+                    "response": []
+                },
+                {
+                    "name": "Get a dataspace",
+                    "request": {
+                        "method": "GET",
+                        "header": [
+                            {
+                                "key": "Accept",
+                                "value": "application/json"
+                            }
+                        ],
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/admin/dataspaces/my-store",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "cps",
+                                "api",
+                                "v2",
+                                "admin",
+                                "dataspaces",
+                                "my-store"
+                            ]
+                        },
+                        "description": "Read a dataspace given a dataspace name"
+                    },
+                    "response": []
+                },
+                {
+                    "name": "Get anchors",
+                    "request": {
+                        "method": "GET",
+                        "header": [
+                            {
+                                "key": "Accept",
+                                "value": "application/json"
+                            }
+                        ],
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "cps",
+                                "api",
+                                "v2",
+                                "dataspaces",
+                                "my-store",
+                                "anchors"
+                            ]
+                        },
+                        "description": "Read all anchors, given a dataspace"
+                    },
+                    "response": []
+                },
+                {
+                    "name": "Get an anchor",
+                    "request": {
+                        "method": "GET",
+                        "header": [
+                            {
+                                "key": "Accept",
+                                "value": "application/json"
+                            }
+                        ],
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "cps",
+                                "api",
+                                "v2",
+                                "dataspaces",
+                                "my-store",
+                                "anchors",
+                                "bookstore-anchor"
+                            ]
+                        },
+                        "description": "Read all anchors, given a dataspace"
+                    },
+                    "response": []
+                },
+                {
+                    "name": "Get schema sets",
+                    "request": {
+                        "method": "GET",
+                        "header": [
+                            {
+                                "key": "Accept",
+                                "value": "application/json"
+                            }
+                        ],
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/schema-sets",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "cps",
+                                "api",
+                                "v2",
+                                "dataspaces",
+                                "my-store",
+                                "schema-sets"
+                            ]
+                        },
+                        "description": "Read all schema sets, given a dataspace"
+                    },
+                    "response": []
+                },
+                {
+                    "name": "Get a schema set",
+                    "request": {
+                        "method": "GET",
+                        "header": [
+                            {
+                                "key": "Accept",
+                                "value": "application/json"
+                            }
+                        ],
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/schema-sets/stores-module",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "cps",
+                                "api",
+                                "v2",
+                                "dataspaces",
+                                "my-store",
+                                "schema-sets",
+                                "stores-module"
+                            ]
+                        },
+                        "description": "Read a schema set given a schema set name and a dataspace"
+                    },
+                    "response": []
+                }
+            ],
+            "description": "Some endpoints of CPS-ADMIN not mentioed in the CPS-CORE folder"
+        },
+        {
+            "name": "Create Dataspace",
+            "request": {
+                "method": "POST",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces?dataspace-name=my-store",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces"
+                    ],
+                    "query": [
+                        {
+                            "key": "dataspace-name",
+                            "value": "my-store"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Create Schema Set",
+            "request": {
+                "method": "POST",
+                "header": [
+                    {
+                        "key": "Content-Type",
+                        "value": "multipart/form-data",
+                        "type": "text",
+                        "disabled": true
+                    }
+                ],
+                "body": {
+                    "mode": "formdata",
+                    "formdata": [
+                        {
+                            "key": "file",
+                            "type": "file",
+                            "src": "cps/postman-collections/bookstore.zip"
+                        }
+                    ]
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/schema-sets?schema-set-name=stores-module",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "schema-sets"
+                    ],
+                    "query": [
+                        {
+                            "key": "schema-set-name",
+                            "value": "stores-module"
+                        }
+                    ]
+                },
+                "description": "Make sure in the body there is form data. key = file and value will be the zip/yang file."
+            },
+            "response": []
+        },
+        {
+            "name": "Create Anchor",
+            "request": {
+                "method": "POST",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors?schema-set-name=stores-module&anchor-name=bookstore-anchor",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors"
+                    ],
+                    "query": [
+                        {
+                            "key": "schema-set-name",
+                            "value": "stores-module"
+                        },
+                        {
+                            "key": "anchor-name",
+                            "value": "bookstore-anchor"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Create DataNodes",
+            "request": {
+                "method": "POST",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{\n    \"bookstore-address\": [\n        {\n            \"bookstore-name\": \"Easons\",\n            \"address\": \"Dublin,Ireland\",\n            \"postal-code\": \"D02HA21\"\n        }\n    ],\n    \"bookstore\": {\n        \"bookstore-name\": \"Easons\",\n        \"premises\": {\n            \"addresses\": [\n                {\n                    \"house-number\": 2,\n                    \"street\": \"Main Street\",\n                    \"town\": \"Maynooth\",\n                    \"county\": \"Kildare\"\n                },\n                {\n                    \"house-number\": 24,\n                    \"street\": \"Grafton Street\",\n                    \"town\": \"Dublin\",\n                    \"county\": \"Dublin\"\n                }\n            ]\n        },\n        \"categories\": [\n            {\n                \"code\": 1,\n                \"name\": \"Children\",\n                \"books\": [\n                    {\n                        \"title\": \"Matilda\",\n                        \"lang\": \"English\",\n                        \"authors\": [\n                            \"Roald Dahl\"\n                        ],\n                        \"editions\": [\n                            1988,\n                            2000\n                        ],\n                        \"price\": 20\n                    },\n                    {\n                        \"title\": \"The Gruffalo\",\n                        \"lang\": \"English\",\n                        \"authors\": [\n                            \"Julia Donaldson\"\n                        ],\n                        \"editions\": [\n                            1999\n                        ],\n                        \"price\": 15\n                    }\n                ]\n            },\n            {\n                \"code\": 2,\n                \"name\": \"Thriller\",\n                \"books\": [\n                    {\n                        \"title\": \"Annihilation\",\n                        \"lang\": \"English\",\n                        \"authors\": [\n                            \"Jeff VanderMeer\"\n                        ],\n                        \"editions\": [\n                            2014\n                        ],\n                        \"price\": 15\n                    }\n                ]\n            },\n            {\n                \"code\": 3,\n                \"name\": \"Comedy\",\n                \"books\": [\n                    {\n                        \"title\": \"Good Omens\",\n                        \"lang\": \"English\",\n                        \"authors\": [\n                            \"Neil Gaiman\",\n                            \"Terry Pratchett\"\n                        ],\n                        \"editions\": [\n                            2006\n                        ],\n                        \"price\": 13\n                    },\n                    {\n                        \"title\": \"The Colour of Magic\",\n                        \"lang\": \"English\",\n                        \"authors\": [\n                            \"Terry Pratchett\"\n                        ],\n                        \"editions\": [\n                            1983\n                        ],\n                        \"price\": 12\n                    },\n                    {\n                        \"title\": \"The Light Fantastic\",\n                        \"lang\": \"English\",\n                        \"authors\": [\n                            \"Terry Pratchett\"\n                        ],\n                        \"editions\": [\n                            1986\n                        ],\n                        \"price\": 14\n                    },\n                    {\n                        \"title\": \"A Book with No Language\",\n                        \"lang\": \"\",\n                        \"authors\": [\n                            \"Joe Bloggs\"\n                        ],\n                        \"editions\": [\n                            2023\n                        ],\n                        \"price\": 20\n                    }\n                ]\n            },\n            {\n                \"code\": 4,\n                \"name\": \"Computing\",\n                \"books\": [\n                    {\n                        \"title\": \"Debian GNU/Linux\",\n                        \"lang\": \"German\",\n                        \"authors\": [\n                            \"Peter H. Ganten\",\n                            \"Wulf Alex\"\n                        ],\n                        \"editions\": [\n                            2007,\n                            2013,\n                            2021\n                        ],\n                        \"price\": 39\n                    },\n                    {\n                        \"title\": \"Logarithm tables\",\n                        \"lang\": \"N/A\",\n                        \"authors\": [\n                            \"Joe Bloggs\"\n                        ],\n                        \"editions\": [\n                            2009\n                        ],\n                        \"price\": 11\n                    }\n                ]\n            },\n            {\n                \"code\": 5,\n                \"name\": \"Discount books\",\n                \"books\": [\n                    {\n                        \"title\": \"Book 1\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 1\n                    },\n                    {\n                        \"title\": \"Book 2\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 2\n                    },\n                    {\n                        \"title\": \"Book 3\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 3\n                    },\n                    {\n                        \"title\": \"Book 4\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 4\n                    },\n                    {\n                        \"title\": \"Book 5\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 5\n                    },\n                    {\n                        \"title\": \"Book 6\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 6\n                    },\n                    {\n                        \"title\": \"Book 7\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 7\n                    },\n                    {\n                        \"title\": \"Book 8\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 8\n                    },\n                    {\n                        \"title\": \"Book 9\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 9\n                    },\n                    {\n                        \"title\": \"Book 10\",\n                        \"lang\": \"blah\",\n                        \"authors\": [],\n                        \"editions\": [],\n                        \"price\": 10\n                    }\n                ]\n            }\n        ]\n    }\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/nodes",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "nodes"
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Get Root Node All Descendants",
+            "request": {
+                "method": "GET",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/node?xpath=/&descendants=all",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "node"
+                    ],
+                    "query": [
+                        {
+                            "key": "xpath",
+                            "value": "/"
+                        },
+                        {
+                            "key": "descendants",
+                            "value": "all"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Get Node Staff No Descendants",
+            "request": {
+                "method": "GET",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/node?xpath=/bookstore/staff&descendants=none",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "node"
+                    ],
+                    "query": [
+                        {
+                            "key": "xpath",
+                            "value": "/bookstore/staff"
+                        },
+                        {
+                            "key": "descendants",
+                            "value": "none"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Get Node Inventory All Descendants",
+            "request": {
+                "method": "GET",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/node?xpath=/bookstore/inventory&descendants=all",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "node"
+                    ],
+                    "query": [
+                        {
+                            "key": "xpath",
+                            "value": "/bookstore/inventory"
+                        },
+                        {
+                            "key": "descendants",
+                            "value": "all"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Get Node Inventory Categories Direct Descendants",
+            "request": {
+                "method": "GET",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/node?xpath=/bookstore/inventory/categories[@code='2']&descendants=direct",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "node"
+                    ],
+                    "query": [
+                        {
+                            "key": "xpath",
+                            "value": "/bookstore/inventory/categories[@code='2']"
+                        },
+                        {
+                            "key": "descendants",
+                            "value": "direct"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Query Path Leaf Condition All Descendants",
+            "request": {
+                "method": "GET",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/nodes/query?cps-path=/bookstore/inventory/categories[@numberOfBooks=1]&descendants=-1",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "nodes",
+                        "query"
+                    ],
+                    "query": [
+                        {
+                            "key": "cps-path",
+                            "value": "/bookstore/inventory/categories[@numberOfBooks=1]"
+                        },
+                        {
+                            "key": "descendants",
+                            "value": "-1"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Query Path Ancestor No Descendants",
+            "request": {
+                "method": "GET",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/nodes/query?cps-path=//categories[@code=1]/ancestor::inventory&descendants=0",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "nodes",
+                        "query"
+                    ],
+                    "query": [
+                        {
+                            "key": "cps-path",
+                            "value": "//categories[@code=1]/ancestor::inventory"
+                        },
+                        {
+                            "key": "descendants",
+                            "value": "0"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Patch Nodes",
+            "request": {
+                "method": "PATCH",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{\r\n    \"staff\": {\r\n        \"manager\": \"Jane Doe\",\r\n        \"members\": [\r\n            {\"name\": \"Some Guy\"},\r\n            {\"name\": \"Another Person\"}\r\n        ]\r\n    }\r\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/nodes?xpath=/bookstore",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "nodes"
+                    ],
+                    "query": [
+                        {
+                            "key": "xpath",
+                            "value": "/bookstore"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Get Node Staff Direct Descendants",
+            "request": {
+                "method": "GET",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/node?xpath=/bookstore/staff&descendants=1",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "node"
+                    ],
+                    "query": [
+                        {
+                            "key": "xpath",
+                            "value": "/bookstore/staff"
+                        },
+                        {
+                            "key": "descendants",
+                            "value": "1"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Delete DataNodes",
+            "request": {
+                "method": "DELETE",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor/nodes?xpath=/",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor",
+                        "nodes"
+                    ],
+                    "query": [
+                        {
+                            "key": "xpath",
+                            "value": "/"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Delete Anchor",
+            "request": {
+                "method": "DELETE",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/anchors/bookstore-anchor",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "anchors",
+                        "bookstore-anchor"
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Delete Schema Set",
+            "request": {
+                "method": "DELETE",
+                "header": [
+                    {
+                        "key": "Content-Type",
+                        "value": "multipart/form-data",
+                        "type": "text",
+                        "disabled": true
+                    }
+                ],
+                "body": {
+                    "mode": "formdata",
+                    "formdata": [
+                        {
+                            "key": "file",
+                            "type": "file",
+                            "src": "/home/jeff/Downloads/bookstore-model.yang"
+                        }
+                    ]
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces/my-store/schema-sets/stores-module",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces",
+                        "my-store",
+                        "schema-sets",
+                        "stores-module"
+                    ]
+                },
+                "description": "Make sure in the body there is form data. key = file and value will be the zip/yang file."
+            },
+            "response": []
+        },
+        {
+            "name": "Delete Dataspace",
+            "request": {
+                "method": "DELETE",
+                "header": [],
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/cps/api/v2/dataspaces?dataspace-name=my-store",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "cps",
+                        "api",
+                        "v2",
+                        "dataspaces"
+                    ],
+                    "query": [
+                        {
+                            "key": "dataspace-name",
+                            "value": "my-store"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        }
+    ],
+    "auth": {
+        "type": "basic",
+        "basic": [
+            {
+                "key": "password",
+                "value": "cpsr0cks!",
+                "type": "string"
+            },
+            {
+                "key": "username",
+                "value": "cpsuser",
+                "type": "string"
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/postman-collections/DMI Stub.postman_collection.json b/postman-collections/DMI Stub.postman_collection.json
new file mode 100644 (file)
index 0000000..fe7250f
--- /dev/null
@@ -0,0 +1,161 @@
+{
+    "info": {
+        "_postman_id": "4baf7902-0f1e-49a9-9c6a-f68f412240af",
+        "name": "DMI Stub",
+        "description": "A collection of the DMI Stub endpoints.",
+        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
+        "_exporter_id": "17907116"
+    },
+    "item": [
+        {
+            "name": "Execute a data operation for group of cm handle ids by supplied operation details",
+            "request": {
+                "method": "POST",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{ \"operations\":\n    [\n        {\n            \"resourceIdentifier\": \"some resource identifier\",\n            \"datastore\": \"ncmp-datastore:passthrough-operational\",\n            \"options\": \"some option\",\n            \"operationId\": \"12\",\n            \"cmHandles\": [\n                {\n                    \"id\": \"cmHandle123\",\n                    \"cmHandleProperties\": {\n                        \"myProp\": \"some value\",\n                        \"otherProp\": \"other value\"\n                    }\n                },\n                {\n                    \"id\": \"cmHandle123\",\n                    \"cmHandleProperties\": {\n                        \"myProp\": \"some value\",\n                        \"otherProp\": \"other value\"\n                    }\n                }\n            ],\n            \"operation\": \"read\"\n        }\n    ]\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{DMI_HOST}}:{{DMI_PORT}}/dmi/v1/data?topic=ncmp-async-m2m&requestId=4753fc1f-7de2-449a-b306-a6204b5370b33",
+                    "protocol": "http",
+                    "host": [
+                        "{{DMI_HOST}}"
+                    ],
+                    "port": "{{DMI_PORT}}",
+                    "path": [
+                        "dmi",
+                        "v1",
+                        "data"
+                    ],
+                    "query": [
+                        {
+                            "key": "topic",
+                            "value": "ncmp-async-m2m"
+                        },
+                        {
+                            "key": "requestId",
+                            "value": "4753fc1f-7de2-449a-b306-a6204b5370b33"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Retrieve module resources for one or more modules",
+            "request": {
+                "method": "POST",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{DMI_HOST}}:{{DMI_PORT}}/dmi/v1/ch/cm-bookStore/moduleResources",
+                    "protocol": "http",
+                    "host": [
+                        "{{DMI_HOST}}"
+                    ],
+                    "port": "{{DMI_PORT}}",
+                    "path": [
+                        "dmi",
+                        "v1",
+                        "ch",
+                        "cm-bookStore",
+                        "moduleResources"
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Get all modules for given cm handle",
+            "protocolProfileBehavior": {
+                "disabledSystemHeaders": {
+                    "accept": true
+                }
+            },
+            "request": {
+                "method": "POST",
+                "header": [
+                    {
+                        "key": "Accept",
+                        "value": "application/json",
+                        "type": "text"
+                    }
+                ],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{DMI_HOST}}:{{DMI_PORT}}/dmi/v1/ch/cm-bookStore/modules",
+                    "protocol": "http",
+                    "host": [
+                        "{{DMI_HOST}}"
+                    ],
+                    "port": "{{DMI_PORT}}",
+                    "path": [
+                        "dmi",
+                        "v1",
+                        "ch",
+                        "cm-bookStore",
+                        "modules"
+                    ]
+                }
+            },
+            "response": []
+        }
+    ],
+    "auth": {
+        "type": "basic",
+        "basic": [
+            {
+                "key": "password",
+                "value": "cpsr0cks!",
+                "type": "string"
+            },
+            {
+                "key": "username",
+                "value": "cpsuser",
+                "type": "string"
+            }
+        ]
+    },
+    "event": [
+        {
+            "listen": "prerequest",
+            "script": {
+                "type": "text/javascript",
+                "exec": [
+                    ""
+                ]
+            }
+        },
+        {
+            "listen": "test",
+            "script": {
+                "type": "text/javascript",
+                "exec": [
+                    ""
+                ]
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/postman-collections/Data Operational Performance Test.postman_collection.json b/postman-collections/Data Operational Performance Test.postman_collection.json
new file mode 100644 (file)
index 0000000..668c541
--- /dev/null
@@ -0,0 +1,339 @@
+{
+    "info": {
+        "_postman_id": "23a07cf3-5e20-48d5-8af3-8aa65c6a681f",
+        "name": "Data Operational Performance Test",
+        "description": "A collection to test performance of registering and getting cmHandles (20000 is the default)",
+        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
+        "_exporter_id": "17907116"
+    },
+    "item": [
+        {
+            "name": "Register CM Handles",
+            "event": [
+                {
+                    "listen": "prerequest",
+                    "script": {
+                        "exec": [
+                            "const uuid = require(\"uuid\");",
+                            "",
+                            "const TOTAL_CMHANDLES = Number(pm.collectionVariables.get(\"TOTAL_CMHANDLES\"));",
+                            "",
+                            "var cmHandleIds = [];",
+                            "var createdCmHandles = []",
+                            "",
+                            "for (i = 0; i < TOTAL_CMHANDLES; i++) {",
+                            "    let cmHandleId = uuid.v4().replace(/-/g, \"\");",
+                            "    cmHandleIds.push(cmHandleId);",
+                            "    createdCmHandles.push({",
+                            "        \"cmHandle\": cmHandleId,",
+                            "        \"cmHandleProperties\": { \"neType\": \"RadioNode\" },",
+                            "            \"publicCmHandleProperties\": {",
+                            "                \"Book\": \"Harry Potter\",",
+                            "                \"Author\": \"JK Rowling\"",
+                            "            }",
+                            "    });",
+                            "}",
+                            "",
+                            "pm.collectionVariables.set(\"createdCmHandleIds\", JSON.stringify(cmHandleIds));",
+                            "pm.collectionVariables.set(\"createdCmHandles\", JSON.stringify(createdCmHandles));",
+                            "pm.collectionVariables.set(\"targetIds\", cmHandleIds);"
+                        ],
+                        "type": "text/javascript"
+                    }
+                },
+                {
+                    "listen": "test",
+                    "script": {
+                        "exec": [
+                            "pm.test(\"HTTP Status is 200\", function () {\r",
+                            "    pm.response.to.be.ok;\r",
+                            "});"
+                        ],
+                        "type": "text/javascript"
+                    }
+                }
+            ],
+            "request": {
+                "method": "POST",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{\r\n    \"dmiPlugin\": \"http://{{DMI_HOST}}:{{DMI_PORT}}\",\r\n    \"createdCmHandles\": {{createdCmHandles}}\r\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmpInventory/v1/ch",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "ncmpInventory",
+                        "v1",
+                        "ch"
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Get All Cm Handle IDs",
+            "event": [
+                {
+                    "listen": "test",
+                    "script": {
+                        "exec": [
+                            "// Convert the response body to a JSON object\r",
+                            "var responseBodyAsJsonArray  = JSON.parse(responseBody);\r",
+                            "\r",
+                            "var cmHandleInReadyState = [];\r",
+                            "var cmHandleInNonReadyState = [];\r",
+                            "\r",
+                            "function countCmHandleStateInReady() {\r",
+                            "for(var index = 0; index < responseBodyAsJsonArray.length; index++) {\r",
+                            "    if(typeof responseBodyAsJsonArray[index].state.cmHandleState !== 'undefined'\r",
+                            "    && responseBodyAsJsonArray[index].state.cmHandleState == 'READY') {\r",
+                            "        cmHandleInReadyState.push(responseBodyAsJsonArray[index].state.cmHandleState);\r",
+                            "    }else{\r",
+                            "         cmHandleInNonReadyState.push(responseBodyAsJsonArray[index].state.cmHandleState);\r",
+                            "    }\r",
+                            "}\r",
+                            "}\r",
+                            "\r",
+                            "countCmHandleStateInReady();\r",
+                            "\r",
+                            "pm.collectionVariables.set(\"numberOfCmHandlesInReadyState\", cmHandleInReadyState.length);\r",
+                            "pm.collectionVariables.set(\"numberOfCmHandlesInNonReadyState\", cmHandleInNonReadyState.length);\r",
+                            "\r",
+                            "pm.test(\"HTTP Status is 200 with valid JSON response\", function () {\r",
+                            "    pm.response.to.be.ok;\r",
+                            "    pm.response.to.be.withBody;\r",
+                            "    pm.response.to.be.json;\r",
+                            "});\r",
+                            "\r",
+                            "pm.test(\"20000 cm handles are in Ready state\", function () {\r",
+                            "    pm.expect(cmHandleInReadyState.length).to.eql(20000);\r",
+                            "});\r",
+                            ""
+                        ],
+                        "type": "text/javascript"
+                    }
+                }
+            ],
+            "request": {
+                "method": "POST",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{\r\n  \"conditions\": [\r\n    {\r\n      \"name\": \"hasAllModules\"\r\n    }\r\n  ]\r\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "ncmp",
+                        "v1",
+                        "ch",
+                        "searches"
+                    ],
+                    "query": [
+                        {
+                            "key": "resourceIdentifier",
+                            "value": "stores:bookstore",
+                            "disabled": true
+                        },
+                        {
+                            "key": "options",
+                            "value": "(fields=schemas/schema/location,depth=5)",
+                            "disabled": true
+                        }
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "ReadResourceDataForCmHandles",
+            "event": [
+                {
+                    "listen": "prerequest",
+                    "script": {
+                        "exec": [
+                            "const cmHandleIds = pm.collectionVariables.get(\"targetIds\"); \r",
+                            "\r",
+                            "var dataOperationRequest = []\r",
+                            "var targetIds = [];\r",
+                            "\r",
+                            "for (index = 0; index < cmHandleIds.length ; index++) {\r",
+                            "\r",
+                            "    targetIds.push(cmHandleIds[index]);\r",
+                            "    var dataOperationTargetIds = [];\r",
+                            "    if (targetIds.length == 5){\r",
+                            "        dataOperationTargetIds = targetIds;\r",
+                            "         dataOperationRequest.push({\r",
+                            "            \"operation\": \"read\",\r",
+                            "            \"operationId\": \"operational-\"+index,\r",
+                            "            \"datastore\": \"ncmp-datastore:passthrough-running\",\r",
+                            "            \"resourceIdentifier\": \"parent/child\",\r",
+                            "            \"targetIds\": dataOperationTargetIds\r",
+                            "        });\r",
+                            "\r",
+                            "        pm.collectionVariables.unset(\"dataOperationTargetIds\");\r",
+                            "        // pm.globals.unset(\"variable_key\");\r",
+                            "        // pm.environment.unset(\"variable_key\");\r",
+                            "        // pm.collectionVariables.set(\"variable_key\", \"variable_value\");\r",
+                            "        // pm.sendRequest(\"https://postman-echo.com/get\", function (err, response) {\r",
+                            "        //     console.log(response.json());\r",
+                            "        // });\r",
+                            "        // for (index = 0; index < dataOperationTargetIds.length ; index++) {\r",
+                            "        //         targetIds.pop(dataOperationTargetIds[index]);\r",
+                            "        // }\r",
+                            "    }\r",
+                            "}\r",
+                            "\r",
+                            " pm.collectionVariables.set(\"dataOperationRequest\", JSON.stringify(dataOperationRequest));"
+                        ],
+                        "type": "text/javascript"
+                    }
+                },
+                {
+                    "listen": "test",
+                    "script": {
+                        "exec": [
+                            "pm.test(\"HTTP Status is 200 with valid JSON response\", function () {\r",
+                            "    pm.response.to.be.ok;\r",
+                            "    pm.response.to.be.withBody;\r",
+                            "    pm.response.to.be.json;\r",
+                            "});"
+                        ],
+                        "type": "text/javascript"
+                    }
+                }
+            ],
+            "request": {
+                "method": "POST",
+                "header": [
+                    {
+                        "key": "topic",
+                        "value": "client-topic",
+                        "type": "default",
+                        "disabled": true
+                    }
+                ],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{\r\n    \"operations\":\r\n       {{dataOperationRequest}}\r\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/data?topic=my-client-topic",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "ncmp",
+                        "v1",
+                        "data"
+                    ],
+                    "query": [
+                        {
+                            "key": "topic",
+                            "value": "my-client-topic"
+                        }
+                    ]
+                }
+            },
+            "response": []
+        }
+    ],
+    "auth": {
+        "type": "basic",
+        "basic": [
+            {
+                "key": "password",
+                "value": "cpsr0cks!",
+                "type": "string"
+            },
+            {
+                "key": "username",
+                "value": "cpsuser",
+                "type": "string"
+            }
+        ]
+    },
+    "event": [
+        {
+            "listen": "prerequest",
+            "script": {
+                "type": "text/javascript",
+                "exec": [
+                    ""
+                ]
+            }
+        },
+        {
+            "listen": "test",
+            "script": {
+                "type": "text/javascript",
+                "exec": [
+                    ""
+                ]
+            }
+        }
+    ],
+    "variable": [
+        {
+            "key": "createdCmHandleIds",
+            "value": ""
+        },
+        {
+            "key": "createdCmHandles",
+            "value": ""
+        },
+        {
+            "key": "TOTAL_CMHANDLES",
+            "value": "20000",
+            "type": "default"
+        },
+        {
+            "key": "numberOfCmHandlesInReadyState",
+            "value": "",
+            "type": "default"
+        },
+        {
+            "key": "numberOfCmHandlesInNonReadyState",
+            "value": "",
+            "type": "default"
+        },
+        {
+            "key": "dataOperationRequest",
+            "value": "",
+            "type": "default"
+        },
+        {
+            "key": "targetIds",
+            "value": "",
+            "type": "default"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/postman-collections/NCMP Register CmHandle and Query.postman_collection.json b/postman-collections/NCMP Register CmHandle and Query.postman_collection.json
new file mode 100644 (file)
index 0000000..fb14287
--- /dev/null
@@ -0,0 +1,649 @@
+{
+    "info": {
+        "_postman_id": "4e232e66-914a-4b5e-8f7f-f9ae0d476f54",
+        "name": "NCMP Register CmHandle and Query",
+        "description": "A collection to register a cmHandle then query. There are \"Valid Queries\" and \"Invalid Queries\" sub-folders containing examples. These are by no means exhaustive.",
+        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
+        "_exporter_id": "17907116"
+    },
+    "item": [
+        {
+            "name": "Valid Queries",
+            "item": [
+                {
+                    "name": "search cmHandles without conditions",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "search cmHandles with modules query",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllModules\",\n            \"conditionParameters\": [ {\"moduleName\": \"notifications\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "search cmHandles with public properties",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllProperties\",\n            \"conditionParameters\": [ {\"Color\": \"yellow\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "search cmHandles with multiple public properties",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllProperties\",\n            \"conditionParameters\": [ {\"Color\": \"yellow\"}, {\"Size\": \"small\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "search cmHandles with modules & pubprop query",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllModules\",\n            \"conditionParameters\": [ {\"moduleName\": \"notifications\"} ]\n        },\n        {\n            \"conditionName\": \"hasAllProperties\",\n            \"conditionParameters\": [ {\"Color\": \"yellow\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                }
+            ]
+        },
+        {
+            "name": "Invalid Queries",
+            "item": [
+                {
+                    "name": "get cmHandles with wrong condition name",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"wrong\",\n            \"conditionParameters\": [ {\"Color\": \"yellow\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "get cmHandles with empty condition name",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"\",\n            \"conditionParameters\": [ {\"Color\": \"yellow\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "get cmHandles with null condition name",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionParameters\": [ {\"Color\": \"yellow\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "get cmHandles with empty key",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllProperties\",\n            \"conditionParameters\": [ {\"\": \"yellow\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "get cmHandles with empty condition",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllProperties\",\n            \"conditionParameters\": [ {} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "get cmHandles with empty condition list",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllProperties\",\n            \"conditionParameters\": [ ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "get cmHandles with null condition list",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllProperties\"\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "get cmHandles with empty module value",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllModules\",\n            \"conditionParameters\": [ {\"moduleName\": \"\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                },
+                {
+                    "name": "get cmHandles with wrong module name",
+                    "request": {
+                        "method": "POST",
+                        "header": [],
+                        "body": {
+                            "mode": "raw",
+                            "raw": "{\n    \"cmHandleQueryParameters\": [\n        {\n            \"conditionName\": \"hasAllModules\",\n            \"conditionParameters\": [ {\"moduleName2\": \"mudule-1\"} ]\n        }\n    ]\n}",
+                            "options": {
+                                "raw": {
+                                    "language": "json"
+                                }
+                            }
+                        },
+                        "url": {
+                            "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/searches",
+                            "protocol": "http",
+                            "host": [
+                                "{{CPS_HOST}}"
+                            ],
+                            "port": "{{CPS_PORT}}",
+                            "path": [
+                                "ncmp",
+                                "v1",
+                                "ch",
+                                "searches"
+                            ]
+                        }
+                    },
+                    "response": []
+                }
+            ]
+        },
+        {
+            "name": "Register cmHandle for Node",
+            "request": {
+                "method": "POST",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{\n    \"dmiPlugin\": \"http://{{DMI_HOST}}:{{DMI_PORT}}\",\n    \"createdCmHandles\": [\n        {\n            \"cmHandle\": \"CmHandle0\",\n            \"cmHandleProperties\": {\n                \"Books\": \"Sci-Fi Book\"\n            },\n            \"publicCmHandleProperties\": {\n                \"Color\": \"yellow\",\n                \"Size\": \"small\",\n                \"Shape\": \"cube\"\n            }\n        }\n    ]\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmpInventory/v1/ch",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "ncmpInventory",
+                        "v1",
+                        "ch"
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "get cmHandle",
+            "protocolProfileBehavior": {
+                "disableBodyPruning": true
+            },
+            "request": {
+                "method": "GET",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/CmHandle0",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "ncmp",
+                        "v1",
+                        "ch",
+                        "CmHandle0"
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "get modules for cmHandle",
+            "protocolProfileBehavior": {
+                "disableBodyPruning": true
+            },
+            "request": {
+                "method": "GET",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmp/v1/ch/CmHandle0/modules",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "ncmp",
+                        "v1",
+                        "ch",
+                        "CmHandle0",
+                        "modules"
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "Update cmHandle for Node",
+            "request": {
+                "method": "POST",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{\n    \"dmiPlugin\": \"http://{{DMI_HOST}}:{{DMI_PORT}}\",\n    \"updatedCmHandles\": [\n        {\n            \"cmHandle\": \"CmHandle0\",\n            \"cmHandleProperties\": {\n                \"Books\": \"Sci-Fi Book\",\n                \"Some property\": \"Some value\"\n            },\n            \"publicCmHandleProperties\": {\n                \"Color\": \"yellow\",\n                \"Size\": \"small\",\n                \"Shape\": \"cube\",\n                \"Some public property\": \"Some public value\"\n            }\n        }\n    ]\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmpInventory/v1/ch",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "ncmpInventory",
+                        "v1",
+                        "ch"
+                    ]
+                }
+            },
+            "response": []
+        },
+        {
+            "name": "De-register cmHandle for Node",
+            "request": {
+                "method": "POST",
+                "header": [],
+                "body": {
+                    "mode": "raw",
+                    "raw": "{\n    \"dmiPlugin\": \"http://{{DMI_HOST}}:{{DMI_PORT}}\",\n    \"removedCmHandles\": [\n        \"CmHandle0\"\n    ]\n}",
+                    "options": {
+                        "raw": {
+                            "language": "json"
+                        }
+                    }
+                },
+                "url": {
+                    "raw": "http://{{CPS_HOST}}:{{CPS_PORT}}/ncmpInventory/v1/ch",
+                    "protocol": "http",
+                    "host": [
+                        "{{CPS_HOST}}"
+                    ],
+                    "port": "{{CPS_PORT}}",
+                    "path": [
+                        "ncmpInventory",
+                        "v1",
+                        "ch"
+                    ]
+                }
+            },
+            "response": []
+        }
+    ],
+    "auth": {
+        "type": "basic",
+        "basic": [
+            {
+                "key": "password",
+                "value": "cpsr0cks!",
+                "type": "string"
+            },
+            {
+                "key": "username",
+                "value": "cpsuser",
+                "type": "string"
+            }
+        ]
+    },
+    "event": [
+        {
+            "listen": "prerequest",
+            "script": {
+                "type": "text/javascript",
+                "exec": [
+                    ""
+                ]
+            }
+        },
+        {
+            "listen": "test",
+            "script": {
+                "type": "text/javascript",
+                "exec": [
+                    ""
+                ]
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/postman-collections/README.md b/postman-collections/README.md
new file mode 100644 (file)
index 0000000..004ef5b
--- /dev/null
@@ -0,0 +1,34 @@
+<!--
+  ============LICENSE_START=======================================================
+     Copyright (C) 2024 Nordix Foundation.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+  SPDX-License-Identifier: Apache-2.0
+  ============LICENSE_END=========================================================
+-->
+
+# Importing and running the CPS postman collections
+## Importing the CPS collections
+To import the CPS collections and environment:
+1. Create a "Workspace" (or if you have one already you can use that)
+2. Click "Import" (or click "File" then "Import")
+3. Drag and drop the "postman-collection" folder into the import pop-up
+4. The collections and environment should now be imported
+5. Set the current environment to "CPS Environment" (usually at the top right. Default is "No Environment") This will provide the necessary variables such as "CPS_HOST" and "CPS_PORT" to allow the requests to be run
+
+## Running the collections
+To run the requests in the collections simply select the request and click send. "Create Schema Set" in "CPS-CORE" requires a file to send the request. Example files are provided: "bookstore.yang" and "bookstore-types.yang" (these files must be zipped before adding them to the request)
+
+## Notes
+When exporting postman collections tabs are used for spacing, so replacing all the tabs is necessary
diff --git a/postman-collections/bookstore-types.yang b/postman-collections/bookstore-types.yang
new file mode 100644 (file)
index 0000000..5ad7b6e
--- /dev/null
@@ -0,0 +1,18 @@
+module bookstore-types {
+  yang-version 1.1;
+  namespace "org:onap:cps:types:sample";
+
+  prefix types;
+
+  revision "2024-01-30" {
+    description
+      "Sample Types";
+  }
+
+  typedef year {
+    type uint16 {
+      range "1000..9999";
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/postman-collections/bookstore.yang b/postman-collections/bookstore.yang
new file mode 100644 (file)
index 0000000..0d093ea
--- /dev/null
@@ -0,0 +1,127 @@
+module stores {
+    yang-version 1.1;
+    namespace "org:onap:cps:sample";
+
+    prefix book-store;
+
+    import bookstore-types {
+        prefix "types";
+        revision-date 2024-01-30;
+    }
+
+    revision "2024-02-08" {
+        description
+            "Order of book authors is preserved";
+    }
+
+    revision "2024-01-30" {
+        description
+            "Extracted bookstore types";
+    }
+
+    revision "2020-09-15" {
+        description
+        "Sample Model";
+    }
+
+    list bookstore-address {
+        key "bookstore-name";
+        leaf bookstore-name {
+            type string;
+            description
+            "Name of bookstore. Example: My Bookstore";
+        }
+        leaf address {
+            type string;
+            description
+            "Address of store";
+        }
+        leaf postal-code {
+            type string;
+            description
+            "Postal code of store";
+        }
+    }
+
+    container bookstore {
+
+        leaf bookstore-name {
+            type string;
+        }
+
+        container webinfo {
+            leaf domain-name {
+                type string;
+            }
+            leaf contact-email {
+                type string;
+            }
+        }
+
+        container support-info {
+                    leaf support-office {
+                        type string;
+                    }
+                    container contact-emails {
+                        leaf email {
+                            type string;
+                        }
+                    }
+                }
+
+        container container-without-leaves { }
+
+        container premises {
+            list addresses {
+                key "house-number street";
+
+                leaf house-number {
+                    type uint16;
+                }
+                leaf street {
+                    type string;
+                }
+                leaf town {
+                    type string;
+                }
+                leaf county {
+                    type string;
+                }
+            }
+        }
+
+        list categories {
+
+            key "code";
+
+            leaf code {
+                type string;
+            }
+
+            leaf name {
+                type string;
+            }
+
+            list books {
+                key title;
+
+                leaf title {
+                    type string;
+                }
+                leaf lang {
+                    type string;
+                }
+                leaf-list authors {
+                    ordered-by user;
+                    type string;
+                }
+                leaf-list editions {
+                    type types:year;
+                }
+                leaf price {
+                    type uint64;
+                }
+            }
+        }
+    }
+}