Add csit for vnflcm subscription

Change-Id: Ie96c8001506cb7fbad462e93446a42e890a740f3
Issue-ID: INT-1015
Signed-off-by: fujinhua <fu.jinhua@zte.com.cn>
diff --git a/plans/vfc-gvnfm-vnflcm/sanity-check/testplan.txt b/plans/vfc-gvnfm-vnflcm/sanity-check/testplan.txt
index 6627c58..4d38f2c 100644
--- a/plans/vfc-gvnfm-vnflcm/sanity-check/testplan.txt
+++ b/plans/vfc-gvnfm-vnflcm/sanity-check/testplan.txt
@@ -1,3 +1,4 @@
 # Test suites are relative paths under [integration/csit.git]/tests/.
 # Place the suites in run order.
 vfc/gvnfm-vnflcm/test.robot
+vfc/gvnfm-vnflcm/Subscriptions.robot
diff --git a/tests/vfc/gvnfm-vnflcm/Subscriptions.robot b/tests/vfc/gvnfm-vnflcm/Subscriptions.robot
new file mode 100644
index 0000000..8f85855
--- /dev/null
+++ b/tests/vfc/gvnfm-vnflcm/Subscriptions.robot
@@ -0,0 +1,87 @@
+*** Settings ***
+Resource    ../../common.robot
+Library     Collections
+Library     RequestsLibrary
+Library     OperatingSystem
+Library     json
+Library     HttpLibrary.HTTP
+
+*** Variables ***
+@{return_ok_list}=         200  201  202  204
+${vnflcm_port}            8801
+${subscriptions_url}         /api/vnflcm/v1/subscriptions
+
+#json files
+${vnf_subscription_json}    ${SCRIPTS}/../tests/vfc/gvnfm-vnflcm/jsoninput/vnf_subscription.json
+
+#global variables
+${subscriptionId}
+
+*** Test Cases ***
+Create new VNF Package subscription
+    Log    Create new VNF Package subscription
+    [Documentation]    The objective is to test the creation of a new VNF package subscription
+    ${json_value}=     json_from_file      ${vnf_subscription_json}
+    ${json_string}=     string_from_json   ${json_value}
+    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
+    Create Session    web_session    http://${VNFLCM_IP}:${vnflcm_port}    headers=${headers}
+    Set Request Body    ${json_string}
+    ${resp}=    Post Request    web_session     ${subscriptions_url}    ${json_string}
+    ${responese_code}=     Convert To String      ${resp.status_code}
+    List Should Contain Value    ${return_ok_list}   ${responese_code}
+    ${response_json}    json.loads    ${resp.content}
+    ${callback_uri}=    Convert To String      ${response_json['callbackUri']}
+    Should Be Equal    ${callback_uri}    http://127.0.0.1:${vnflcm_port}/api/vnflcm/v1/callback_sample
+    ${subscriptionId}=    Convert To String      ${response_json['id']}
+    Set Global Variable     ${subscriptionId}
+
+Create duplicated VNF Package subscription
+    Log    Create duplicated VNF Package subscription
+    [Documentation]    The objective is to test the attempt of a creation of a duplicated VNF package subscription
+    ${json_value}=     json_from_file      ${vnf_subscription_json}
+    ${json_string}=     string_from_json   ${json_value}
+    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
+    Create Session    web_session    http://${VNFLCM_IP}:${vnflcm_port}    headers=${headers}
+    Set Request Body    ${json_string}
+    ${resp}=    Post Request    web_session     ${subscriptions_url}    ${json_string}
+    Should Be Equal As Strings    502    ${resp.status_code}
+
+GET All VNF Package Subscriptions
+    Log    GET All VNF Package Subscriptions
+    [Documentation]    The objective is to test the retrieval of all VNF package subscriptions
+    ${headers}            Create Dictionary    Content-Type=application/json    Accept=application/json
+    Create Session        web_session          http://${VNFLCM_IP}:${vnflcm_port}      headers=${headers}
+    ${resp}=              Get Request          web_session     ${subscriptions_url}
+    Should Be Equal As Strings    200    ${resp.status_code}
+
+PUT VNF Package Subscriptions - Method not implemented
+    Log    PUT VNF Package Subscriptions - Method not implemented
+    [Documentation]    The objective is to test that PUT method is not allowed to modify VNF package subscriptions
+    ${headers}            Create Dictionary    Content-Type=application/json    Accept=application/json
+    Create Session        web_session          http://${VNFLCM_IP}:${vnflcm_port}      headers=${headers}
+    ${resp}=              Put Request          web_session     ${subscriptions_url}
+    Should Be Equal As Strings    405    ${resp.status_code}
+
+PATCH VNF Package Subscriptions - Method not implemented
+    Log    PATCH VNF Package Subscriptions - Method not implemented
+    [Documentation]    The objective is to test that PATCH method is not allowed to update VNF package subscriptions
+    ${headers}            Create Dictionary    Content-Type=application/json    Accept=application/json
+    Create Session        web_session          http://${VNFLCM_IP}:${vnflcm_port}      headers=${headers}
+    ${resp}=              Patch Request          web_session     ${subscriptions_url}
+    Should Be Equal As Strings    405    ${resp.status_code}
+
+DELETE VNF Package Subscriptions - Method not implemented
+    Log    DELETE VNF Package Subscriptions - Method not implemented
+    [Documentation]    The objective is to test that DELETE method is not allowed to delete VNF package subscriptions
+    ${headers}            Create Dictionary    Content-Type=application/json    Accept=application/json
+    Create Session        web_session          http://${VNFLCM_IP}:${vnflcm_port}      headers=${headers}
+    ${resp}=              Delete Request          web_session     ${subscriptions_url}
+    Should Be Equal As Strings    405    ${resp.status_code}
+
+DELETE VNF Package Subscription
+    Log   DELETE VNF Package Subscription
+    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
+    Create Session    web_session    http://${VNFLCM_IP}:${vnflcm_port}    headers=${headers}
+    ${resp}=    Delete Request    web_session     ${subscriptions_url}/${subscriptionId}
+    ${responese_code}=     Convert To String      ${resp.status_code}
+    List Should Contain Value    ${return_ok_list}   ${responese_code}
diff --git a/tests/vfc/gvnfm-vnflcm/jsoninput/vnf_subscription.json b/tests/vfc/gvnfm-vnflcm/jsoninput/vnf_subscription.json
new file mode 100644
index 0000000..23bd2b1
--- /dev/null
+++ b/tests/vfc/gvnfm-vnflcm/jsoninput/vnf_subscription.json
@@ -0,0 +1,41 @@
+{
+    "filters": {
+        "notificationTypes": [
+            "VnfPackageOnboardingNotification"
+        ],
+        "vnfProductsFromProviders": {
+            "vnfProvider": "string",
+            "vnfProducts": {
+                "vnfProductName": "string",
+                "versions": {
+                    "vnfSoftwareVersion": "string",
+                    "vnfdVersions": [
+                        "string"
+                    ]
+                }
+            }
+        },
+        "vnfdId": [
+            "3fa85f64-5717-4562-b3fc-2c963f66afa6"
+        ],
+        "vnfPkgId": [
+            "3fa85f64-5717-4562-b3fc-2c963f66afa6"
+        ],
+        "operationalState": [
+            "ENABLED"
+        ],
+        "usageState": [
+            "IN_USE"
+        ]
+    },
+    "callbackUri": "http://127.0.0.1:8801/api/vnflcm/v1/callback_sample",
+    "authentication": {
+        "authType": [
+            "BASIC"
+        ],
+        "paramsBasic": {
+            "userName": "string",
+            "password": "string"
+        }
+    }
+}