Async request response NCMP -> Client
[cps.git] / csit / tests / ncmp-passthrough / ncmp-passthrough.robot
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *  SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 *** Settings ***
22 Documentation         NCMP
23
24 Library               Collections
25 Library               OperatingSystem
26 Library               RequestsLibrary
27 Library               BuiltIn
28
29 Suite Setup           Create Session      CPS_URL    http://${CPS_CORE_HOST}:${CPS_CORE_PORT}
30
31 *** Variables ***
32
33 ${auth}                 Basic Y3BzdXNlcjpjcHNyMGNrcyE=
34 ${ncmpBasePath}         /ncmp
35 ${netconf}              NETCONF
36
37 *** Test Cases ***
38
39 Get for Passthrough Operational (CF, RO) with fields & topic
40     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-operational?resourceIdentifier=ietf-netconf-monitoring:netconf-state&options=(fields=schemas/schema)&topic=test-topic
41     ${headers}=          Create Dictionary  Authorization=${auth}
42     ${response}=         Get On Session     CPS_URL   ${uri}   headers=${headers}   expected_status=200
43     ${responseJson}=     Set Variable       ${response.json()}
44     Should Be Equal As Strings              ${response.status_code}   200
45
46 Get for Passthrough Operational (CF, RO) with fields
47     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-operational?resourceIdentifier=ietf-netconf-monitoring:netconf-state&options=(fields=schemas/schema)
48     ${headers}=          Create Dictionary  Authorization=${auth}
49     ${response}=         Get On Session     CPS_URL   ${uri}   headers=${headers}   expected_status=200
50     ${responseJson}=     Set Variable       ${response.json()}
51     ${schemaCount}=      Get length         ${responseJson['ietf-netconf-monitoring:netconf-state']['schemas']}
52     Should Be True                          ${schemaCount} >0
53     Should Contain                          ${responseJson['ietf-netconf-monitoring:netconf-state']['schemas']['schema'][0]['location']}   ${netconf}
54
55 Create to bookstore using passthrough-running
56     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore
57     ${headers}=          Create Dictionary  Content-Type=application/json   Authorization=${auth}
58     ${jsonData}=         Get Binary File    ${DATADIR}${/}bookstoreCreateExample.json
59     ${response}=         POST On Session    CPS_URL   ${uri}   headers=${headers}   data=${jsonData}
60     Should Be Equal As Strings              ${response.status_code}   201
61
62 Verify create to bookstore using passthrough-running
63     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore
64     ${headers}=          Create Dictionary  Authorization=${auth}
65     ${response}=         Get On Session     CPS_URL   ${uri}   headers=${headers}
66     ${responseJson}=     Set Variable       ${response.json()}
67     Should Be Equal As Strings              ${response.status_code}   200
68     FOR   ${item}   IN  @{responseJson['stores:bookstore']['categories']}
69         IF   "${item['code']}" == "01"
70             Should Be Equal As Strings              "${item['name']}"  "Sci-Fi"
71             Should Be Equal As Strings              "${item['books']}[0][title]"  "A Sci-Fi book"
72         END
73         IF   "${item['code']}" == "02"
74             Should Be Equal As Strings              "${item['name']}"  "Horror"
75             Should Be Equal As Strings              "${item['books']}[0][title]"  "A Horror book"
76         END
77     END
78
79 Update Bookstore using passthrough-running for Category 01
80     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=01
81     ${headers}=          Create Dictionary  Content-Type=application/json   Authorization=${auth}
82     ${jsonData}=         Get Binary File    ${DATADIR}${/}bookstoreUpdateExample.json
83     ${response}=         PUT On Session     CPS_URL   ${uri}   headers=${headers}   data=${jsonData}
84     Should Be Equal As Strings              ${response.status_code}   200
85
86 Verify update to bookstore using passthrough-running updated category 01
87     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=01
88     ${headers}=          Create Dictionary  Authorization=${auth}
89     ${response}=         Get On Session     CPS_URL   ${uri}   headers=${headers}
90     ${responseJson}=     Set Variable       ${response.json()}
91     Should Be Equal As Strings              ${response.status_code}   200
92     FOR   ${item}   IN  @{responseJson['stores:categories']}
93         IF   "${item['code']}" == "01"
94             Should Be Equal As Strings              "${item['name']}"  "Updated Sci-Fi Category Name"
95         END
96     END
97
98 Verify update to bookstore using passthrough-running did not remove category 02
99     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore
100     ${headers}=          Create Dictionary  Authorization=${auth}
101     ${response}=         Get On Session     CPS_URL   ${uri}   headers=${headers}
102     ${responseJson}=     Set Variable       ${response.json()}
103     Should Be Equal As Strings              ${response.status_code}   200
104     ${schemaCount}=      Get length         ${responseJson['stores:bookstore']['categories']}
105     Should Be Equal As Numbers              ${schemaCount}  2
106
107 Delete Bookstore using passthrough-running for Category 01
108     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=01
109     ${headers}=          Create Dictionary  Content-Type=application/json   Authorization=${auth}
110     ${response}=         DELETE On Session  CPS_URL   ${uri}   headers=${headers}
111     Should Be Equal As Strings              ${response.status_code}   204
112
113 Verify delete to bookstore using passthrough-running removed only category 01
114     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore
115     ${headers}=          Create Dictionary  Authorization=${auth}
116     ${response}=         Get On Session     CPS_URL   ${uri}   headers=${headers}
117     ${responseJson}=     Set Variable       ${response.json()}
118     Should Be Equal As Strings              ${response.status_code}   200
119     ${schemaCount}=      Get length         ${responseJson['stores:bookstore']['categories']}
120     Should Be Equal As Numbers              ${schemaCount}  1
121     FOR   ${item}   IN  @{responseJson['stores:bookstore']['categories']}
122         IF   "${item['code']}" == "02"
123             Should Be Equal As Strings              "${item['name']}"  "Horror"
124         END
125     END
126
127 Patch will add new category with new book and add a new book to an existing category
128     ${uri}=              Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore
129     ${headers}=          Create Dictionary  Content-Type=application/yang.patch+json   Authorization=${auth}
130     ${jsonData}=         Get Binary File    ${DATADIR}${/}bookstorePatchExample.json
131     ${response}=         PATCH On Session   CPS_URL   ${uri}   headers=${headers}   data=${jsonData}
132     Should Be Equal As Strings              ${response.status_code}   200
133     ${verifyUri}=       Set Variable        ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=100
134     ${verifyHeaders}=    Create Dictionary  Authorization=${auth}
135     ${verifyResponse}=   Get On Session     CPS_URL   ${verifyUri}   headers=${verifyHeaders}
136     ${responseJson}=    Set Variable        ${verifyResponse.json()}
137     Should Be Equal As Strings              ${verifyResponse.status_code}   200
138     FOR   ${item}   IN  @{responseJson['stores:categories']}
139         IF   "${item['code']}" == "100"
140             Should Be Equal As Strings              "${item['name']}"  "Category100"
141         END
142     END
143     ${verifyUri}=       Set Variable       ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=02/books=A%20New%20book%20in%20existing%20category
144     ${verifyResponse}=  Get On Session     CPS_URL   ${verifyUri}   headers=${verifyHeaders}
145     ${responseJson}=    Set Variable       ${verifyResponse.json()}
146     Should Be Equal As Strings             ${verifyResponse.status_code}   200