diff options
Diffstat (limited to 'cucumber-js-test-apis-ci')
119 files changed, 6146 insertions, 0 deletions
diff --git a/cucumber-js-test-apis-ci/.gitignore b/cucumber-js-test-apis-ci/.gitignore new file mode 100644 index 0000000000..316e39847a --- /dev/null +++ b/cucumber-js-test-apis-ci/.gitignore @@ -0,0 +1,11 @@ +.idea +.vscode +.history +debug.log +dist +docs +node_modules +.npmrc +npm-debug.log +devConfig.json +jenkinsConfig.json diff --git a/cucumber-js-test-apis-ci/README.txt b/cucumber-js-test-apis-ci/README.txt new file mode 100644 index 0000000000..35250ed375 --- /dev/null +++ b/cucumber-js-test-apis-ci/README.txt @@ -0,0 +1,4 @@ +In order to setup the project: + +Run "mvn install -DskipTests", this will create the documentation under the "docs". +Open the index.html under the docs directory and continue from there.
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/config.json b/cucumber-js-test-apis-ci/config.json new file mode 100644 index 0000000000..35c31272c1 --- /dev/null +++ b/cucumber-js-test-apis-ci/config.json @@ -0,0 +1,28 @@ +{ + "protocol" : "http", + + "onboarding" : { + "port" : "onboarding.port", + "prefix" : "sdc1/feProxy/onboarding-api/v1.0", + "server" : "onboarding.server", + "user" : "onboarding.user" + }, + "vf" : { + "port" : "vf.port", + "prefix" : "sdc1/feProxy/rest/v1", + "server" : "vf.server", + "user" : "vf.user" + }, + "catalog" : { + "port" : "CatalogBE.port", + "prefix" : "sdc2/rest/v1", + "server" : "CatalogBE.server", + "user" : "CatalogBE.user" + }, + "activity_spec" : { + "port" : "activity-spec.port", + "prefix" : "activity-spec-api/v1.0", + "server" : "activity_spec.server", + "user" : "activity-spec.user" + } +} diff --git a/cucumber-js-test-apis-ci/cucumber.js b/cucumber-js-test-apis-ci/cucumber.js new file mode 100644 index 0000000000..4ade9b1cb3 --- /dev/null +++ b/cucumber-js-test-apis-ci/cucumber.js @@ -0,0 +1,3 @@ +module.exports = { + "default" : "--require stepDefinitions -f summary -r ./features -f json:report/report.json" +};
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/dev_pom.xml b/cucumber-js-test-apis-ci/dev_pom.xml new file mode 100644 index 0000000000..7ad10f8d3f --- /dev/null +++ b/cucumber-js-test-apis-ci/dev_pom.xml @@ -0,0 +1,138 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <artifactId>onboarding-cucumber</artifactId> + <name>cucumber-report</name> + + <parent> + <groupId>org.openecomp.sdc</groupId> + <artifactId>sdc-onboarding</artifactId> + <version>1.3.1-SNAPSHOT</version> + <relativePath>../onboarding/pom.xml</relativePath> + </parent> + + <build> + <plugins> + <plugin> + <artifactId>maven-clean-plugin</artifactId> + <version>2.6.1</version> + <executions> + <execution> + <id>clean.dist.folder</id> + <phase>clean</phase> + <goals> + <goal>clean</goal> + </goals> + <configuration> + <filesets> + <fileset> + <directory>${basedir}/report</directory> + <includes> + <include>**/*</include> + </includes> + </fileset> + <fileset> + <directory>${basedir}/resources/downloads</directory> + <includes> + <include>**/*</include> + </includes> + </fileset> + <fileset> + <directory>${basedir}/docs</directory> + <includes> + <include>**/*</include> + </includes> + </fileset> + </filesets> + </configuration> + </execution> + </executions> + </plugin> + + + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>create-reporting-folders</id> + <phase>generate-sources</phase> + <configuration> + <tasks> + <echo message="Generate reports and downloads folders"/> + <mkdir dir="${basedir}/report"/> + <mkdir dir="${basedir}/resources/downloads"/> + </tasks> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- ============================================= --> + <!-- Build the UI module node code --> + <!-- ============================================= --> + <plugin> + <groupId>com.github.eirslett</groupId> + <artifactId>frontend-maven-plugin</artifactId> + <version>1.6</version> + + <configuration> + <installDirectory>${project.parent.parent.basedir}</installDirectory> + </configuration> + + <executions> + + <execution> + <id>install node and yarn</id> + <goals> + <goal>install-node-and-yarn</goal> + </goals> + <configuration> + <nodeVersion>v9.4.0</nodeVersion> + <yarnVersion>v1.3.2</yarnVersion> + </configuration> + </execution> + + <execution> + <id>yarn run install</id> + <goals> + <goal>yarn</goal> + </goals> + <configuration> + <arguments>install</arguments> + </configuration> + </execution> + <execution> + <id>yarn run cucumber docs</id> + <goals> + <goal>yarn</goal> + </goals> + <configuration> + <yarnInheritsProxyConfigFromMaven>false</yarnInheritsProxyConfigFromMaven> + <arguments>run cucumber-docs</arguments> + </configuration> + </execution> + + <execution> + <id>yarn run cucumber test</id> + <goals> + <goal>yarn</goal> + </goals> + <configuration> + <yarnInheritsProxyConfigFromMaven>false</yarnInheritsProxyConfigFromMaven> + <arguments>run test-and-report</arguments> + </configuration> + <phase>test</phase> + </execution> + + + </executions> + </plugin> + </plugins> + </build> + +</project> diff --git a/cucumber-js-test-apis-ci/docker/Dockerfile b/cucumber-js-test-apis-ci/docker/Dockerfile new file mode 100644 index 0000000000..8679bd5643 --- /dev/null +++ b/cucumber-js-test-apis-ci/docker/Dockerfile @@ -0,0 +1,11 @@ +FROM node:6 + + +ENV TESTS_BASE /var/lib/tests +USER root +RUN mkdir $TESTS_BASE +COPY cucumber $TESTS_BASE +COPY startup.sh $TESTS_BASE +RUN chmod 777 $TESTS_BASE/startup.sh + +ENTRYPOINT [ "/var/lib/tests/startup.sh" ] diff --git a/cucumber-js-test-apis-ci/docker/startup.sh b/cucumber-js-test-apis-ci/docker/startup.sh new file mode 100644 index 0000000000..f38acad8c7 --- /dev/null +++ b/cucumber-js-test-apis-ci/docker/startup.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +cd /var/lib/tests +yarn install +yarn run test-and-report diff --git a/cucumber-js-test-apis-ci/docker_run.sh b/cucumber-js-test-apis-ci/docker_run.sh new file mode 100644 index 0000000000..dc39627038 --- /dev/null +++ b/cucumber-js-test-apis-ci/docker_run.sh @@ -0,0 +1 @@ +docker run --volume /data/environments:/var/lib/tests/environments --volume /data/logs/cucumber:/var/lib/tests/report nfv/cucumber-sdc-api-tests:latest diff --git a/cucumber-js-test-apis-ci/features/AbortFunctionality/TestAbort_ForInvalidHeatFile.feature b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestAbort_ForInvalidHeatFile.feature new file mode 100644 index 0000000000..1c501d6599 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestAbort_ForInvalidHeatFile.feature @@ -0,0 +1,45 @@ +# Copyright © 2016-2018 European Support Limited +# +# 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. + +Feature: Abort Flow - Test validation data + + Background: Init + Given I want to create a VLM + + Scenario: Test abort functionality , Check validation data for invalid heat + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/errorHeat.zip" + # abort + When I want to delete for path "/vendor-software-products/{item.id}/versions/{item.versionId}/orchestration-template-candidate" + + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "onboardingOrigin" does not exist + Then I want to check property "candidateOnboardingOrigin" does not exist + Then I want to check property "validationData" does not exist + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/errorHeat.zip" + When I want to process the NetworkPackage file for this VSP + # validation data should have been updated as heat is invalid + Then I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "validationData" exists + + # abort - processed invalid file and check validation data + When I want to delete for path "/vendor-software-products/{item.id}/versions/{item.versionId}/orchestration-template-candidate" + + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "onboardingOrigin" does not exist + Then I want to check property "candidateOnboardingOrigin" does not exist + Then I want to check property "validationData" does not exist diff --git a/cucumber-js-test-apis-ci/features/AbortFunctionality/TestAbort_ForValidHeatFile.feature b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestAbort_ForValidHeatFile.feature new file mode 100644 index 0000000000..c3ee8a5e6c --- /dev/null +++ b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestAbort_ForValidHeatFile.feature @@ -0,0 +1,30 @@ +# Copyright © 2016-2018 European Support Limited +# +# 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. + +Feature: Abort Flow - Test for valid heat + + Background: Init + Given I want to create a VLM + + Scenario: Test abort functionality for valid heat + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + Then I want to process the NetworkPackage file for this VSP + + When I want to delete for path "/vendor-software-products/{item.id}/versions/{item.versionId}/orchestration-template-candidate" + Then I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "candidateOnboardingOrigin" does not exist + Then I want to check property "onboardingOrigin" for value "zip"
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/AbortFunctionality/TestProperties.feature b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestProperties.feature new file mode 100644 index 0000000000..e9e9acdbe1 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestProperties.feature @@ -0,0 +1,32 @@ +# Copyright © 2016-2018 European Support Limited +# +# 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. + +Feature: Abort Flow - Test Properties + + Background: Init + Given I want to create a VLM + + Scenario: Create VSP , Upload Network Pacakage and check properties candidateOnboardingOrigin,onboardingOrigin + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "onboardingOrigin" does not exist + Then I want to check property "candidateOnboardingOrigin" does not exist + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/errorHeat.zip" + Then I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "candidateOnboardingOrigin" exists + Then I want to check property "candidateOnboardingOrigin" for value "zip" + Then I want to check property "onboardingOrigin" does not exist
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/AbortFunctionality/TestRollback.feature b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestRollback.feature new file mode 100644 index 0000000000..d61a1cc773 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestRollback.feature @@ -0,0 +1,41 @@ +# Copyright © 2016-2018 European Support Limited +# +# 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. + +Feature: Abort Flow - Test rollback + + Background: Init + Given I want to create a VLM + + Scenario: Test rollback. In case abort it should successfully rollback to previously processed service model + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + Then I want to process the NetworkPackage file for this VSP + + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "onboardingOrigin" for value "zip" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/errorHeat.zip" + Then I want to process the NetworkPackage file for this VSP + Then I want to check property "status" for value "Failure" + + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "candidateOnboardingOrigin" for value "zip" + + When I want to delete for path "/vendor-software-products/{item.id}/versions/{item.versionId}/orchestration-template-candidate" + # rollback - check whether it rolled back to previous processed file + Then I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + Then I want to check property "onboardingOrigin" for value "zip" + Then I want to check property "candidateOnboardingOrigin" does not exist diff --git a/cucumber-js-test-apis-ci/features/AbortFunctionality/TestSubmit.feature b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestSubmit.feature new file mode 100644 index 0000000000..3153022396 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/AbortFunctionality/TestSubmit.feature @@ -0,0 +1,35 @@ +# Copyright © 2016-2018 European Support Limited +# +# 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. + +Feature: Abort Flow - Test Submit + + Background: Init + Given I want to create a VLM + + Scenario: Test submit if file is just uploaded + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + Then I want the following to fail + When I want to submit this VSP + + Scenario: Test submit if invalid file is uploaded and procced for validation + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/errorHeat.zip" + Then I want to process the NetworkPackage file for this VSP + Then I want the following to fail + When I want to submit this VSP
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/ActivitySpec/TestCreate.feature b/cucumber-js-test-apis-ci/features/ActivitySpec/TestCreate.feature new file mode 100644 index 0000000000..c4e77a7c1b --- /dev/null +++ b/cucumber-js-test-apis-ci/features/ActivitySpec/TestCreate.feature @@ -0,0 +1,70 @@ +#Feature: ActivitySpec Flow - Test Create Activity Spec +# +#Given Default prefix "activity_spec" +# +# # SDC-6350 +# Scenario: Test Create Activity Spec functionality +# #Create ActivitySpec +# When I want to set the input data to file "resources/json/createActivitySpec.json" +# Then I want to update the input property "name" with a random value +# When I want to create an ActivitySpec +# #Check id and versionId returned in response +# Then I want to check property "id" exists +# And I want to check property "versionId" exists +# +# #List ActivitySpec +# And I want to list ActivitySpecs with status "Draft" +# And I want to check property "listCount" exists +# +# #Get ActivitySpec and verify its status +# And I want to get the ActivitySpec for the current item +# And I want to check property "status" for value "Draft" +# +# #Certify and Get ActivitySpec and verify its status +# And I want to call action "CERTIFY" on this ActivitySpec item +# And I want to get the ActivitySpec for the current item +# And I want to check property "status" for value "Certified" +# +# #Deprecate and Get ActivitySpec and verify its status +# And I want to call action "DEPRECATE" on this ActivitySpec item +# And I want to get the ActivitySpec for the current item +# And I want to check property "status" for value "Deprecated" +# +# #Delete and Get ActivitySpec and verify its status +# And I want to call action "DELETE" on this ActivitySpec item +# And I want to get the ActivitySpec for the current item +# And I want to check property "status" for value "Deleted" +# +# #Pass Invalid Id to Get and verify error message +# Then I want to set property "item.id" to value "invalidId" +# Then I want the following to fail with error message "No Activity Spec found for the given identifiers" +# And I want to get the ActivitySpec for the current item +# +# # SDC-6353 +# Scenario: Test Create Activity Spec With Duplicate Name +# #Create ActivitySpec with name "test" +# When I want to set the input data to file "resources/json/createActivitySpec.json" +# Then I want to update the input property "name" with value "test" +# When I want to create an ActivitySpec +# Then I want to check property "id" exists +# And I want to check property "versionId" exists +# +# #Again Create ActivitySpec with name "test" and verify error message +# When I want to set the input data to file "resources/json/createActivitySpec.json" +# Then I want to update the input property "name" with value "test" +# Then I want the following to fail with error message "name already in use" +# When I want to create an ActivitySpec +# +# # SDC-6354 +# Scenario: Test Create Activity Spec With Invalid Name Format +# When I want to set the input data to file "resources/json/createActivitySpec.json" +# Then I want to update the input property "name" with value "test!@" +# Then I want the following to fail with error message "name should match with \"^[a-zA-Z0-9-]*$\" pattern" +# When I want to create an ActivitySpec +# +# # SDC-6355 +# Scenario: Test Create Activity Spec With Null/Blank Name +# When I want to set the input data to file "resources/json/createActivitySpec.json" +# Then I want to update the input property "name" with value "" +# Then I want the following to fail with error message "Mandatory name field is missing/null" +# When I want to create an ActivitySpec
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/ActivitySpec/TestInvalidStatusTransition.feature b/cucumber-js-test-apis-ci/features/ActivitySpec/TestInvalidStatusTransition.feature new file mode 100644 index 0000000000..452570e421 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/ActivitySpec/TestInvalidStatusTransition.feature @@ -0,0 +1,29 @@ +#Feature: ActivitySpec Flow +# +#Given Default prefix "activity_spec" +# +# Scenario: Test Invalid Status Transition for Activity Spec +# #Create Activity Spec +# When I want to set the input data to file "resources/json/createActivitySpec.json" +# Then I want to update the input property "name" with a random value +# When I want to create an ActivitySpec +# Then I want to check property "id" exists +# And I want to check property "versionId" exists +# +# #Get Activity Spec and verify status +# When I want to get the ActivitySpec for the current item +# Then I want to check property "status" for value "Draft" +# +# #Deprecate "Draft" activity status and verify error message +# Then I want the following to fail with error message "Activity Spec is in an invalid state" +# When I want to call action "DEPRECATE" on this ActivitySpec item +# +# #Delete "Draft" activity spec and verify error code +# Then I want the following to fail with error message "Activity Spec is in an invalid state" +# When I want to call action "DELETE" on this ActivitySpec item +# +# #Certify activity spec +# When I want to call action "CERTIFY" on this ActivitySpec item +# #Certify "certified" activity spec and verify error code +# Then I want the following to fail with error message "Activity Spec is in an invalid state" +# When I want to call action "CERTIFY" on this ActivitySpec item
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/ComponentData.feature b/cucumber-js-test-apis-ci/features/ComponentData.feature new file mode 100644 index 0000000000..62f09a357f --- /dev/null +++ b/cucumber-js-test-apis-ci/features/ComponentData.feature @@ -0,0 +1,52 @@ +Feature: Component - Test Component Composition and Questionnaire Data + + Background: Init + Given I want to create a VLM + + Scenario: Test Component Composition and Questionnaire Data After Same Heat Reupload + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/vMME_Ericsson_small_v2.zip" + And I want to process the NetworkPackage file for this VSP + + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}/components" + Then I want to copy to property "componentId" from response data path "results[0].id" + Then I want to check property "listCount" for value 4 + Then I want to check property "results[0].id" exists + + #Verify composition data for first component + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}/components/{componentId}" + Then I want to check property "data.name" exists + Then I want to check property "data.displayName" exists + Then I want to copy to property "firstCompDisplayName" from response data path "data.displayName" + #Ensure composition data does not have vfcCode and nfcFunction since they are moved to questionnaire + Then I want to check property "data.vfcCode" does not exist + Then I want to check property "data.nfcFunction" does not exist + + When I want to get the questionnaire for this component + #Ensure questionnaire data has nfcNamingCode in "general" and populated with value of component displayName + Then I want to check value of "general.nfcNamingCode" in the questionnaire data with value of property "firstCompDisplayName" + + #Update questionnaire nfcNamingCode and nfcFunction in "general" + And I want to update this questionnaire with value "general/nfcNamingCode" for property "test_update_naming_code" + And I want to update this questionnaire with value "general/nfcFunction" for property "test_function" + And I want to update this questionnaire + + #Retrive questionnaire and verify nfcNamingCode and nfcFunction in "general" has updated value + When I want to get the questionnaire for this component + Then I want to check this questionnaire has value "general/nfcNamingCode" for property "test_update_naming_code" + Then I want to check this questionnaire has value "general/nfcFunction" for property "test_function" + + #Reupload the same Heat + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/vMME_Ericsson_small_v2.zip" + And I want to process the NetworkPackage file for this VSP + + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}/components" + #Find component id for which nfcNamingCode and nfcFunction were set in previous HEAT based on component display name + Then I want to set componentId for component name in property "firstCompDisplayName" + + #Retrive questionnaire and verify nfcNamingCode and nfcFunction in "general" has retained values that were before heat upload + When I want to get the questionnaire for this component + Then I want to check this questionnaire has value "general/nfcNamingCode" for property "test_update_naming_code" + Then I want to check this questionnaire has value "general/nfcFunction" for property "test_function"
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/Example_Collaboration.feature b/cucumber-js-test-apis-ci/features/Example_Collaboration.feature new file mode 100644 index 0000000000..c799efda12 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Example_Collaboration.feature @@ -0,0 +1,26 @@ +Feature: Collaboration Example File + + Background: Init + Given I want to create a VLM + Scenario: Testing permissions for contributors and Owners + Then I want to check user "mb033001" has no permissions on this Item + + When I want to add user "mb0001" as a contributor to this Item + Then I want to get the permissions for this Item + Then I want to check property "listCount" for value 2 + Then I want to check user "cs0008" has role "owner" on this Item + Then I want to check user "mb0001" has role "contributor" on this Item + + When I want to set the user to "aaaa" + Then I want the following to fail + When I want to get the permissions for this Item + + When I want to set the user to "mb0001" + Then I want the following to fail + When I want to change the owner to user "mb0001" on this Item + + When I want to set the user to "cs0008" + When I want to change the owner to user "mb0001" on this Item + Then I want to get the permissions for this Item + Then I want to check user "cs0008" has role "contributor" on this Item + Then I want to check user "mb0001" has role "owner" on this Item
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/Example_HEAT.feature b/cucumber-js-test-apis-ci/features/Example_HEAT.feature new file mode 100644 index 0000000000..778fd96616 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Example_HEAT.feature @@ -0,0 +1,30 @@ +# Copyright © 2016-2018 European Support Limited +# +# 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. + +Feature: Heat Example File + Scenario: Test with update for heat file and check for validation warning + Given I want to create a VLM + + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + + When I want to download the NetworkPackage for this VSP to path "resources/downloads/base_mux.zip" + Then I want to check property "data[0].file" for value "CB_BASE.yaml" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX_with_no_base.zip" + Then I want to process the NetworkPackage file for this VSP + Then I want to check property "errors['CB_MUX.yaml'][0].level" for value "WARNING"
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/Example_ResponseData_CheckAndManipulation.feature b/cucumber-js-test-apis-ci/features/Example_ResponseData_CheckAndManipulation.feature new file mode 100644 index 0000000000..ffc74f19bb --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Example_ResponseData_CheckAndManipulation.feature @@ -0,0 +1,22 @@ +Feature: Example for checking response data + Scenario: Example Checks + # setting some data just for testing purposes + Given Response Data: + """ + { + "field1" : "string field", + "field2" : true, + "field3": "5", + "field4" : [{"entry1":"a"},{"entry2":"b"},{"entry3":"c"}] + } + """ + # printing out for test purposes + Then I want to print the context data + + # running the different options of checking the respone data + Then I want to check property "field1" for value "string field" + Then I want to check property "field2" to be true + Then I want to check property "field3" for value 5 + Then I want to check property "field4" to have length 3 + Then I want to check property "field4[0].entry1" exists + Then I want to check property "field4[0].no_exist" does not exist diff --git a/cucumber-js-test-apis-ci/features/Example_Rest_Calls.feature b/cucumber-js-test-apis-ci/features/Example_Rest_Calls.feature new file mode 100644 index 0000000000..e650fede66 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Example_Rest_Calls.feature @@ -0,0 +1,36 @@ +Feature: Example Rest Calls + Scenario: Call Rest CRUD + +# Following will override the server set in the config.json. Use ONLY during development +# Given Server host "localhost" + Given I want to create a VLM + Given I want to create a VSP with onboarding type "Manual" + + # do an update + Then I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + + # dealing with getting to the correct input data from the request + Then I want to remove "id" from the input data + Then I want to remove "version" from the input data + Then I want to remove "candidateOnboardingOrigin" from the input data + Then I want to remove "onboardingOrigin" from the input data + Then I want to remove "onboardingMethod" from the input data + Then I want to update the input property "description" with value "updated" + Then I want to update for path "/vendor-software-products/{item.id}/versions/{item.versionId}" with the input data from the context + + # do a create + Then I want to create input data + Then I want to update the input property "name" with a random value + Then I want to create for path "/vendor-software-products/{item.id}/versions/{item.versionId}/processes" with the input data from the context + Then I want to copy to property "lastProcessId" from response data path "value" + # do a delete + Then I want to delete for path "/vendor-software-products/{item.id}/versions/{item.versionId}/processes" with the value from saved property "lastProcessId" + + When I want to set property "lastProcessId" to value "NotExisting" + Then I want the following to fail + When I want to delete for path "/vendor-software-products/{item.id}/versions/{item.versionId}/processes" with the value from saved property "lastProcessId" + + Scenario: Create VLM through commands + When I want to set the input data to file "resources/json/createVLM.json" + Then I want to update the input property "vendorName" with a random value + Then I want to create for path "/vendor-license-models" with the input data from the context diff --git a/cucumber-js-test-apis-ci/features/Example_Toggle.feature b/cucumber-js-test-apis-ci/features/Example_Toggle.feature new file mode 100644 index 0000000000..2d930773bd --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Example_Toggle.feature @@ -0,0 +1,8 @@ +Feature: Enable all toggls + +Scenario: Enable/Disable all toggls + When I want to list Togglz + Then I want to set all Togglz to be "true" + Then I want to list Togglz + Then I want to set all Togglz to be "false" + Then I want to list Togglz
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/Example_ToscaTranslationFlow.feature b/cucumber-js-test-apis-ci/features/Example_ToscaTranslationFlow.feature new file mode 100644 index 0000000000..5ec35f9a45 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Example_ToscaTranslationFlow.feature @@ -0,0 +1,48 @@ +Feature: Example Tosca Validation Flow + + Background: Init + Given I want to create a VLM + + Scenario: Full - Create and submit VSP Network Package and Create VF + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + And I want to compare the content of the entry "Artifacts/CB_BASE.yaml" in the zip "resources/downloads/VSPPackage.zip" with file "resources/yaml/CB_BASE.yaml" + + Then I want to create a VF for this Item + + Scenario: Full - Same flow for different HEAT file + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/NEW_NC_with_manifest.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + Then I want to create a VF for this Item + + Scenario: Test Validation Error + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/errorHeat.zip" + And I want to process the NetworkPackage file for this VSP + And I want to print the context data + + Then I want to check property "errors['first.env'][0].level" for value "ERROR" + Then I want to check property "errors['first.env'][0].message" for value "ERROR: [YML1]: Invalid YAML format Problem - [empty yaml]" + + Scenario: yaml to json + When I want to load the yaml content of the entry "CB_BASE.yaml" in the zip "resources/uploads/BASE_MUX.zip" to context + Then I want to check property "parameters.vnf_name.description" for value "Unique name for this VF instance"
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/Example_VLM.feature b/cucumber-js-test-apis-ci/features/Example_VLM.feature new file mode 100644 index 0000000000..f4093ff07e --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Example_VLM.feature @@ -0,0 +1,46 @@ +Feature: VLM Example File + Scenario: VLM Defaults + + When I want to create a VLM + Then I want to make sure this Item has status "Draft" + When I want to submit this VLM + Then I want to make sure this Item has status "Certified" + Then I want to create a new version for this Item + + Scenario: Testing revisions with VLM + When I want to create a VLM + + When I want to get path "/items/{item.id}/versions/{item.versionId}/revisions" + Then I want to check property "listCount" for value 1 + + # example creating input data + Then I want to create input data + Then I want to update the input property "name" with a random value + Then I want to update the input property "type" with value "Universal" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context + Then I want to copy to property "lastProcessId" from response data path "value" + Then I want to commit this Item + + Then I want to get path "/items/{item.id}/versions/{item.versionId}/revisions" + Then I want to check property "listCount" for value 2 + Then I want to copy to property "setRevision" from response data path "results[1].id" + + When I want to revert this Item to the revision with the value from saved property "setRevision" + Then I want to get path "/items/{item.id}/versions/{item.versionId}/revisions" + Then I want to check property "listCount" for value 2 + + When I want to get path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" + Then I want to check property "listCount" for value 0 + + Then I want to create input data + Then I want to update the input property "name" with a random value + Then I want to update the input property "type" with value "Universal" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context + Then I want to copy to property "newLKG" from response data path "value" + Then I want to delete for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the value from saved property "newLKG" + + When I want to set property "NotExisting" to value "NotExisting" + Then I want the following to fail with error code "GENERAL_ERROR_REST_ID" + Then I want to revert this Item to the revision with the value from saved property "NotExisting" + Then I want to revert this Item to the revision with the value from saved property "setRevision" + diff --git a/cucumber-js-test-apis-ci/features/Example_VSP.feature b/cucumber-js-test-apis-ci/features/Example_VSP.feature new file mode 100644 index 0000000000..5cffa585c5 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Example_VSP.feature @@ -0,0 +1,60 @@ +Feature: VSP Example File + + Background: Init + Given I want to create a VLM + + Scenario: Create and submit VSP Network Package + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + When I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + Then I want to compare the content of the entry "Artifacts/CB_BASE.yaml" in the zip "resources/downloads/VSPPackage.zip" with file "resources/yaml/CB_BASE.yaml" + When I want to load the yaml content of the entry "Artifacts/CB_BASE.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + Then I want to check property "parameters.vnf_name.description" for value "Unique name for this VF instance" + When I want to load the json content of the entry "Artifacts/MANIFEST.json" in the zip "resources/downloads/VSPPackage.zip" to context + Then I want to check property "description" for value "for testing" + Scenario: Create VSP Manual + When I want to create a VSP with onboarding type "Manual" + Then I want to make sure this Item has status "Draft" + + When I want to create a VSP with onboarding type "Manual" + Then I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + + When I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}/components" + Then I want to check property "listCount" for value 0 + + When I want to add a component + Then I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}/components" + Then I want to check property "listCount" for value 1 + + Then I want the following to fail with error code "VSP_VFC_COUNT_EXCEED" + When I want to add a component + + Then I want to commit this Item + Then I want the following to fail + When I want to submit this VSP + + + Scenario: VSP Questionnaire Examples + Given I want to create a VSP with onboarding type "Manual" + + When I want to get the questionnaire for this item + + When I want to add a component + Then I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}/components" + Then I want to check property "listCount" for value 1 + + Then I want to get the questionnaire for this item + And I want to update this questionnaire with value "15" for property "general/storageDataReplication/storageReplicationSize" + And I want to update this questionnaire + + When I want to get the questionnaire for this item + Then I want to check this questionnaire has value "15" for property "general/storageDataReplication/storageReplicationSize"
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/GlobalTypes/TestInterfaceLifecycleTypes.feature b/cucumber-js-test-apis-ci/features/GlobalTypes/TestInterfaceLifecycleTypes.feature new file mode 100644 index 0000000000..ef98fa5b42 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/GlobalTypes/TestInterfaceLifecycleTypes.feature @@ -0,0 +1,8 @@ +Feature: Interface Lifecycle Types + +Scenario: Test Interface Lifecycle Types + + When I want to get interface lifecycle types + Then I want to check property "tosca.interfaces.node.lifecycle.standard" exists + Then I want to check property "tosca.interfaces.nfv.vnf.lifecycle.nfv" exists + diff --git a/cucumber-js-test-apis-ci/features/InterfaceOperation/TestResourceInterfaceOperation.feature b/cucumber-js-test-apis-ci/features/InterfaceOperation/TestResourceInterfaceOperation.feature new file mode 100644 index 0000000000..ed09f2fb20 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/InterfaceOperation/TestResourceInterfaceOperation.feature @@ -0,0 +1,98 @@ +Feature: Interface Operation Feature + + Background: Init + Given I want to create a VF + + Scenario: Test InterfaceOperation CRUD + #Create Operations + When I want to create an Operation + Then I want to check property "uniqueId" exists + And I want to create an Operation with workflow + Then I want to check property "uniqueId" exists + And I want to create an Operation + Then I want to check property "uniqueId" exists + When I want to create an Operation with input output + Then I want to check property "uniqueId" exists + + #List All Operations + When I want to list Operations + + #Get Operation By OperationId + When I want to get an Operation by Id + Then I want to check property "uniqueId" exists + #Update Operation + When I want to update an Operation + Then I want to check property "uniqueId" exists + + #Delete Operation + When I want to delete an Operation + + #Checkin + When I want to checkin this component + Then I want to check property "lifecycleState" for value "NOT_CERTIFIED_CHECKIN" + + #Certify + Then I want to certify this component + And I want to check property "lifecycleState" for value "CERTIFIED" + + Scenario: Test InterfaceOperation CREATE + #Create Operations + When I want to create an Operation + Then I want to check property "uniqueId" exists + And I want to create an Operation + Then I want to check property "uniqueId" exists + And I want to create an Operation + Then I want to check property "uniqueId" exists + + #List All Operations + When I want to list Operations + +#Checkin + When I want to checkin this component + Then I want to check property "lifecycleState" for value "NOT_CERTIFIED_CHECKIN" + +#Certify + Then I want to certify this component + And I want to check property "lifecycleState" for value "CERTIFIED" + + + Scenario: Test InterfaceOperation UPDATE + #Create Operation + When I want to create an Operation + Then I want to check property "uniqueId" exists + + #Get Operation By OperationId + When I want to get an Operation by Id + Then I want to check property "uniqueId" exists + #Update Operation + When I want to update an Operation + Then I want to check property "uniqueId" exists + + #Checkin + When I want to checkin this component + Then I want to check property "lifecycleState" for value "NOT_CERTIFIED_CHECKIN" + + #Certify + Then I want to certify this component + And I want to check property "lifecycleState" for value "CERTIFIED" + + + Scenario: Test InterfaceOperation DELETE + #Create Operation + When I want to create an Operation + Then I want to check property "uniqueId" exists + + #Get Operation By OperationId + When I want to get an Operation by Id + Then I want to check property "uniqueId" exists + + #Delete Operation + When I want to delete an Operation + + #Checkin + When I want to checkin this component + Then I want to check property "lifecycleState" for value "NOT_CERTIFIED_CHECKIN" + + #certify + Then I want to certify this component + And I want to check property "lifecycleState" for value "CERTIFIED"
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/InterfaceOperation/TestServiceInterfaceOperation.feature b/cucumber-js-test-apis-ci/features/InterfaceOperation/TestServiceInterfaceOperation.feature new file mode 100644 index 0000000000..1ff0ba3f1b --- /dev/null +++ b/cucumber-js-test-apis-ci/features/InterfaceOperation/TestServiceInterfaceOperation.feature @@ -0,0 +1,37 @@ +Feature: Interface Operation Feature + + Background: Init + Given I want to create a Service + + Scenario: Test InterfaceOperation CRUD + #Create Operations + When I want to create an Operation + Then I want to check property "uniqueId" exists + And I want to create an Operation with workflow + Then I want to check property "uniqueId" exists + And I want to create an Operation + Then I want to check property "uniqueId" exists + When I want to create an Operation with input output + Then I want to check property "uniqueId" exists + + #List All Operations + When I want to list Operations + + #Get Operation By OperationId + When I want to get an Operation by Id + Then I want to check property "uniqueId" exists + + #Update Operation + When I want to update an Operation + Then I want to check property "uniqueId" exists + + #Delete Operation + When I want to delete an Operation + + #Checkin + When I want to checkin this component + Then I want to check property "lifecycleState" for value "NOT_CERTIFIED_CHECKIN" + + #Submit + Then I want to submit this component + And I want to check property "lifecycleState" for value "READY_FOR_CERTIFICATION" diff --git a/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/ArchiveVlm.feature b/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/ArchiveVlm.feature new file mode 100644 index 0000000000..f4b524b372 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/ArchiveVlm.feature @@ -0,0 +1,42 @@ +Feature: Archive and Restore VLM + + Scenario: Archive VLM with Draft + When I want to create a VLM + Then I want to create input data + Then I want to update the input property "name" with a random value + Then I want to update the input property "type" with value "Universal" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context + Then I want to commit this Item + + Then I want to archive this item + Then I want to list Archived VLMs + Then I want to check that item exits in response + + Scenario: Archive Already Archived VLM - Negative + When I want to create a VLM + Then I want to create input data + Then I want to update the input property "name" with a random value + Then I want to update the input property "type" with value "Universal" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context + Then I want to submit this VLM + + Then I want to archive this item + Then I want to list Archived VLMs + Then I want to check that item exits in response + Then I want the following to fail with error message "Archive item failed, item {item.id} is already Archived" + Then I want to archive this item + + + Scenario: Archive Certified VLM + When I want to create a VLM + Then I want to create input data + Then I want to update the input property "name" with a random value + Then I want to update the input property "type" with value "Universal" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context + Then I want to submit this VLM + + Then I want to archive this item + Then I want to list Archived VLMs + Then I want to check that item exits in response + Then I want to list Active VLMs + Then I want to check that item does not exits in response diff --git a/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/ArchiveVsp.feature b/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/ArchiveVsp.feature new file mode 100644 index 0000000000..2cc057469f --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/ArchiveVsp.feature @@ -0,0 +1,58 @@ +Feature: Archive and Restore VSP + + Background: Init + Given I want to create a VLM + + Scenario: Archive VSP with Draft + When I want to create a VSP with onboarding type "NetworkPackage" + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + Then I want to make sure this Item has status "Draft" + + Then I want to archive this item + Then I want to list Archived VSPs + Then I want to check that item exits in response + Then I want to list Active VSPs + Then I want to check that item does not exits in response + + Scenario: Archive Already Archived VSP - Negative + When I want to create a VSP with onboarding type "NetworkPackage" + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + Then I want to commit this Item + + Then I want to archive this item + Then I want to list Archived VSPs + Then I want to check that item exits in response + Then I want to list Active VSPs + Then I want to check that item does not exits in response + + Then I want the following to fail with error message "Archive item failed, item {item.id} is already Archived" + Then I want to archive this item + + + Scenario: Archive Certified VSP + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + Then I want to make sure this Item has status "Draft" + + When I want to submit this VSP + Then I want to make sure this Item has status "Certified" + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + + Then I want to archive this item + Then I want to list Archived VSPs + Then I want to check that item exits in response + Then I want to list Active VSPs + Then I want to check that item does not exits in response
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature b/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature new file mode 100644 index 0000000000..f68eece6a8 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/ArchiveItem/FilterArchivedVSPpackage.feature @@ -0,0 +1,40 @@ +Feature: Filter Archived VSP Package Details + + Background: Init + Given I want to create a VLM + + Scenario: Active VSP Package + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + Then I want to commit this Item + Then I want to submit this VSP + Then I want to package this VSP + Then I want to make sure this Item has status "Certified" + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + + Then I want to list Active VSPs packages + Then I want to check that VSP package exits in response + + + Scenario: Archived VSP Package + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + Then I want to commit this Item + Then I want to submit this VSP + Then I want to package this VSP + Then I want to make sure this Item has status "Certified" + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + Then I want to archive this item + + Then I want to list Archived VSPs packages + Then I want to check that VSP package exits in response + + diff --git a/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVLMCertified.feature b/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVLMCertified.feature new file mode 100644 index 0000000000..4eb31aeafe --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVLMCertified.feature @@ -0,0 +1,24 @@ +Feature: Delete VLM Certified + + Scenario: Delete VLM that was certified - negative + When I want to create a VLM + Then I want to create input data + Then I want to update the input property "name" with a random value + Then I want to update the input property "type" with value "Universal" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context + Then I want to copy to property "lastProcessId" from response data path "value" + Then I want to commit this Item + + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + Then I want to make sure this Item has status "Draft" + When I want to submit this VLM + Then I want to make sure this Item has status "Certified" + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + + Then I want the following to fail with error message "VLM has been certified and cannot be deleted." + Then I want to delete this VLM + + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 diff --git a/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVLMDraft.feature b/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVLMDraft.feature new file mode 100644 index 0000000000..ad8bec50d3 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVLMDraft.feature @@ -0,0 +1,24 @@ +Feature: Delete VLM + +Scenario: Delete VLM with only draft + When I want to create a VLM + Then I want to create input data + Then I want to update the input property "name" with a random value + Then I want to update the input property "type" with value "Universal" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-key-groups" with the input data from the context + Then I want to copy to property "lastProcessId" from response data path "value" + Then I want to commit this Item + + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + Then I want to make sure this Item has status "Draft" + + Then I want to delete this VLM + + Then I want the following to fail with error code "ENTITY_NOT_FOUND" + Then I want to get path "/items/{item.id}/versions" + + + + + diff --git a/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVSPCertified.feature b/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVSPCertified.feature new file mode 100644 index 0000000000..35a506a010 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVSPCertified.feature @@ -0,0 +1,29 @@ +Feature: Delete VSP Draft + + Background: Init + Given I want to create a VLM + + Scenario: Delete VSP with only draft + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + Then I want to make sure this Item has status "Draft" + + When I want to submit this VSP + Then I want to make sure this Item has status "Certified" + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + + Then I want the following to fail with error message "VSP has been certified and cannot be deleted." + Then I want to delete this VSP + + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + diff --git a/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVSPDraft.feature b/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVSPDraft.feature new file mode 100644 index 0000000000..5248131618 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/DeleteItem/DeleteVSPDraft.feature @@ -0,0 +1,22 @@ +Feature: Delete VSP Certified + + Background: Init + Given I want to create a VLM + + Scenario: Delete VSP with certified - negative + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to make sure this Item has status "Draft" + + When I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + + Then I want to get path "/items/{item.id}/versions" + Then I want to check property "listCount" for value 1 + Then I want to make sure this Item has status "Draft" + + Then I want to delete this VSP + + Then I want the following to fail with error code "ENTITY_NOT_FOUND" + Then I want to get path "/items/{item.id}/versions" diff --git a/cucumber-js-test-apis-ci/features/Onboarding/ListItems/ListItemsFilters.feature b/cucumber-js-test-apis-ci/features/Onboarding/ListItems/ListItemsFilters.feature new file mode 100644 index 0000000000..8b0a23213d --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/ListItems/ListItemsFilters.feature @@ -0,0 +1,86 @@ +Feature: List items with various filters + + Background: Init - create various items in order to test list items filters + Given I want to set the user to "cs0008" + Given I want to create a VLM + Then I want to copy to property "noPermissionDraftVlmId" from response data path "itemId" + + Given I want to create a VLM + Then I want to copy to property "noPermissionCertifiedVlmId" from response data path "itemId" + And I want to submit this VLM + + Given I want to set the user to "mb1001" + + Given I want to create a VLM + Then I want to copy to property "draftVlmId" from response data path "itemId" + + Given I want to create a VLM + Then I want to copy to property "certifiedVlmId" from response data path "itemId" + And I want to submit this VLM + + Given I want to create a VLM + Then I want to copy to property "archivedDraftVlmId" from response data path "itemId" + And I want to archive this item + + Given I want to create a VLM + Then I want to copy to property "archivedCertifiedVlmId" from response data path "itemId" + And I want to submit this VLM + And I want to archive this item + + Given I want to create a VSP with onboarding type "NetworkPackage" + Then I want to copy to property "npDraftVspId" from response data path "itemId" + + Given I want to create a VSP with onboarding type "Manual" + Then I want to copy to property "manualDraftVspId" from response data path "itemId" + + Scenario: List workspace items - active, draft, editable by the user + When I want to get path "/items?itemStatus=ACTIVE&versionStatus=Draft&permission=Owner,Contributor" + + Then I want to check that element in the response list with "id" equals to value of saved property "draftVlmId" exists + And I want to check that element in the response list with "id" equals to value of saved property "npDraftVspId" exists + And I want to check that element in the response list with "id" equals to value of saved property "manualDraftVspId" exists + + But I want to check that element in the response list with "id" equals to value of saved property "noPermissionDraftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "noPermissionCertifiedVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "certifiedVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "archivedDraftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "archivedCertifiedVlmId" does not exist + + Scenario: List catalog items - active, certified + When I want to get path "/items?itemStatus=ACTIVE&versionStatus=Certified" + + Then I want to check that element in the response list with "id" equals to value of saved property "noPermissionCertifiedVlmId" exists + And I want to check that element in the response list with "id" equals to value of saved property "certifiedVlmId" exists + + But I want to check that element in the response list with "id" equals to value of saved property "draftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "npDraftVspId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "manualDraftVspId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "noPermissionDraftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "archivedDraftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "archivedCertifiedVlmId" does not exist + + Scenario: List archived certified items + When I want to get path "/items?itemStatus=ARCHIVED&versionStatus=Certified" + + Then I want to check that element in the response list with "id" equals to value of saved property "archivedCertifiedVlmId" exists + + But I want to check that element in the response list with "id" equals to value of saved property "archivedDraftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "noPermissionCertifiedVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "certifiedVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "draftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "npDraftVspId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "manualDraftVspId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "noPermissionDraftVlmId" does not exist + + Scenario: List only active draft manual vsps + vlms owned by the user + When I want to get path "/items?itemStatus=ACTIVE&versionStatus=Draft&onboardingMethod=Manual&permission=Owner" + + Then I want to check that element in the response list with "id" equals to value of saved property "draftVlmId" exists + And I want to check that element in the response list with "id" equals to value of saved property "manualDraftVspId" exists + + But I want to check that element in the response list with "id" equals to value of saved property "npDraftVspId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "noPermissionDraftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "noPermissionCertifiedVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "certifiedVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "archivedDraftVlmId" does not exist + And I want to check that element in the response list with "id" equals to value of saved property "archivedCertifiedVlmId" does not exist diff --git a/cucumber-js-test-apis-ci/features/Onboarding/ListItems/ListItemsFiltersFailures.feature b/cucumber-js-test-apis-ci/features/Onboarding/ListItems/ListItemsFiltersFailures.feature new file mode 100644 index 0000000000..53807af47a --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/ListItems/ListItemsFiltersFailures.feature @@ -0,0 +1,24 @@ +Feature: List items with incorrect filter values + + Scenario: Filter by incorrect item type - negative + When I want the following to fail with error code "GENERAL_ERROR_REST_ID" + Then I want to get path "/items?itemType=bsp" + + Scenario: Filter by incorrect permission - negative + When I want the following to fail with error code "GENERAL_ERROR_REST_ID" + Then I want to get path "/items?permission=Contributer" + + Scenario: Filter by incorrect version status - negative + When I want the following to fail with error code "GENERAL_ERROR_REST_ID" + Then I want to get path "/items?versionStatus=Draftt" + + Scenario: Filter by incorrect item status - negative + When I want the following to fail with error code "GENERAL_ERROR_REST_ID" + Then I want to get path "/items?itemStatus=active" + + Scenario: Filter by incorrect onboarding method - negative + When I want the following to fail with error code "GENERAL_ERROR_REST_ID" + Then I want to get path "/items?onboardingMethod=heat" + + Then I want to print the context data + diff --git a/cucumber-js-test-apis-ci/features/Onboarding/UniqueValue.feature b/cucumber-js-test-apis-ci/features/Onboarding/UniqueValue.feature new file mode 100644 index 0000000000..31e41b9931 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/Onboarding/UniqueValue.feature @@ -0,0 +1,33 @@ +Feature: Unique value + + Scenario: List unique types + When I want to get path "/unique-types" + Then I want to check property "listCount" for value 2 + And I want to check property "results[0]" for value "VspName" + And I want to check property "results[1]" for value "VlmName" + + Scenario: Get unique value - non existing type (negative) + Given I want the following to fail with error code "UNIQUE_TYPE_NOT_FOUND" + When I want to get path "/unique-types/nonExistingType/values/someValue" + + Scenario: Get unique value - non existing VLM name + When I want to get path "/unique-types/VlmName/values/nonExistingName" + Then I want to check property "occupied" to be false + + Scenario: Get unique value - non existing VSP name + When I want to get path "/unique-types/VspName/values/nonExistingName" + Then I want to check property "occupied" to be false + + Scenario: Get unique value - existing VLM name + Given I want to create a VLM + + When I want to get path "/unique-types/VlmName/values/{vlm.name}" + Then I want to check property "occupied" to be true + + Scenario: Get unique value - existing VSP name + Given I want to create a VLM + And I want to create a VSP with onboarding type "NetworkPackage" + And I want to get path "/vendor-software-products/{item.id}/versions/{item.versionId}" + + When I want to get path "/unique-types/VspName/values/{responseData.name}" + Then I want to check property "occupied" to be true
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/TOSCA/CapabilityDataType.feature b/cucumber-js-test-apis-ci/features/TOSCA/CapabilityDataType.feature new file mode 100644 index 0000000000..ef240e33a3 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/TOSCA/CapabilityDataType.feature @@ -0,0 +1,20 @@ +Feature: Tosca Capability Refactor Flow + + Background: Init + Given I want to create a VLM + Given I want to set all Togglz to be "true" + + Scenario: Test Capability type in service template + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/zipWithExternalPort.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + And I want to compare the content of the entry "Definitions/Nested_FSB1ServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" with file "resources/yaml/Nested_FSB1ServiceTemplate.yaml" + + Then I want to create a VF for this Item
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/TOSCA/HeatToToscaTranslation.feature b/cucumber-js-test-apis-ci/features/TOSCA/HeatToToscaTranslation.feature new file mode 100644 index 0000000000..ae0803687f --- /dev/null +++ b/cucumber-js-test-apis-ci/features/TOSCA/HeatToToscaTranslation.feature @@ -0,0 +1,194 @@ +Feature: Tosca Validation Flow + + Background: Init + Given I want to create a VLM + Given I want to set all Togglz to be "true" + + Scenario: Full - Create and submit VSP Network Package and Create VF + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/BASE_MUX.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Validate Input parameter - annotation was added + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/inputsForNestedHeat.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + When I want to load the yaml content of the entry "Definitions/MainServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + + Then I want to check property "topology_template.inputs.pcm_flavor_name.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.pcm_flavor_name.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.pcm_flavor_name.annotations.source.properties.vf_module_label" to have length 2 + Then I want to check property "topology_template.inputs.pcm_flavor_name.annotations.source.properties.vf_module_label[0]" for value "main-heat2" + Then I want to check property "topology_template.inputs.pcm_flavor_name.annotations.source.properties.vf_module_label[1]" for value "main-heat1" + Then I want to check property "topology_template.inputs.pcm_flavor_name.annotations.source.properties.param_name" for value "pcm_flavor_name" + + Then I want to check property "topology_template.inputs.sm_server_names.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.sm_server_names.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.sm_server_names.annotations.source.properties.vf_module_label" to have length 1 + Then I want to check property "topology_template.inputs.sm_server_names.annotations.source.properties.vf_module_label[0]" for value "main-heat1" + Then I want to check property "topology_template.inputs.sm_server_names.annotations.source.properties.param_name" for value "sm_server_names" + + Then I want to check property "topology_template.inputs.dummy_net_netmask_1.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.dummy_net_netmask_1.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.dummy_net_netmask_1.annotations.source.properties.vf_module_label" to have length 1 + Then I want to check property "topology_template.inputs.dummy_net_netmask_1.annotations.source.properties.vf_module_label[0]" for value "main-heat2" + Then I want to check property "topology_template.inputs.dummy_net_netmask_1.annotations.source.properties.param_name" for value "dummy_net_netmask_1" + + Then I want to create a VF for this Item + + Scenario: Validate Input parameter for volume HEAT file + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/annotationMultVolume.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + When I want to load the yaml content of the entry "Definitions/MainServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + + Then I want to check property "topology_template.inputs.pcrf_oam_vol_size.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.pcrf_oam_vol_size.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.pcrf_oam_vol_size.annotations.source.properties.vf_module_label" to have length 1 + Then I want to check property "topology_template.inputs.pcrf_oam_vol_size.annotations.source.properties.vf_module_label[0]" for value "hot-nimbus-oam_v1.0" + Then I want to check property "topology_template.inputs.pcrf_oam_vol_size.annotations.source.properties.param_name" for value "pcrf_oam_vol_size" + + Then I want to check property "topology_template.inputs.pcrf_pcm_vol_size.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.pcrf_pcm_vol_size.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.pcrf_pcm_vol_size.annotations.source.properties.vf_module_label" to have length 1 + Then I want to check property "topology_template.inputs.pcrf_pcm_vol_size.annotations.source.properties.vf_module_label[0]" for value "hot-nimbus-pcm_v1.0" + Then I want to check property "topology_template.inputs.pcrf_pcm_vol_size.annotations.source.properties.param_name" for value "pcrf_pcm_vol_size" + + + Then I want to check property "topology_template.inputs.pcm-volumes_and_pcm_main_param.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.pcm-volumes_and_pcm_main_param.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.pcm-volumes_and_pcm_main_param.annotations.source.properties.vf_module_label" to have length 1 + Then I want to check property "topology_template.inputs.pcm-volumes_and_pcm_main_param.annotations.source.properties.vf_module_label[0]" for value "hot-nimbus-pcm_v1.0" + Then I want to check property "topology_template.inputs.pcm-volumes_and_pcm_main_param.annotations.source.properties.param_name" for value "pcm-volumes_and_pcm_main_param" + + Then I want to check property "topology_template.inputs.oam-volumes_pcm_main_param.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.oam-volumes_pcm_main_param.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.oam-volumes_pcm_main_param.annotations.source.properties.vf_module_label" to have length 2 + Then I want to check property "topology_template.inputs.oam-volumes_pcm_main_param.annotations.source.properties.vf_module_label[0]" for value "hot-nimbus-pcm_v1.0" + Then I want to check property "topology_template.inputs.oam-volumes_pcm_main_param.annotations.source.properties.vf_module_label[1]" for value "hot-nimbus-oam_v1.0" + Then I want to check property "topology_template.inputs.oam-volumes_pcm_main_param.annotations.source.properties.param_name" for value "oam-volumes_pcm_main_param" + + Then I want to check property "topology_template.inputs.oam-volumes_pcm-volumes_and_oam_main_param.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.oam-volumes_pcm-volumes_and_oam_main_param.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.oam-volumes_pcm-volumes_and_oam_main_param.annotations.source.properties.vf_module_label" to have length 2 + Then I want to check property "topology_template.inputs.oam-volumes_pcm-volumes_and_oam_main_param.annotations.source.properties.vf_module_label[0]" for value "hot-nimbus-pcm_v1.0" + Then I want to check property "topology_template.inputs.oam-volumes_pcm-volumes_and_oam_main_param.annotations.source.properties.vf_module_label[1]" for value "hot-nimbus-oam_v1.0" + Then I want to check property "topology_template.inputs.oam-volumes_pcm-volumes_and_oam_main_param.annotations.source.properties.param_name" for value "oam-volumes_pcm-volumes_and_oam_main_param" + + Then I want to create a VF for this Item + + Scenario: Validate Input parameter - annotation was no added for Volume associated to Nested + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/volumeUnderNested.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + When I want to load the yaml content of the entry "Definitions/nestedServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + Then I want to check property "topology_template.inputs.CMAUI_volume_type.annotations" does not exist + + Then I want to create a VF for this Item + + Scenario: Validate Input parameter - annotation was not added + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/inputsForNestedHeat.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + When I want to load the yaml content of the entry "Definitions/MainServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + Then I want to check property "topology_template.inputs.OS::stack_name" exists + Then I want to check property "topology_template.inputs.OS::stack_name.annotations" does not exist + + When I want to load the yaml content of the entry "Definitions/nested-pcm_v0.1ServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + Then I want to check property "topology_template.inputs.port_pcm_port_0_network_role.annotations" does not exist + Then I want to check property "topology_template.inputs.availabilityzone_name.annotations" does not exist + Then I want to check property "topology_template.inputs.pcm_server_name.annotations" does not exist + Then I want to check property "topology_template.inputs.sm_server_names.annotations" does not exist + + When I want to load the yaml content of the entry "Definitions/nested-pcm_v0.2ServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + Then I want to check property "topology_template.inputs.port_pcm_port_13_mac_requirements.annotations" does not exist + Then I want to check property "topology_template.inputs.availabilityzone_name.annotations" does not exist + Then I want to check property "topology_template.inputs.pcm_server_name.annotations" does not exist + + When I want to load the yaml content of the entry "Definitions/Nested_computeServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + Then I want to check property "topology_template.inputs.compute_compute_user_data_format.annotations" does not exist + Then I want to check property "topology_template.inputs.vm_image_name.annotations" does not exist + Then I want to check property "topology_template.inputs.compute_compute_name.annotations" does not exist + + Then I want to create a VF for this Item + + Scenario: Validate Input parameter for nested HEAT belongs to volume HEAT + when volume heat is associated to main HEAT + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/nested-belongs-to-volume.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + When I want to load the yaml content of the entry "Definitions/ocgmgr_nested_volumeServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + Then I want to check property "topology_template.inputs.volume_type.annotations" does not exist + Then I want to check property "topology_template.inputs.vnf_name.annotations" does not exist + Then I want to check property "topology_template.inputs.index.annotations" does not exist + Then I want to check property "topology_template.inputs.size.annotations" does not exist + + When I want to load the yaml content of the entry "Definitions/MainServiceTemplate.yaml" in the zip "resources/downloads/VSPPackage.zip" to context + + Then I want to check property "topology_template.inputs.index" does not exist + Then I want to check property "topology_template.inputs.size" does not exist + Then I want to check property "topology_template.inputs.volume_type" does not exist + + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.type" for value "org.openecomp.annotations.Source" + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.properties.source_type" for value "HEAT" + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.properties.vf_module_label" to have length 6 + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.properties.vf_module_label[0]" for value "ocgapp_03" + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.properties.vf_module_label[1]" for value "ocgapp_02" + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.properties.vf_module_label[2]" for value "ocgmgr" + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.properties.vf_module_label[3]" for value "ocgapp_01" + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.properties.vf_module_label[4]" for value "ocgapp_04" + Then I want to check property "topology_template.inputs.vnf_name.annotations.source.properties.vf_module_label[5]" for value "base_ocg" + + Then I want to create a VF for this Item diff --git a/cucumber-js-test-apis-ci/features/TOSCA/HeatValidation.feature b/cucumber-js-test-apis-ci/features/TOSCA/HeatValidation.feature new file mode 100644 index 0000000000..dba54ff9ff --- /dev/null +++ b/cucumber-js-test-apis-ci/features/TOSCA/HeatValidation.feature @@ -0,0 +1,15 @@ +Feature: Heat Validation Flow + + Background: Init + Given I want to create a VLM + Given I want to set all Togglz to be "true" + + Scenario: Test Validation Error + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/errorHeat.zip" + And I want to process the NetworkPackage file for this VSP + And I want to print the context data + + Then I want to check property "errors['first.env'][0].level" for value "ERROR" + Then I want to check property "errors['first.env'][0].message" for value "ERROR: [YML1]: Invalid YAML format Problem - [empty yaml]"
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidation-positive.feature b/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidation-positive.feature new file mode 100644 index 0000000000..280ec8b791 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidation-positive.feature @@ -0,0 +1,14 @@ +Feature: Tosca VMI Positive Flow + + Background: Init + Given I want to create a VLM + Given I want to set all Togglz to be "true" + + Scenario: VirtualMachineInterface Validation Flow - No Validations Errors + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlan-tagging-positive.zip" + And I want to process the NetworkPackage file for this VSP + And I want to print the context data + + Then I want to check property "errors['nested.yml'][0].level" does not exist diff --git a/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationGuideline3violations.feature b/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationGuideline3violations.feature new file mode 100644 index 0000000000..b0e5b4494a --- /dev/null +++ b/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationGuideline3violations.feature @@ -0,0 +1,31 @@ +Feature: Tosca VMI Flow + + Background: Init + Given I want to create a VLM + Given I want to set all Togglz to be "true" + + Scenario:VirtualMachineInterface Validation Flow - Guideline Validation issues present + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/all-violations.zip" + And I want to process the NetworkPackage file for this VSP + And I want to print the context data + + Then I want to check property "errors['nested.yml'][3].level" for value "WARNING" + Then I want to check property "errors['nested.yml'][3].message" for value: + """ + WARNING: [VlANG1]: VLAN Resource will not be translated as the VLAN Sub-interface [template_Vlan_2] is not modeled as resource group + """ + + + Then I want to check property "errors['nested.yml'][1].level" for value "ERROR" + Then I want to check property "errors['nested.yml'][1].message" for value: + """ + ERROR: [VlANG2]: There should not be any Compute Server Node, Port, Parent Port in nested file [nested.yml] +""" + + Then I want to check property "errors['main.yml'][6].level" for value "WARNING" + Then I want to check property "errors['main.yml'][6].message" for value: + """ + WARNING: [VlANG3]: Network role associated with VLAN Sub-interface id[test_Vlan1] is not following the naming convention + """
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationHeatResourceMissingProperties.feature b/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationHeatResourceMissingProperties.feature new file mode 100644 index 0000000000..3cf52f6527 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationHeatResourceMissingProperties.feature @@ -0,0 +1,31 @@ +Feature: Tosca VMI Flow + + Background: Init + Given I want to create a VLM + Given I want to set all Togglz to be "true" + + Scenario: VirtualMachineInterface Validation Flow - Missing Refs Element Validation Error + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/refs_missing.zip" + And I want to process the NetworkPackage file for this VSP + And I want to print the context data + + Then I want to check property "errors['nested.yml'][0].level" for value "WARNING" + Then I want to check property "errors['nested.yml'][0].message" for value: + """ + WARNING: [VLAN2]: Parent port property virtual_machine_interface_refs is missing in VLAN Resource ID [template_Vlan_2] + """ + + Scenario: VirtualMachineInterface Validation Flow - Missing Tag Validation Error + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/tag_missing.zip" + And I want to process the NetworkPackage file for this VSP + And I want to print the context data + + Then I want to check property "errors['nested.yml'][0].level" for value "WARNING" + Then I want to check property "errors['nested.yml'][0].message" for value: + """ + WARNING: [VLAN2]: VLAN Tag property virtual_machine_interface_properties_sub_interface_vlan_tag is missing in VLAN Resource ID [template_Vlan_2] + """
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationHeatResourceMultipleParents.feature b/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationHeatResourceMultipleParents.feature new file mode 100644 index 0000000000..0b9e092875 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/TOSCA/VirtualMachineInterfaceValidationHeatResourceMultipleParents.feature @@ -0,0 +1,18 @@ +Feature: Tosca VMI Flow + + Background: Init + Given I want to create a VLM + Given I want to set all Togglz to be "true" + + Scenario: VirtualMachineInterface Validation Flow - Multiple Parent Port Validation Error + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/multiple-parents.zip" + And I want to process the NetworkPackage file for this VSP + And I want to print the context data + + Then I want to check property "errors['nested.yml'][0].level" for value "ERROR" + Then I want to check property "errors['nested.yml'][0].message" for value: + """ + ERROR: [VLAN1]: More than one parent port found, there should be only one parent port for a VLAN sub-interface ID [template_Vlan_2] + """
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/TOSCA/VlanTagging.feature b/cucumber-js-test-apis-ci/features/TOSCA/VlanTagging.feature new file mode 100644 index 0000000000..7adf99fae2 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/TOSCA/VlanTagging.feature @@ -0,0 +1,372 @@ +Feature: Vlan Tagging - Full Flow tests + + Background: Init + Given I want to create a VLM + Given I want to set all Togglz to be "true" + + Scenario: Pattern 1A Full - Create and submit VSP Network Package containing one compute, one + port and one subinterface connected to that port. Both port and subinterface are connected to + different internal networks. + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1a/subInterfaceGetAttrInOut.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1A Full - Create and submit VSP Network Package containing one compute, one + port and one regular nested resource subinterface connected to that port. Only port is connected + to an internal network. + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1a/regularNestedSubinterface.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1A Negative - Create and submit VSP Network Package containing one compute, one + port and multiple subinterface resource groups which are not bound to parent port. Only port is + connected to an internal network. + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1a/negativeNotBoundToParentPort.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1B Full - Create and submit VSP Network Package containing Sub Interface and different compute type and Create VF + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1b/diffCompute_SubInterface.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1B Full - Create and submit VSP Network Package containing Sub Interface and same Compute type and different Port type and Create VF + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1b/diffPort_SubInterface.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1B Full - Create and submit VSP Network Package containing Sub Interface and same Compute type same Port type and different Sub interface file and Create VF + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1b/diffSubInterfaceFile.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1B Full - Create and submit VSP Network Package containing Sub Interface and same Compute type different Port type and same Sub interface file and Create VF + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1b/regularNestedSubInterface.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1C1 Full - Create and submit VSP Network Package containing two computes of different type, four ports of two types + each and four subinterface resource groups of two types each and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1c1/multiplePortsMultipleVlans.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1C1 Full - Create and submit VSP Network Package containing two computes, two ports of same type + connected to network and two subinterface resource represented through a regular nested resource and not using a + resource group not connected to network and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1c1/regularNestedSubInterface.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1C2 Full - Create and submit VSP Network Package containing two computes of the same type, + each one has one port with one sub interface (same type) resource group have a different count and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1c2/differentResourceGroupCount.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 1C2 Full - Create and submit VSP Network Package containing two computes of the same type, + each one has one port with one sub interface each (same type, different network connectivity) and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern1c2/differentNetwork.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 4 Full - Create and submit VSP Network Package containing one computes, one + port represented through a nested resource having one subinterface nested resource and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern4/Pattern_4_SinglePort_SingleSubInterface.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 4 Full - Create and submit VSP Network Package containing one computes, two + ports represented through a nested resource both port connected to different nested subinterface + resource and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern4/Pattern_4_MultiplePort_MultipleSubInterface.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 4 Full - Create and submit VSP Network Package containing one computes, one + port represented through a regular nested resource and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern4/regularNestedSubInterface.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 5 Full - Create and submit VSP Network Package containing one nested + component which is having two VFCs of different type both connected with two port and one port + is connected with sub interface resource and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern5/Pattern_5_NestedResourceWithMultipleComputeAndPort.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: Pattern 5 Full - Create and submit VSP Network Package containing different + subinterface connectivity scenario and Create VF + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/pattern5/Pattern_5ComplexVSPWithDiffSubInfConn.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: VFC Instance Group per Network Role - Create and submit VSP Network Package of pattern 1A heat + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/vfcinstancegroup/groupPattern1aHeat.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: VFC Instance Group per Network Role - Create and submit VSP Network Package of pattern 1B heat + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/vfcinstancegroup/groupPattern1bHeat.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: VFC Instance Group per Network Role - Create and submit VSP Network Package of pattern 1C1 heat + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/vfcinstancegroup/groupPattern1c1Heat.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: VFC Instance Group per Network Role - Create and submit VSP Network Package of pattern 1C2 heat + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/vfcinstancegroup/groupPattern1c2Heat.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item + + Scenario: VFC Instance Group per Network Role - Create and submit VSP Network Package of pattern 4 heat + + When I want to create a VSP with onboarding type "NetworkPackage" + + Then I want to upload a NetworkPackage for this VSP from path "resources/uploads/vlantagging/vfcinstancegroup/groupPattern4Heat.zip" + And I want to process the NetworkPackage file for this VSP + + Then I want to commit this Item + And I want to submit this VSP + And I want to package this VSP + + Then I want to make sure this Item has status "Certified" + + Then I want to get the package for this Item to path "resources/downloads/VSPPackage.zip" + + Then I want to create a VF for this Item
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/features/UserFeedback/TestMD5.feature b/cucumber-js-test-apis-ci/features/UserFeedback/TestMD5.feature new file mode 100644 index 0000000000..bb80c92d06 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/UserFeedback/TestMD5.feature @@ -0,0 +1,68 @@ +# Copyright © 2018 European Support Limited +# +# 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. + +Feature: User Feedback - Test MD5 + + Scenario: Test MD5 + + When I want to create a VLM + Then I want to copy to property "licensingVersion" from response data path "version.id" + + #create feature group + When I want to create input data + Then I want to update the input property "name" with value "FG1" + Then I want to update the input property "partNumber" with value "999" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/feature-groups" with the input data from the context + Then I want to copy to property "featureGroupId" from response data path "value" + + #create license agreements + When I want to create input data + Then I want to update the input property "name" with value "LA" + Then I want to update the input property "licenseTerm.choice" with value "Unlimited" + Then I want to update the input property "addedFeatureGroupsIds[0]" from property "featureGroupId" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/license-agreements" with the input data from the context + Then I want to copy to property "licenseAgreement" from response data path "value" + + When I want to create a VSP with onboarding type Manual + Then I want to make sure this Item has status "Draft" + + When I want to add a component + + #create image + When I want to create input data + Then I want to update the input property "fileName" with value "Image_1" + Then I want to create for path "/vendor-software-products/{vsp.id}/versions/{vsp.versionId}/components/{componentId}/images" with the input data from the context + + #update image questionnaire + Then I want to get the questionnaire for this path "/vendor-software-products/{vsp.id}/versions/{vsp.versionId}/components/{componentId}/images/{responseData.id}/questionnaire" + And I want to update this questionnaire with value "md5" for property "5555555555555555555555555555555555555555555555555555555555555" + And I want to update this questionnaire with value "version" for property "1" + And I want to update this questionnaire + + #create compute flavor + When I want to create input data + Then I want to update the input property "name" with value "ComputeFlavor1" + When I want to create for path "/vendor-software-products/{vsp.id}/versions/{vsp.versionId}/components/{componentId}/compute-flavors" with the input data from the context + Then I want to copy to property "computeFlavorId" from response data path "id" + + #create deployment flavor with Component , compute flavor associations + When I want to create input data + Then I want to update the input property "model" with value "DeploymentFlavorModel" + Then I want to update the input property "componentComputeAssociations[0].componentId" from property "componentId" + Then I want to update the input property "componentComputeAssociations[0].computeFlavorId" from property "computeFlavorId" + Then I want to update the input property "featureGroupId" from property "featureGroupId" + Then I want to create for path "/vendor-software-products/{vsp.id}/versions/{vsp.versionId}/deployment-flavors" with the input data from the context + + Then I want the following to fail + When I want to submit this VSP diff --git a/cucumber-js-test-apis-ci/features/UserFeedback/TestMRN.feature b/cucumber-js-test-apis-ci/features/UserFeedback/TestMRN.feature new file mode 100644 index 0000000000..161ea57341 --- /dev/null +++ b/cucumber-js-test-apis-ci/features/UserFeedback/TestMRN.feature @@ -0,0 +1,50 @@ +# Copyright © 2018 European Support Limited +# +# 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. + +Feature: User Feedback - Enhance EP & LKG to include MRN + + Scenario: Test Feature Group and Entitlement Pool + + Then I want to create a VLM + Then I want to make sure this Item has status "Draft" + + When I want to get path "/items/{item.id}/versions/{item.versionId}/revisions" + Then I want to check property "listCount" for value 1 + + Then I want to create input data + Then I want to update the input property "name" with value "FG_01" + Then I want to update the input property "description" with value "FG without MRN" + Then I want to update the input property "partNumber" with value "999" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/feature-groups" with the input data from the context + + When I want to create input data + Then I want to update the input property "name" with value "EP_01" + Then I want to update the input property "description" with value "EP without MRN" + Then I want the following to fail + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/entitlement-pools" with the input data from the context + + + When I want to create input data + Then I want to update the input property "name" with value "EP_02" + Then I want to update the input property "description" with value "EP with MRN" + Then I want to update the input property "manufacturerReferenceNumber" with value "12345" + Then I want to create for path "/vendor-license-models/{item.id}/versions/{item.versionId}/entitlement-pools" with the input data from the context + Then I want to get path "/vendor-license-models/{item.id}/versions/{item.versionId}/entitlement-pools/{responseData.value}" + Then I want to check property "manufacturerReferenceNumber" for value "12345" + + + + + + diff --git a/cucumber-js-test-apis-ci/package.json b/cucumber-js-test-apis-ci/package.json new file mode 100644 index 0000000000..0aecbdc4fd --- /dev/null +++ b/cucumber-js-test-apis-ci/package.json @@ -0,0 +1,31 @@ +{ + "name": "sdctests", + "version": "1.0.0", + "description": "SDC Cucumber testing", + "main": "reporter.js", + "directories": { + "doc": "docs" + }, + "scripts": { + "test": "cucumber-js", + "test-and-report": "npm-run-all -c -s test cucumber-html-report", + "cucumber-html-report": "node plugins/reporter.js", + "cucumber-docs": "jsdoc ./stepDefinitions -c plugins/jsdoc_config.json --readme plugins/README.md" + }, + "author": "", + "license": "Apache-2.0", + "dependencies": { + "assert": "^1.4.1", + "cucumber": "^3.2.1", + "cucumber-html-reporter": "^3.0.4", + "docdash": "^0.4.0", + "jsdoc": "^3.5.5", + "jsdoc-one-page": "0.0.5", + "lodash": "^4.17.4", + "node-zip": "^1.1.1", + "normalize-newline": "^3.0.0", + "npm-run-all": "^4.1.2", + "request": "^2.83.0", + "yamljs": "^0.3.0" + } +} diff --git a/cucumber-js-test-apis-ci/plugins/README.md b/cucumber-js-test-apis-ci/plugins/README.md new file mode 100644 index 0000000000..956fe77276 --- /dev/null +++ b/cucumber-js-test-apis-ci/plugins/README.md @@ -0,0 +1,23 @@ +<br> +<h1>Welcome!</h1> +This is the documentation for using the BDD testing framework for SDC.<br> +The Modules on the left contains all steps for particalar aress and/or explanations of what they do.<br> +<br><br> +<h3>How to set the server configuration</h3> +<li> Copy the config.json to devConfig.json +<li> Replace the server and user values with the correct values +<h3>How to run with Maven</h3> +<li>"mvn install" will install npm if needed, download all modules and create the documentation under the "docs" folder +<li>"mvn test-and-report" will run all tests in the features folder and create an HTML report under the "reports" folder +<h3>How to develop tests</h3> +You can open the project in IntelliJ and Webstorm to run and develop scenarios.<br> +<li><b>You will need to install the Cucumber.Js plugin</b> In order to install, go to "Settings/Plugins". If cucumber.js in not on the list, go to "Browse repositories.." and install . +<li>First time only: Right click on feature file and try to run. Now go to "Run/edit configurations" and set the "executable path" to the "node_modules\.bin\cucumber-js.cmd" under your current project. +<li>Now you can run the feature files by right clicking on the file and selecting "Run" from IDEA.<br> +<li>Add to existing scenarios or create new files under the "features" directory for additional tests +<br> +<li>You can also run a specific test from the command line by running "npm run test -- [features/path to file] +<h3>More Information</h3> +<li> More on <a href="https://cucumber.io/docs/reference">Cucumber</a> +<li> More on <a herf="https://github.com/cucumber/cucumber/wiki/Gherkin">Gherkin</a> +<li> More on <a href="https://github.com/cucumber/cucumber-js">Cucumber-js</a> diff --git a/cucumber-js-test-apis-ci/plugins/jsdoc_config.json b/cucumber-js-test-apis-ci/plugins/jsdoc_config.json new file mode 100644 index 0000000000..a5a608e805 --- /dev/null +++ b/cucumber-js-test-apis-ci/plugins/jsdoc_config.json @@ -0,0 +1,15 @@ +{ + "tags": { + "allowUnknownTags": true + }, + "templates": { + "default": { + "outputSourceFiles": false + } + }, + "plugins": ["plugins/steps"], + "opts": { + "template": "node_modules/jsdoc-one-page", + "destination": "docs/" + } +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/plugins/reporter.js b/cucumber-js-test-apis-ci/plugins/reporter.js new file mode 100644 index 0000000000..8913789c95 --- /dev/null +++ b/cucumber-js-test-apis-ci/plugins/reporter.js @@ -0,0 +1,31 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +var reporter = require('cucumber-html-reporter'); + +var options = { + theme: 'bootstrap', + jsonFile: 'report/report.json', + output: 'report/report.html', + reportSuiteAsScenarios: true, + launchReport: false, + metadata: { + "ONAP" : "Some build", + "Executed": "Local" + } +}; + +reporter.generate(options); + diff --git a/cucumber-js-test-apis-ci/plugins/steps.js b/cucumber-js-test-apis-ci/plugins/steps.js new file mode 100644 index 0000000000..2faa7efbd8 --- /dev/null +++ b/cucumber-js-test-apis-ci/plugins/steps.js @@ -0,0 +1,65 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +/** + * @module plugins/steptag + */ +'use strict'; + + +exports.handlers = { + /** + * Support @step tag. + * + * @step description + */ + newDoclet: function(e) { + var tags = e.doclet.tags; + var tag; + var value; + + // any user-defined tags in this doclet? + if (typeof tags !== 'undefined') { + + tags = tags.filter(function($) { + return $.title === 'step' || $.title === 'examplefile'; + }); + + if (tags.length) { + // take the first one + tag = tags[0]; + let step = null; + let exampleFile = null; + for (tag in tags) { + if (tags[tag].title === "step") { + step = "<b>" + tags[tag].value + "</b><br>"; + } + if (tags[tag].title === "examplefile") { + exampleFile = "<i> Example Features File: " + tags[tag].value + "</i><br>"; + } + } + if (exampleFile !== null) { + step += exampleFile; + } + e.doclet.meta = e.doclet.meta || {}; + if (e.doclet.description !== undefined) { + e.doclet.description = step + e.doclet.description; + } else { + e.doclet.description = step; + } + } + } + } +};
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/pom.xml b/cucumber-js-test-apis-ci/pom.xml new file mode 100644 index 0000000000..d3dda714e7 --- /dev/null +++ b/cucumber-js-test-apis-ci/pom.xml @@ -0,0 +1,157 @@ +<?xml version="1.0"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.openecomp.sdc</groupId> + <artifactId>sdc-main</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + <artifactId>cucumber-bdd</artifactId> + <name>cucumber-bdd</name> + <groupId>org.openecomp.sdc</groupId> + <version>1.3.1-SNAPSHOT</version> + <packaging>jar</packaging> + <build> + <plugins> + <plugin> + <artifactId>maven-clean-plugin</artifactId> + <version>2.6.1</version> + <executions> + <execution> + <id>clean.dist.folder</id> + <phase>clean</phase> + <goals> + <goal>clean</goal> + </goals> + <configuration> + <filesets> + <fileset> + <directory>${basedir}/report</directory> + <includes> + <include>**/*</include> + </includes> + </fileset> + <fileset> + <directory>${basedir}/resources/downloads</directory> + <includes> + <include>**/*</include> + </includes> + </fileset> + <fileset> + <directory>${basedir}/docs</directory> + <includes> + <include>**/*</include> + </includes> + </fileset> + <fileset> + <directory>${basedir}</directory> + <includes> + <include>jenkinsConfig.json</include> + </includes> + </fileset> + </filesets> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <version>2.7</version> + <configuration> + </configuration> + </plugin> + </plugins> + <resources> + <resource> + <directory>${basedir}/docker</directory> + <targetPath>${project.build.directory}/docker_assembly</targetPath> + <filtering>false</filtering> + </resource> + <resource> + <directory>${basedir}</directory> + <includes> + <include>features/**/*</include> + <include>stepDefinitions/**/*</include> + <include>plugins/**/*</include> + <include>resources/**/*</include> + <include>*.js*</include> + </includes> + <targetPath>${project.build.directory}/docker_assembly/cucumber</targetPath> + <filtering>false</filtering> + </resource> + </resources> + </build> + <profiles> + <profile> + <id>docker</id> + <activation> + <activeByDefault>false</activeByDefault> + </activation> + <build> + <plugins> + <plugin> + <groupId>io.fabric8</groupId> + <artifactId>docker-maven-plugin</artifactId> + <version>${fabric8.version}</version> + <configuration> + <verbose>true</verbose> + <apiVersion>1.23</apiVersion> + <registry>nexus3.onap.org:10001</registry> + <authConfig> + <pull> + <username>docker</username> + <password>docker</password> + </pull> + </authConfig> + <images> + <!-- Build sanity image --> + <image> + <name>nfv/cucumber-sdc-api-tests</name> + <alias>cucumber-sdc-api-tests</alias> + <build> + <cleanup>try</cleanup> + <dockerFileDir>${project.build.directory}/docker_assembly</dockerFileDir> + <tags> + <tag>${docker.tag}</tag> + <tag>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}-STAGING-latest</tag> + </tags> + </build> + </image> + </images> + </configuration> + <executions> + <execution> + <id>clean-images</id> + <phase>pre-clean</phase> + <goals> + <goal>remove</goal> + </goals> + <configuration> + <removeAll>true</removeAll> + <image>nfv/cucumber-sdc-api-tests</image> + </configuration> + </execution> + <execution> + <id>generate-images</id> + <phase>install</phase> + <goals> + <goal>build</goal> + </goals> + </execution> + <execution> + <id>push-images</id> + <phase>deploy</phase> + <goals> + <goal>push</goal> + </goals> + <configuration> + <image>nfv/cucumber-sdc-api-tests</image> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> +</project> diff --git a/cucumber-js-test-apis-ci/resources/json/createActivitySpec.json b/cucumber-js-test-apis-ci/resources/json/createActivitySpec.json new file mode 100644 index 0000000000..29ad716834 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/createActivitySpec.json @@ -0,0 +1,19 @@ +{ + "name": "RANDOM", + "description": "Start Server", + "categoryList": [ + "Server" + ], + "inputs": [{ + "name": "host", + "type": "string", + "value": "10.1.2.3" + }], + "outputs": [{ + "name": "status", + "type": "string", + "value": "started" + }], + "type": "string", + "content": "test" +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/resources/json/createManualVSP.json b/cucumber-js-test-apis-ci/resources/json/createManualVSP.json new file mode 100644 index 0000000000..9ce14f545d --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/createManualVSP.json @@ -0,0 +1,17 @@ +{ + "vendorId":"REPLACE", + "name": "RANDOM", + "category":"resourceNewCategory.generic", + "subCategory":"resourceNewCategory.generic.abstract", + "onboardingMethod":"Manual", + "description":"for testing", + "vendorName":"REPLACE", + "icon":"icon", + "licensingVersion": "REPLACE", + "licensingData":{ + "licenseAgreement": "REPLACE", + "featureGroups": [ + "REPLACE" + ] + } +} diff --git a/cucumber-js-test-apis-ci/resources/json/createVF.json b/cucumber-js-test-apis-ci/resources/json/createVF.json new file mode 100644 index 0000000000..2ddd0f5c09 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/createVF.json @@ -0,0 +1,50 @@ +{ + "artifacts": {}, + "toscaArtifacts": {}, + "contactId": "REPLACE USER_ID", + "categories": [ + { + "name": "Generic", + "normalizedName": "generic", + "uniqueId": "REPLACE CATEGORY VSP", + "icons": null, + "subcategories": [ + { + "name": "Abstract", + "normalizedName": "abstract", + "uniqueId": "REPLACE SUBCATEGORY VSP", + "icons": [ + "objectStorage", + "compute" + ], + "groupings": null, + "ownerId": null, + "empty": false + } + ], + "ownerId": null, + "empty": false + } + ], + "description": "REPLACE VSP DESCRIPTION", + "icon": "defaulticon", + "componentInstancesProperties": {}, + "componentInstancesAttributes": {}, + "name": "REPLACE VSP NAME", + "tags": [ + "REPLACE VSP NAME" + ], + "capabilities": {}, + "requirements": {}, + "deploymentArtifacts": {}, + "componentType": "RESOURCE", + "vendorName": "REPLACE VLM NAME", + "vendorRelease": "1.0", + "componentInstances": [], + "properties": [], + "attributes": [], + "groups": [], + "resourceType": "VF", + "csarUUID": "REPLACE VSP ID", + "csarVersion": "1.0" +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/resources/json/createVLM.json b/cucumber-js-test-apis-ci/resources/json/createVLM.json new file mode 100644 index 0000000000..9431c070e6 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/createVLM.json @@ -0,0 +1 @@ +{"vendorName":"RANDOM","description":"VLM Description","iconRef":"icon"} diff --git a/cucumber-js-test-apis-ci/resources/json/createVSP.json b/cucumber-js-test-apis-ci/resources/json/createVSP.json new file mode 100644 index 0000000000..6f63261beb --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/createVSP.json @@ -0,0 +1,11 @@ +{ + "vendorId":"REPLACE", + "name": "RANDOM", + "category":"resourceNewCategory.generic", + "subCategory":"resourceNewCategory.generic.abstract", + "onboardingMethod":"REPLACE", + "description":"for testing", + "vendorName":"REPLACE", + "icon":"icon", + "licensingData":{} +} diff --git a/cucumber-js-test-apis-ci/resources/json/operation/createOperation-with-workflow.json b/cucumber-js-test-apis-ci/resources/json/operation/createOperation-with-workflow.json new file mode 100644 index 0000000000..e9693adf2a --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/operation/createOperation-with-workflow.json @@ -0,0 +1,30 @@ +{ + "interfaceOperations": { + "operation": { + "description": "abcd description", + "inputParams": { + "listToscaDataDefinition": [ + { + "name": "inp1", + "type": "string", + "property": "97477d27-8fe2-45a1-83cb-83368ef2a402.nf_naming_code", + "mandatory": true + } + ] + }, + "outputParams": { + "listToscaDataDefinition": [ + { + "name": "op", + "mandatory": true, + "type": "String" + } + ] + }, + "operationType": "create", + "workflowAssociationType": "EXISTING", + "workflowId" : "workflowId", + "workflowVersionId" : "workflowVersionId" + } + } +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/resources/json/operation/createOperation.json b/cucumber-js-test-apis-ci/resources/json/operation/createOperation.json new file mode 100644 index 0000000000..10c34ba8f2 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/operation/createOperation.json @@ -0,0 +1,14 @@ +{ + "interfaceOperations": { + "operation": { + "description": "abcd description", + "inputParams": { + }, + "outputParams": { + }, + "operationType": "create", + "workflowId" : null, + "workflowVersionId" : null + } + } +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/resources/json/operation/createOperationWithInputOutput.json b/cucumber-js-test-apis-ci/resources/json/operation/createOperationWithInputOutput.json new file mode 100644 index 0000000000..013d615999 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/operation/createOperationWithInputOutput.json @@ -0,0 +1,29 @@ +{ + "interfaceOperations": { + "operation": { + "description": "abcd description", + "inputParams": { + "listToscaDataDefinition": [ + { + "name": "inp1", + "type": "string", + "property": "97477d27-8fe2-45a1-83cb-83368ef2a402.nf_naming_code", + "mandatory": true + } + ] + }, + "outputParams": { + "listToscaDataDefinition": [ + { + "name": "op", + "mandatory": true, + "type": "String" + } + ] + }, + "operationType": "create", + "workflowId" : null, + "workflowVersionId" : null + } + } +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/resources/json/operation/createService.json b/cucumber-js-test-apis-ci/resources/json/operation/createService.json new file mode 100644 index 0000000000..e7afe2aa21 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/operation/createService.json @@ -0,0 +1,102 @@ +{ + "artifacts": { + + }, + "toscaArtifacts": { + + }, + "contactId": "cs0008", + "categories": [ + { + "name": "Network L4+", + "normalizedName": "network l4+", + "uniqueId": "serviceNewCategory.network l4+", + "icons": [ + "network_l_4" + ], + "subcategories": null, + "version": null, + "ownerId": null, + "empty": false, + "type": null + } + ], + "description": "service1 for bdd", + "icon": "defaulticon", + "componentInstancesProperties": { + + }, + "componentInstancesAttributes": { + + }, + "name": "service1", + "tags": [ + "service1" + ], + "capabilities": { + + }, + "requirements": { + + }, + "deploymentArtifacts": { + + }, + "componentType": "SERVICE", + "projectCode": "010203", + "componentInstances": [ + + ], + "properties": [ + + ], + + "inputs": [ + { + "uniqueId": "03eeb10e-cf2a-41b8-9d8e-d2dbd094f9d4.test1_dasddas", + "type": "scalar-unit.size", + "required": false, + "definition": false, + "schema": { + "properties": { + + }, + "property": { + "type": "", + "required": false, + "definition": true, + "password": false, + "hidden": false, + "immutable": false, + "getInputProperty": false, + "empty": false + }, + "empty": false + }, + "password": false, + "name": "test1_dasddas", + "hidden": false, + "immutable": false, + "instanceUniqueId": "03eeb10e-cf2a-41b8-9d8e-d2dbd094f9d4", + "propertyId": "03eeb10e-cf2a-41b8-9d8e-d2dbd094f9d4.dasddas", + "parentUniqueId": "cs0008", + "schemaType": "", + "getInputProperty": false, + "ownerId": "cs0008", + "empty": false + } + ], + + "attributes": [ + + ], + "forwardingPaths": { + + }, + "ecompGeneratedNaming": true, + "serviceApiArtifacts": { + + }, + "instantiationType": "A-la-carte", + "environmentContext": "General_Revenue-Bearing" +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/resources/json/operation/createVF.json b/cucumber-js-test-apis-ci/resources/json/operation/createVF.json new file mode 100644 index 0000000000..6fe9688caa --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/operation/createVF.json @@ -0,0 +1,101 @@ +{ + "artifacts": { + + }, + "toscaArtifacts": { + + }, + "contactId": "cs0008", + "categories": [ + { + "name": "Allotted Resource", + "normalizedName": "allotted resource", + "uniqueId": "resourceNewCategory.allotted resource", + "icons": null, + "subcategories": [ + { + "name": "Tunnel XConnect", + "normalizedName": "tunnel xconnect", + "uniqueId": "resourceNewCategory.allotted resource.tunnel xconnect", + "icons": [ + "tunnel_x_connect" + ], + "groupings": null, + "ownerId": null, + "empty": false + } + ], + "ownerId": null, + "empty": false + } + ], + "description": "sd", + "icon": "defaulticon", + "componentInstancesProperties": { + + }, + "componentInstancesAttributes": { + + }, + "name": "REPLACE", + "tags": [ + "REPLACE" + ], + "capabilities": { + + }, + "requirements": { + + }, + "deploymentArtifacts": { + + }, + "componentType": "RESOURCE", + "vendorName": "vendor", + "vendorRelease": "vendor release", + "componentInstances": [ + + ], + "inputs": [{ + "uniqueId": "abcdef", + "type": "org.openecomp.datatypes.Naming", + "required": false, + "definition": false, + "defaultValue": null, + "description": null, + "schema": null, + "password": false, + "name": "abcdef", + "value": null, + "label": null, + "hidden": false, + "immutable": false, + "inputPath": null, + "status": null, + "inputId": null, + "instanceUniqueId": null, + "propertyId": null, + "annotations": null, + "parentUniqueId": "abcd", + "getInputValues": null, + "constraints": null, + "inputs": null, + "properties": null, + "getInputProperty": false, + "schemaType": null, + "schemaProperty": null, + "version": null, + "ownerId": null, + "empty": false + } ], + "properties": [ + + ], + "attributes": [ + + ], + "groups": [ + + ], + "resourceType": "VF" +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/resources/json/operation/updateOperation.json b/cucumber-js-test-apis-ci/resources/json/operation/updateOperation.json new file mode 100644 index 0000000000..698d38c612 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/json/operation/updateOperation.json @@ -0,0 +1,28 @@ +{ + "interfaceOperations": { + "operation": { + "description": "create operation_Updated", + "inputParams": { + "listToscaDataDefinition": [ + { + "name": "inp1", + "type": "string", + "property": "97477d27-8fe2-45a1-83cb-83368ef2a402.nf_naming_code", + "mandatory": true + } + ] + }, + "outputParams": { + "listToscaDataDefinition": [ + { + "name": "op", + "mandatory": true, + "type": "String" + } + ] + }, + "operationType": "create", + "uniqueId": "REPLACE FROM CONTEXT" + } + } +}
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/resources/uploads/BASE_MUX.zip b/cucumber-js-test-apis-ci/resources/uploads/BASE_MUX.zip Binary files differnew file mode 100644 index 0000000000..4e7fbcf31d --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/BASE_MUX.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/BASE_MUX_with_no_base.zip b/cucumber-js-test-apis-ci/resources/uploads/BASE_MUX_with_no_base.zip Binary files differnew file mode 100644 index 0000000000..8698ef7e4c --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/BASE_MUX_with_no_base.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/NEW_NC_with_manifest.zip b/cucumber-js-test-apis-ci/resources/uploads/NEW_NC_with_manifest.zip Binary files differnew file mode 100644 index 0000000000..403cb7be1f --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/NEW_NC_with_manifest.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/all-violations.zip b/cucumber-js-test-apis-ci/resources/uploads/all-violations.zip Binary files differnew file mode 100644 index 0000000000..d86c7a7ee3 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/all-violations.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/annotationMultVolume.zip b/cucumber-js-test-apis-ci/resources/uploads/annotationMultVolume.zip Binary files differnew file mode 100644 index 0000000000..8dc3f7863d --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/annotationMultVolume.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/errorHeat.zip b/cucumber-js-test-apis-ci/resources/uploads/errorHeat.zip Binary files differnew file mode 100644 index 0000000000..21444fadb7 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/errorHeat.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/inputsForNestedHeat.zip b/cucumber-js-test-apis-ci/resources/uploads/inputsForNestedHeat.zip Binary files differnew file mode 100644 index 0000000000..f1569ee4a4 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/inputsForNestedHeat.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/multiple-parents.zip b/cucumber-js-test-apis-ci/resources/uploads/multiple-parents.zip Binary files differnew file mode 100644 index 0000000000..64d579ca2e --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/multiple-parents.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/nested-belongs-to-volume.zip b/cucumber-js-test-apis-ci/resources/uploads/nested-belongs-to-volume.zip Binary files differnew file mode 100644 index 0000000000..690cb954e2 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/nested-belongs-to-volume.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/refs_missing.zip b/cucumber-js-test-apis-ci/resources/uploads/refs_missing.zip Binary files differnew file mode 100644 index 0000000000..3aec1382fc --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/refs_missing.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/tag_missing.zip b/cucumber-js-test-apis-ci/resources/uploads/tag_missing.zip Binary files differnew file mode 100644 index 0000000000..84b0d8ef3e --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/tag_missing.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vMME_Ericsson_small_v2.zip b/cucumber-js-test-apis-ci/resources/uploads/vMME_Ericsson_small_v2.zip Binary files differnew file mode 100644 index 0000000000..f5b1375b03 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vMME_Ericsson_small_v2.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlan-tagging-positive.zip b/cucumber-js-test-apis-ci/resources/uploads/vlan-tagging-positive.zip Binary files differnew file mode 100644 index 0000000000..b4519778c4 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlan-tagging-positive.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/negativeNotBoundToParentPort.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/negativeNotBoundToParentPort.zip Binary files differnew file mode 100644 index 0000000000..129fc7ebd1 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/negativeNotBoundToParentPort.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/regularNestedSubinterface.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/regularNestedSubinterface.zip Binary files differnew file mode 100644 index 0000000000..a64f081699 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/regularNestedSubinterface.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/subInterfaceGetAttrInOut.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/subInterfaceGetAttrInOut.zip Binary files differnew file mode 100644 index 0000000000..993e9f8e03 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1a/subInterfaceGetAttrInOut.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffCompute_SubInterface.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffCompute_SubInterface.zip Binary files differnew file mode 100644 index 0000000000..c0b54c49cd --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffCompute_SubInterface.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffPort_SubInterface.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffPort_SubInterface.zip Binary files differnew file mode 100644 index 0000000000..713e429da6 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffPort_SubInterface.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffSubInterfaceFile.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffSubInterfaceFile.zip Binary files differnew file mode 100644 index 0000000000..24da28acab --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/diffSubInterfaceFile.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/regularNestedSubInterface.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/regularNestedSubInterface.zip Binary files differnew file mode 100644 index 0000000000..f967bf9e40 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1b/regularNestedSubInterface.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c1/multiplePortsMultipleVlans.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c1/multiplePortsMultipleVlans.zip Binary files differnew file mode 100644 index 0000000000..7c6890e76e --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c1/multiplePortsMultipleVlans.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c1/regularNestedSubInterface.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c1/regularNestedSubInterface.zip Binary files differnew file mode 100644 index 0000000000..57e270b790 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c1/regularNestedSubInterface.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c2/differentNetwork.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c2/differentNetwork.zip Binary files differnew file mode 100644 index 0000000000..87d724bf88 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c2/differentNetwork.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c2/differentResourceGroupCount.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c2/differentResourceGroupCount.zip Binary files differnew file mode 100644 index 0000000000..13c08e99c4 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern1c2/differentResourceGroupCount.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/Pattern_4_MultiplePort_MultipleSubInterface.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/Pattern_4_MultiplePort_MultipleSubInterface.zip Binary files differnew file mode 100644 index 0000000000..fb4c68d03e --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/Pattern_4_MultiplePort_MultipleSubInterface.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/Pattern_4_SinglePort_SingleSubInterface.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/Pattern_4_SinglePort_SingleSubInterface.zip Binary files differnew file mode 100644 index 0000000000..87c44899d5 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/Pattern_4_SinglePort_SingleSubInterface.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/regularNestedSubInterface.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/regularNestedSubInterface.zip Binary files differnew file mode 100644 index 0000000000..89adb0f9ec --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern4/regularNestedSubInterface.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern5/Pattern_5ComplexVSPWithDiffSubInfConn.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern5/Pattern_5ComplexVSPWithDiffSubInfConn.zip Binary files differnew file mode 100644 index 0000000000..f42824098c --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern5/Pattern_5ComplexVSPWithDiffSubInfConn.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern5/Pattern_5_NestedResourceWithMultipleComputeAndPort.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern5/Pattern_5_NestedResourceWithMultipleComputeAndPort.zip Binary files differnew file mode 100644 index 0000000000..64430235bf --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/pattern5/Pattern_5_NestedResourceWithMultipleComputeAndPort.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1aHeat.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1aHeat.zip Binary files differnew file mode 100644 index 0000000000..f4107be42a --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1aHeat.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1bHeat.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1bHeat.zip Binary files differnew file mode 100644 index 0000000000..d4244b684a --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1bHeat.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1c1Heat.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1c1Heat.zip Binary files differnew file mode 100644 index 0000000000..2ac16049bd --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1c1Heat.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1c2Heat.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1c2Heat.zip Binary files differnew file mode 100644 index 0000000000..7d990e6844 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern1c2Heat.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern4Heat.zip b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern4Heat.zip Binary files differnew file mode 100644 index 0000000000..e744c93a6b --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/vlantagging/vfcinstancegroup/groupPattern4Heat.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/volumeUnderNested.zip b/cucumber-js-test-apis-ci/resources/uploads/volumeUnderNested.zip Binary files differnew file mode 100644 index 0000000000..01798a5723 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/volumeUnderNested.zip diff --git a/cucumber-js-test-apis-ci/resources/uploads/zipWithExternalPort.zip b/cucumber-js-test-apis-ci/resources/uploads/zipWithExternalPort.zip Binary files differnew file mode 100644 index 0000000000..3d6b3d09b4 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/uploads/zipWithExternalPort.zip diff --git a/cucumber-js-test-apis-ci/resources/yaml/CB_BASE.yaml b/cucumber-js-test-apis-ci/resources/yaml/CB_BASE.yaml new file mode 100644 index 0000000000..4aef40b270 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/yaml/CB_BASE.yaml @@ -0,0 +1,91 @@ +heat_template_version: 2013-05-23 + +description: > + BASE TEMPLATE + +parameters: + vnf_name: + type: string + description: Unique name for this VF instance + + vnf_id: + type: string + description: Unique ID for this VF instance + + network_in_cidr: + type: string + description: IN network address (CIDR notation) + + network_out_cidr: + type: string + description: MUX out network address (CIDR notation) + + network_in_gw_ip: + type: string + description: IN network gw address + + network_out_gw_ip: + type: string + description: MUX out network gw address + +resources: + + random-str: + type: OS::Heat::RandomString + properties: + length: 4 + + CB_IN_Net: + type: OS::Neutron::Net + properties: + name: + str_replace: + template: CB_IN_Net_rand + params: + rand: { get_resource: random-str } + + CB_IN_Subnet: + type: OS::Neutron::Subnet + properties: + name: + str_replace: + template: CB_IN_Net_rand + params: + rand: { get_resource: random-str } + network_id: { get_resource: CB_IN_Net } + cidr: { get_param: network_in_cidr } + gateway_ip: { get_param: network_in_gw_ip } + + CB_OUT_Net: + type: OS::Neutron::Net + properties: + name: + str_replace: + template: CB_OUT_Net_rand + params: + rand: { get_resource: random-str } + + CB_OUT_Subnet: + type: OS::Neutron::Subnet + properties: + network_id: { get_resource: CB_OUT_Net } + cidr: { get_param: network_out_cidr } + gateway_ip: { get_param: network_out_gw_ip } + +outputs: + + CB_IN_Net: + description: ID of the customer facing network + value: { get_resource: CB_IN_Net } + + CB_IN_Subnet: + description: ID of the customer facing subnet + value: { get_resource: CB_IN_Subnet } + + CB_OUT_Net: + description: ID of the Internet Facing network + value: { get_resource: CB_OUT_Net } + + CB_OUT_Subnet: + description: ID of the Internet Facing subnet + value: { get_resource: CB_OUT_Subnet } diff --git a/cucumber-js-test-apis-ci/resources/yaml/Nested_FSB1ServiceTemplate.yaml b/cucumber-js-test-apis-ci/resources/yaml/Nested_FSB1ServiceTemplate.yaml new file mode 100644 index 0000000000..fb301b6ab6 --- /dev/null +++ b/cucumber-js-test-apis-ci/resources/yaml/Nested_FSB1ServiceTemplate.yaml @@ -0,0 +1,309 @@ +tosca_definitions_version: tosca_simple_yaml_1_0_0 +metadata: + template_name: Nested_FSB1 +imports: +- openecomp_heat_index: + file: openecomp-heat/_index.yml +- GlobalSubstitutionTypes: + file: GlobalSubstitutionTypesServiceTemplate.yaml +- openecomp_index: + file: openecomp/_index.yml +node_types: + org.openecomp.resource.vfc.compute.nodes.heat.FSB1: + derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server +topology_template: + inputs: + port_FSB1_OAM_subnetpoolid: + type: string + required: true + compute_FSB1_availability_zone: + type: list + required: true + entry_schema: + type: string + index_value: + type: integer + description: Index value of this substitution service template runtime instance + required: false + default: 0 + constraints: + - greater_or_equal: 0 + port_FSB1_OAM_order: + type: integer + required: true + port_FSB1_OAM_exCP_naming: + type: org.openecomp.datatypes.Naming + required: true + port_FSB1_OAM_ip_requirements: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.network.IpRequirements + vm_flavor_name: + type: string + required: true + port_FSB1_OAM_network: + type: list + required: true + entry_schema: + type: string + port_FSB1_OAM_network_role: + type: string + required: true + port_FSB1_OAM_vlan_requirements: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.network.VlanRequirements + port_FSB1_OAM_network_role_tag: + type: string + required: true + compute_FSB1_name: + type: list + required: true + entry_schema: + type: string + port_FSB1_OAM_fixed_ips: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.heat.neutron.port.FixedIps + port_FSB1_OAM_mac_requirements: + type: org.openecomp.datatypes.network.MacRequirements + required: true + node_templates: + FSB1_FSB1_OAM: + type: org.openecomp.resource.cp.v2.extNeutronCP + properties: + exCP_naming: + get_input: port_FSB1_OAM_exCP_naming + vlan_requirements: + get_input: port_FSB1_OAM_vlan_requirements + subinterface_indicator: false + ip_requirements: + get_input: port_FSB1_OAM_ip_requirements + network_role_tag: + get_input: port_FSB1_OAM_network_role_tag + mac_requirements: + get_input: port_FSB1_OAM_mac_requirements + order: + get_input: port_FSB1_OAM_order + network_role: + get_input: port_FSB1_OAM_network_role + subnetpoolid: + get_input: port_FSB1_OAM_subnetpoolid + fixed_ips: + get_input: + - port_FSB1_OAM_fixed_ips + - index_value + network: + get_input: + - port_FSB1_OAM_network + - index_value + requirements: + - binding: + capability: tosca.capabilities.network.Bindable + node: FSB1 + relationship: tosca.relationships.network.BindsTo + capabilities: + port_mirroring: + properties: + connection_point: + nf_type: '' + nfc_type: '' + nf_naming_code: '' + nfc_naming_code: FSB1 + network_role: + get_input: port_FSB1_OAM_network_role + pps_capacity: '' + FSB1: + type: org.openecomp.resource.vfc.compute.nodes.heat.FSB1 + properties: + availability_zone: + get_input: + - compute_FSB1_availability_zone + - index_value + flavor: + get_input: vm_flavor_name + name: + get_input: + - compute_FSB1_name + - index_value + substitution_mappings: + node_type: org.openecomp.resource.abstract.nodes.FSB1 + capabilities: + network.incoming.bytes.rate_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - network.incoming.bytes.rate + network.outgoing.bytes_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - network.outgoing.bytes + disk.capacity_FSB1: + - FSB1 + - disk.capacity + disk.read.bytes.rate_FSB1: + - FSB1 + - disk.read.bytes.rate + disk.device.latency_FSB1: + - FSB1 + - disk.device.latency + disk.allocation_FSB1: + - FSB1 + - disk.allocation + disk.read.bytes_FSB1: + - FSB1 + - disk.read.bytes + disk.device.capacity_FSB1: + - FSB1 + - disk.device.capacity + cpu_util_FSB1: + - FSB1 + - cpu_util + disk.device.write.requests.rate_FSB1: + - FSB1 + - disk.device.write.requests.rate + network.outgoing.bytes.rate_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - network.outgoing.bytes.rate + disk.root.size_FSB1: + - FSB1 + - disk.root.size + feature_FSB1: + - FSB1 + - feature + forwarder_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - forwarder + memory.resident_FSB1: + - FSB1 + - memory.resident + network.incoming.packets.rate_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - network.incoming.packets.rate + cpu_FSB1: + - FSB1 + - cpu + disk.write.requests.rate_FSB1: + - FSB1 + - disk.write.requests.rate + feature_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - feature + instance_FSB1: + - FSB1 + - instance + disk.device.read.bytes.rate_FSB1: + - FSB1 + - disk.device.read.bytes.rate + cpu.delta_FSB1: + - FSB1 + - cpu.delta + disk.write.bytes_FSB1: + - FSB1 + - disk.write.bytes + disk.device.read.requests.rate_FSB1: + - FSB1 + - disk.device.read.requests.rate + disk.device.read.requests_FSB1: + - FSB1 + - disk.device.read.requests + disk.ephemeral.size_FSB1: + - FSB1 + - disk.ephemeral.size + binding_FSB1: + - FSB1 + - binding + disk.device.write.bytes_FSB1: + - FSB1 + - disk.device.write.bytes + network.outgoing.packets.rate_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - network.outgoing.packets.rate + binding_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - binding + attachment_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - attachment + network.incoming.bytes_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - network.incoming.bytes + memory_FSB1: + - FSB1 + - memory + network.incoming.packets_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - network.incoming.packets + disk.device.read.bytes_FSB1: + - FSB1 + - disk.device.read.bytes + disk.device.usage_FSB1: + - FSB1 + - disk.device.usage + disk.write.bytes.rate_FSB1: + - FSB1 + - disk.write.bytes.rate + scalable_FSB1: + - FSB1 + - scalable + disk.usage_FSB1: + - FSB1 + - disk.usage + network.outpoing.packets_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - network.outpoing.packets + host_FSB1: + - FSB1 + - host + disk.device.allocation_FSB1: + - FSB1 + - disk.device.allocation + os_FSB1: + - FSB1 + - os + vcpus_FSB1: + - FSB1 + - vcpus + disk.write.requests_FSB1: + - FSB1 + - disk.write.requests + disk.device.write.bytes.rate_FSB1: + - FSB1 + - disk.device.write.bytes.rate + endpoint_FSB1: + - FSB1 + - endpoint + disk.latency_FSB1: + - FSB1 + - disk.latency + memory.usage_FSB1: + - FSB1 + - memory.usage + disk.read.requests_FSB1: + - FSB1 + - disk.read.requests + disk.device.write.requests_FSB1: + - FSB1 + - disk.device.write.requests + disk.iops_FSB1: + - FSB1 + - disk.iops + disk.device.iops_FSB1: + - FSB1 + - disk.device.iops + port_mirroring_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - port_mirroring + requirements: + link_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - link + dependency_FSB1_FSB1_OAM: + - FSB1_FSB1_OAM + - dependency + dependency_FSB1: + - FSB1 + - dependency + local_storage_FSB1: + - FSB1 + - local_storage diff --git a/cucumber-js-test-apis-ci/stepDefinitions/ActivitySpec_steps.js b/cucumber-js-test-apis-ci/stepDefinitions/ActivitySpec_steps.js new file mode 100644 index 0000000000..7fe8ddf201 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/ActivitySpec_steps.js @@ -0,0 +1,47 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * 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. + */ + +const {Then, When} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); +const _ = require('lodash'); + +When('I want to create an ActivitySpec', function () { + let path = '/activity-spec'; + return util.request(this.context, 'POST', path, this.context.inputData, false, 'activity_spec').then((result)=> { + this.context.item = {id : result.data.id, versionId: result.data.versionId}; + this.context.activityspec = {id : result.data.id, versionId: result.data.versionId}; + }); +}); + +When('I want to list ActivitySpecs with status {string}', function (string) { + let path = '/activity-spec?status='+string; + return util.request(this.context, 'GET', path, null, false, 'activity_spec').then((result)=> { + this.context.listCount = result.data.listCount; + }); +}); + +When('I want to get the ActivitySpec for the current item', function () { + let path = '/activity-spec/'+ this.context.item.id+'/versions/'+this.context.item.versionId ; + return util.request(this.context, 'GET', path, null, false, 'activity_spec').then((result)=> { + }); +}); + +Then('I want to call action {string} on this ActivitySpec item', function(string) { + let path = '/activity-spec/'+ this.context.item.id+'/versions/'+this.context.item.versionId+'/actions' ; + let inputData = JSON.parse('{"action" : "' +string+ '"}'); + return util.request(this.context, 'PUT', path, inputData, false, 'activity_spec') +});
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/stepDefinitions/Collaboration_Steps.js b/cucumber-js-test-apis-ci/stepDefinitions/Collaboration_Steps.js new file mode 100644 index 0000000000..c4de758300 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/Collaboration_Steps.js @@ -0,0 +1,113 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When, Given} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); + +/** + * @module Collaboration + * @description Adds the user with the given user ID as a contributor on the item + * @exampleFile Example_Collaboration.feature + * @step I want to add user {string} as a contributor to this Item + **/ +When('I want to add user {string} as a contributor to this Item', function(string) { + let path = '/items/' + this.context.item.id + '/permissions/Contributor'; + let inputData = {removedUsersIds:[],addedUsersIds:[string]}; + return util.request(this.context, 'PUT', path, inputData); +}); + +/** + * @module Collaboration + * @description Adds the user with the given user ID as a contributor on the item + * @exampleFile Example_Collaboration.feature + * @step I want to remove user {string} as a contributor to this Item + **/ +When('I want to remove user {string} as a contributor to this Item', function(string) { + let path = '/items/' + this.context.item.id + '/permissions/Contributor'; + let inputData = {removedUsersIds:[string],addedUsersIds:[]}; + return util.request(this.context, 'PUT', path, inputData); +}); + +/** + * @module Collaboration + * @description Changes the owner to the given User ID + * @exampleFile Example_Collaboration.feature + * @step I want to change the owner to user {string} on this Item + **/ +When('I want to change the owner to user {string} on this Item', function(string) { + let path = '/items/' + this.context.item.id + '/permissions/Owner'; + let inputData = {removedUsersIds:[],addedUsersIds:[string]}; + return util.request(this.context, 'PUT', path, inputData); +}); + + +/** + * @module Collaboration + * @description Checks the role for a user on the item by User id and Role can be either: Contributor/Owner + * @exampleFile Example_Collaboration.feature + * @step I want check user {string} has role {string} on this Item + **/ +When('I want to check user {string} has role {string} on this Item', function(string, string2) { + let path = '/items/' + this.context.item.id + '/permissions'; + return util.request(this.context, 'GET', path).then(results => { + for (i in results.data.results) { + if (results.data.results[i].userId === string) { + assert.equal(string2.toLowerCase(), results.data.results[i].permission.toLowerCase()); + return; + } + } + assert.fail('User not found'); + }); +}); + +/** + * @module Collaboration + * @description Checks the user wth this Id has no permissions on this item + * @exampleFile Example_Collaboration.feature + * @step I want check user {string} has rno permissions on this Item + **/ +When('I want to check user {string} has no permissions on this Item', function(string) { + let path = '/items/' + this.context.item.id + '/permissions'; + return util.request(this.context, 'GET', path).then(results => { + for (i in results.data.results) { + if (results.data.results[i].userId === string) { + assert.fail('Found', null, 'User should not have permissions'); + return; + } + } + }); +}); + +/** + * @module Collaboration + * @description Gets the permissions for the Item + * @exampleFile Example_Collaboration.feature + * @step I want to get the permissions for this Item + **/ +When('I want to get the permissions for this Item', function() { + let path = '/items/' + this.context.item.id + '/permissions'; + return util.request(this.context, 'GET', path); +}); + +/** + * @module Collaboration + * @description Changes the user for the Rest calls + * @exampleFile Example_Collaboration.feature + * @step I want to set the user to {string} + **/ +When('I want to set the user to {string}', function(string) { + this.context.headers['onboarding'].USER_ID = string; +}); diff --git a/cucumber-js-test-apis-ci/stepDefinitions/General_Steps.js b/cucumber-js-test-apis-ci/stepDefinitions/General_Steps.js new file mode 100644 index 0000000000..2076366595 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/General_Steps.js @@ -0,0 +1,304 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When, Given} = require('cucumber'); +const assert = require('assert'); +const _ = require('lodash'); +const normalizeNewline = require('normalize-newline'); +require('node-zip'); +YAML = require('yamljs'); +const fs = require('fs'); +const util = require('./Utils.js'); + +function getPath(path, context) { + let compiled = _.template(path); + return compiled(context); +} + +/** + * @module ContextData + * @description Use with "Given". Use ONLY for local testing when you know the value of the Item you want to use + * instead of creating a new one. + * @step Item {string} and version Id {string} + **/ +Given('Item {string} and version Id {string}', function (string, string2) { + this.context.item.id = string; + this.context.item.versionId = string2; +}); +/** + * @module ContextData + * @exampleFile Example_ResponseData_CheckAndManipulation.feature + * @description Response Data::<br> + * """<br> + * {jsonObject}<br> + * """<br> + * @step Use with "Given". Use ONLY for local testing, creates a response data object + **/ +Given('Response Data:', function (docString) { + this.context.responseData = JSON.parse(docString); +}); + +/** + * @module ContextData + * @description Copy a property from the response data to context Item/VLM/VSP data, example: vsp.componentId + * @step I want to save on the context for {string} property {string} with value {string} + **/ +Then('I want to save on the context for {string} property {string} with value {string}', function(string, string1, string2) { + assert.equal(_.includes(['VLM', 'VSP', 'Item'], string), true); + let val = _.get(this.context.responseData, string2); + _.set(this.context, string1, val); +}); +/** + * @module ContextData + * @description Copy a property from the response data to saved data on the context. Example: save newly generated IDs. Response data value can be from a path, xample: results[0].id + * @exampleFile Example_Rest_Calls.feature + * @step I want to save to property {string} from response data path {string} + **/ +Then('I want to copy to property {string} from response data path {string}', function(string, string2) { + let val = _.get(this.context.responseData, string2); + _.set(this.context, string, val); +}); +/** + * @module ContextData + * @description This will set the value of a saved property on the context + * @exampleFile Example_Rest_Calls.feature + * @step I want to set property {string} to value {string} + **/ +Then('I want to set property {string} to value {string}', function(string, string2) { + _.set(this.context, string, string2); +}); + +/** + * @module ResponseData + * @description Will check the output data for a property and a value. property can be a path (example: results[0].id) + * @exampleFile Example_ResponseData_CheckAndManipulation.feature + * @step I want to check property {string} for value {string} + **/ +Then('I want to check property {string} for value {string}', function(string, string2) { + assert.equal(_.get(this.context.responseData, string), string2); +}); +/** + * @module ResponseData + * @description Will check the output data for a property and a value. property can be a path + * (example: results[0].id). Supports comparison to a long String by allowing a line break + * @exampleFile VirtualMachineInterfaceValidationHeatResourceMissingProperties.feature + * @step I want to check property {string} for value {string} + **/ + +Then('I want to check property {string} for value:', function(string, docString) { + assert.equal(_.get(this.context.responseData, string), docString.trim()); +}); +/** + * @module ResponseData + * @description Will check the output data for a property and a integer. property can be a path (example: results[0].id) + * @exampleFile Example_ResponseData_CheckAndManipulation.feature + * @step I want to check property {string} for value {int} + **/ +Then('I want to check property {string} for value {int}', function(string, int) { + assert.equal(_.get(this.context.responseData, string), int); +}); +/** + * @module ResponseData + * @description Will check the output data for a property and a boolean. property can be a path (example: results[0].id) + * @exampleFile Example_ResponseData_CheckAndManipulation.feature + * @step I want to check property {string} to be "True/False" + **/ +Then('I want to check property {string} to be {word}', function(string, string2) { + assert.equal(_.get(this.context.responseData, string), string2.toLowerCase() == "true"); +}); +/** + * @module ResponseData + * @description Will check the output data for a property and a boolean. property can be a path (example: results[0].id) + * @exampleFile Example_ResponseData_CheckAndManipulation.feature + * @step I want to check property {string} to have length {int} + **/ +Then('I want to check property {string} to have length {int}', function(string, intLength) { + let arrayProp = _.get(this.context.responseData, string); + assert.equal(arrayProp.length, intLength); +}); +/** + * @module ResponseData + * @description Will check the output data for a property and make sure it exists + * @exampleFile Example_ResponseData_CheckAndManipulation.feature + * @step I want to check property {string} exists + **/ +Then('I want to check property {string} exists', function(string) { + assert.equal(_.has(this.context.responseData, string), true); +}); +/** + * @module ResponseData + * @description Will check the output data for a property and make sure it does not exist + * @exampleFile Example_ResponseData_CheckAndManipulation.feature + * @step I want to check property {string} does not exist + **/ +Then('I want to check property {string} does not exist', function(string) { + assert.equal(_.has(this.context.responseData, string), false); +}); + +/** +* @module ContextData +* @description Use during development to see what is on the context + * @exampleFile Example_ResponseData_CheckAndManipulation.feature +* @step I want to print context data +**/ +Then('I want to print the context data', function() { + console.log('------------ context ---------------'); + console.log(JSON.stringify(this.context, null, 2)); + console.log('--------------------------------------'); +}); +/** + * @module ContextData + * @description Set this in order to check that the following Rest call will not have response code 200 + * @exampleFile Example_Rest_Calls.feature + * @step I want the following to fail + **/ +Then('I want the following to fail', function() { + this.context.shouldFail = true; +}); + +/** + * @module ContextData + * @description Set this in order to check that the following Rest call will have the error code on the return data + * @exampleFile Example_VSP.feature + * @step I want the following to fail with error code {string} + **/ +Then('I want the following to fail with error code {string}', function(string) { + this.context.shouldFail = true; + this.context.errorCode = string; +}); + + +/** + * @module ContextData + * @description Set this in order to check that the following Rest call will have the error message on the return data + * @exampleFile DeleteVLMCertified.feature + * @step I want the following to fail with error message {string} + **/ +Then('I want the following to fail with error message {string}', function(string) { + this.context.shouldFail = true; + let errorMessage = getPath(string, this.context); + this.context.errorMessage = errorMessage; +}); + +/** + * @module ZipData + * @description Use this in order to extract a file from a zip file and to compare it to a local file (string comparison). + * @exampleFile Example_VSP.feature + * @step I want to compare the content of the entry {string} in the zip {string} with file {string} + **/ +Then ('I want to compare the content of the entry {string} in the zip {string} with file {string}', function (string, string2, string3) { + let zipFile = fs.readFileSync(string2, 'binary'); + let zip = new JSZip(zipFile, {base64: false, checkCRC32: true}); + let fileData = zip.files[string]._data; + let compareFileData = fs.readFileSync(string3, {encoding: 'ascii'}); + assert.equal(normalizeNewline(compareFileData), normalizeNewline(fileData)); +}); + +/** + * @module ZipData + * @description Loads the yaml from zip file onto the context responseData as JSON for running checks on the output + * @exampleFile Example_VSP.feature + * @step I want to load the yaml content of the entry {string} in the zip {string} to context + **/ +Then ('I want to load the yaml content of the entry {string} in the zip {string} to context', function (string, string2, callback) { + let zipFile = fs.readFileSync(string2, 'binary'); + let zip = new JSZip(zipFile, {base64: false, checkCRC32: true}); + let fileData = zip.files[string]._data; + let nativeObject = YAML.parse(fileData); + this.context.responseData = nativeObject; + callback(); +}); + + +/** + * @module ZipData + * @description Loads the json from zip file onto the context responseData for running check son the output + * @exampleFile Example_VSP.feature + * @step I want to load the json content of the entry {string} in the zip {string} to context + **/ +When('I want to load the json content of the entry {string} in the zip {string} to context', function (string, string2, callback) { + let zipFile = fs.readFileSync(string2, 'binary'); + let zip = new JSZip(zipFile, {base64: false, checkCRC32: true}); + let str = zip.files[string]._data; + this.context.responseData = JSON.parse(str); + callback(); +}); + +/** + * @module ResponseData + * @description Check that the result list doesn't contain an element with property x which has value + * equals to saved property y + * @exampleFile ListItemsFilters.feature + * @step I want to check that element in the response list with {string} equals to value of saved property {string} does not exist + **/ +Then('I want to check that element in the response list with {string} equals to value of saved property {string} does not exist', function (propertyPath, valueProperty) { + const results = this.context.responseData.results; + assert.equal(results.find(result => this.context[valueProperty] === _.get(result, propertyPath)), undefined); +}); + +/** + * @module ResponseData + * @description Check that the result list contains an element with property x which has value + * equals to saved property y + * @exampleFile ListItemsFilters.feature + * @step I want to check that element in the response list with {string} equals to value of saved property {string} exists + **/ +Then('I want to check that element in the response list with {string} equals to value of saved property {string} exists', function(propertyPath, valueProperty) { + const results = this.context.responseData.results; + assert.notEqual(results.find(result => this.context[valueProperty] === _.get(result, propertyPath)), undefined); +}); + +/** + * @module ResponseData + * @description Check that the itemId from context exits in result of responseData + * exampleFile ArchiveItem.feature + * step I want to check that item exits in response + **/ +Then('I want to check that item exits in response', function() { + + const id = this.context.item.id; + const results = this.context.responseData.results; + var testResult = false; + + for(var i=0; i< results.length; i++){ + if ( id == results[i].id){ + testResult = true; + } + } + + assert.equal(testResult,true); +}); + + +/** + * @module ResponseData + * @description Check that the itemId from context does NOT exits in result of responseData + * exampleFile ArchiveItem.feature + * step I want to check that item does not exits in response + **/ +Then('I want to check that item does not exits in response', function() { + + const id = this.context.item.id; + const results = this.context.responseData.results; + var testResult = false; + + for(var i=0; i< results.length; i++){ + if ( id == results[i].id){ + testResult = true; + } + } + + assert.equal(testResult,false); +});
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/stepDefinitions/GlobalTypes.js b/cucumber-js-test-apis-ci/stepDefinitions/GlobalTypes.js new file mode 100644 index 0000000000..461fee74a7 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/GlobalTypes.js @@ -0,0 +1,24 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * 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. + */ + +const {Then, When} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); + +When('I want to get interface lifecycle types', function () { + let path = '/catalog/interfaceLifecycleTypes'; + return util.request(this.context, 'GET', path, null, false, 'catalog'); +});
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/stepDefinitions/InputData_steps.js b/cucumber-js-test-apis-ci/stepDefinitions/InputData_steps.js new file mode 100644 index 0000000000..57a374b9bb --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/InputData_steps.js @@ -0,0 +1,94 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When, Given} = require('cucumber'); +const assert = require('assert'); +const _ = require('lodash'); +const fs = require('fs'); +const util = require('./Utils.js'); + +/** + * @module InputData + * @description creates an ampty input data object + * @exampleFile Example_Rest_Calls.feature, Example_VLM.feature + * @step I want to create input data + **/ +When('I want to create input data', function () { + this.context.inputData = {}; +}); + +/** + * @module InputData + * @exampleFile Example_Heat.feature + * @description I want to set the input data to:<br> + * """<br> + * {jsonObject}<br> + * """<br> + * @step creates an input data element with the given json object + **/ +When('I want to set the input data to:', function (docString) { + this.context.inputData = JSON.parse(docString); +}); + +/** + * @module InputData + * @description creates an input data object from the json in the given file + * @exampleFile Example_Rest_Calls.feature + * @step I want to set the input data to file {string} + **/ +When('I want to set the input data to file {string}', function (string) { + this.context.inputData = util.getJSONFromFile(string); +}); + +/** + * @module InputData + * @description sets the property on the input data to the given value + * @exampleFile Example_Rest_Calls.feature, Example_VLM.feature + * @step I want to update the input property {string} with value {string} + **/ +Then('I want to update the input property {string} with value {string}', function(string, string2) { + _.set(this.context.inputData, string, string2); +}); + +/** + * @module InputData + * @description sets the input property on the input data to the value from property + * @exampleFile TestMD5.feature + * @step I want to update the input property {string} from property {string} + **/ +Then('I want to update the input property {string} from property {string}', function(string, string2) { + let val = _.get(this.context, string2); + _.set(this.context.inputData, string, val); +}); + +/** + * @module InputData + * @description removes a property from the input data object + * @exampleFile Example_Rest_Calls.feature + * @step I want to remove {string} from the input data + **/ +Then('I want to remove {string} from the input data', function(string) { + delete this.context.inputData[string]; +}); + +/** + * @module InputData + * @description sets the input data property to a random value + * @exampleFile Example_Rest_Calls.feature + * @step I want to update the input property {string} with a random value + **/ +Then('I want to update the input property {string} with a random value', function(string) { + _.set(this.context.inputData, string, util.random()); +}); diff --git a/cucumber-js-test-apis-ci/stepDefinitions/InterfaceOperationSteps.js b/cucumber-js-test-apis-ci/stepDefinitions/InterfaceOperationSteps.js new file mode 100644 index 0000000000..408db9e9f8 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/InterfaceOperationSteps.js @@ -0,0 +1,156 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); + + +When('I want to create a VF', function() { + let inputData = util.getJSONFromFile('resources/json/operation/createVF.json'); + + inputData.name = util.random(); + inputData.tags[0] = util.random(); + + var type = "resources"; + let path = '/catalog/' + type; + return util.request(this.context, 'POST', path, inputData, false, 'catalog').then(result => { + this.context.component = {uniqueId : result.data.uniqueId, type : type, id : result.data.inputs[0].uniqueId}; +}); +}); + +When('I want to create a Service', function() { + let inputData = util.getJSONFromFile('resources/json/operation/createService.json'); + + inputData.name = util.random(); + inputData.tags[0] = util.random(); + + var type = "services"; + let path = '/catalog/' + type; + return util.request(this.context, 'POST', path, inputData, false, 'catalog').then(result => { + this.context.component = {uniqueId : result.data.uniqueId, type : type, id : result.data.inputs[0].uniqueId}; +}); +}); + +function makeType() { + var text = ""; + var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + for (var i = 0; i < 5; i++) + text += possible.charAt(Math.floor(Math.random() * possible.length)); + + return text; +} + +When('I want to create an Operation with input output', function() { + let path = '/catalog/' + this.context.component.type + '/' + this.context.component.uniqueId + '/interfaceOperations'; + let inputData = util.getJSONFromFile('resources/json/operation/createOperationWithInputOutput.json'); + + inputData.interfaceOperations.operation.inputParams.listToscaDataDefinition[0].name = util.random(); + inputData.interfaceOperations.operation.inputParams.listToscaDataDefinition[0].property = this.context.component.id; + inputData.interfaceOperations.operation.outputParams.listToscaDataDefinition[0].name = util.random(); + inputData.interfaceOperations.operation.operationType = makeType(); + inputData.interfaceOperations.operation.description = makeType(); + + return util.request(this.context, 'POST', path, inputData, false, 'catalog').then(result => { + this.context.operation = {uniqueId : result.data.uniqueId, operationType : result.data.operationType}; +}); +}); + +When('I want to create an Operation', function() { + let path = '/catalog/' + this.context.component.type + '/' + this.context.component.uniqueId + '/interfaceOperations'; + let inputData = util.getJSONFromFile('resources/json/operation/createOperation.json'); + inputData.interfaceOperations.operation.operationType = makeType(); + inputData.interfaceOperations.operation.description = makeType(); + + return util.request(this.context, 'POST', path, inputData, false, 'catalog').then(result => { + this.context.operation = {uniqueId : result.data.uniqueId, operationType : result.data.operationType}; +}); +}); + +When('I want to create an Operation with workflow', function() { + let path = '/catalog/' + this.context.component.type + '/' + this.context.component.uniqueId + '/interfaceOperations'; + let inputData = util.getJSONFromFile('resources/json/operation/createOperation-with-workflow.json'); + + inputData.interfaceOperations.operation.inputParams.listToscaDataDefinition[0].name = util.random(); + inputData.interfaceOperations.operation.inputParams.listToscaDataDefinition[0].property = this.context.component.id; + inputData.interfaceOperations.operation.outputParams.listToscaDataDefinition[0].name = util.random(); + inputData.interfaceOperations.operation.operationType = makeType(); + inputData.interfaceOperations.operation.description = makeType(); + inputData.interfaceOperations.operation.workflowId = makeType(); + inputData.interfaceOperations.operation.workflowVersionId = makeType(); + + return util.request(this.context, 'POST', path, inputData, false, 'catalog').then(result => { + this.context.operation = {uniqueId : result.data.uniqueId, operationType : result.data.operationType}; +}); +}); + +When('I want to list Operations', function () { + let path = '/catalog/'+ this.context.component.type + '/' + this.context.component.uniqueId + '/filteredDataByParams?include=interfaces'; + return util.request(this.context, 'GET', path, null, false, 'catalog').then((result)=> { + }); +}); + +When('I want to get an Operation by Id', function () { + let path = '/catalog/'+ this.context.component.type + '/' + this.context.component.uniqueId + '/interfaceOperations/' + this.context.operation.uniqueId; + return util.request(this.context, 'GET', path, null, false, 'catalog').then((result)=> { + this.context.operation = {uniqueId : result.data.uniqueId, operationType : result.data.operationType}; +}); +}); + +When('I want to update an Operation', function () { + let inputData = util.getJSONFromFile('resources/json/operation/updateOperation.json'); + let path = '/catalog/'+ this.context.component.type + '/'+ this.context.component.uniqueId +'/interfaceOperations'; + inputData.interfaceOperations.operation.uniqueId = this.context.operation.uniqueId; + inputData.interfaceOperations.operation.operationType = this.context.operation.operationType; + inputData.interfaceOperations.operation.inputParams.listToscaDataDefinition[0].name = util.random(); + inputData.interfaceOperations.operation.inputParams.listToscaDataDefinition[0].property = this.context.component.id; + inputData.interfaceOperations.operation.outputParams.listToscaDataDefinition[0].name = util.random(); + return util.request(this.context, 'PUT', path, inputData, false, 'catalog').then((result)=> { + this.context.operation = {uniqueId : result.data.uniqueId, operationType : result.data.operationType}; +}); +}); + + +When('I want to delete an Operation', function() { + let path = '/catalog/'+ this.context.component.type + '/'+ this.context.component.uniqueId +'/interfaceOperations/' + this.context.operation.uniqueId; + return util.request(this.context, 'DELETE', path, null, false, 'catalog'); +}); + + +When('I want to checkin this component', function () { + let path = '/catalog/'+ this.context.component.type + '/' + this.context.component.uniqueId + '/lifecycleState/CHECKIN' ; + let inputData = {userRemarks: 'checkin'}; + return util.request(this.context, 'POST', path, inputData, false, 'catalog').then((result)=> { + this.context.component = {uniqueId : result.data.uniqueId, type : this.context.component.type}; +}); +}); + + +Then('I want to submit this component', function () { + let path = '/catalog/'+ this.context.component.type + '/' + this.context.component.uniqueId + '/lifecycleState/certificationRequest' ; + let inputData = {userRemarks: 'submit'}; + return util.request(this.context, 'POST', path, inputData, false, 'catalog').then((result)=> { + this.context.component = {uniqueId : result.data.uniqueId}; +}); +}); + +Then('I want to certify this component', function () { + let path = '/catalog/'+ this.context.component.type +'/' + this.context.component.uniqueId + '/lifecycleState/certify' ; + let inputData = {userRemarks: 'certify'}; + return util.request(this.context, 'POST', path, inputData, false, 'catalog').then((result)=> { + this.context.component = {uniqueId : result.data.uniqueId}; +}); +});
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/stepDefinitions/Item_steps.js b/cucumber-js-test-apis-ci/stepDefinitions/Item_steps.js new file mode 100644 index 0000000000..3ff7f20f73 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/Item_steps.js @@ -0,0 +1,91 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); +/** + * @module Item + * @description uses item id and version id from context + * @exampleFile Example_VSP.feature, Example_VLM.feature + * @step I want to make sure this Item has status {string} + **/ +Then('I want to make sure this Item has status {string}', function (string) { + let path = '/items/' + this.context.item.id + '/versions'; + return util.request(this.context, 'GET', path).then(result => { + assert.equal(result.data.results[0].id, this.context.item.versionId); + assert.equal(result.data.results[0].status, string); + }); +}); +/** + * @module Item + * @description uses item id and version id from context + * @exampleFile Example_VSP.feature, Example_VLM.feature + * @step I want to commit this Item + **/ +Then('I want to commit this Item', function () { + let path = '/items/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/actions'; + let inputData = {action: 'Commit', commitRequest: {message: '00Behave'}}; + return util.request(this.context, 'PUT', path, inputData); +}); +/** + * @module Item + * @description creates a new major version. item id and version id from context + * @exampleFile Example_VLM.feature + * @step I want to create a new version for this Item + **/ +Then('I want to create a new version for this Item', function () { + let path = '/items/' + this.context.item.id + '/versions/' + this.context.item.versionId; + let inputData = {description: 'Behave Version', creationMethod: 'major'}; + return util.request(this.context, 'POST', path, inputData).then(result => { + assert.equal(result.data.status, 'Draft'); + }); +}); +/** + * @module Item + * @description reverts to a revision with a given saved property. Should be set from the revision list first + * @exampleFile Example_VLM.feature + * @step I want to commit this Item + **/ +Then('I want to revert this Item to the revision with the value from saved property {string}', function (string) { + let path = '/items/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/actions'; + let inputData = {action: 'Revert', revisionRequest: {revisionId: this.context[string]}}; + return util.request(this.context, 'PUT', path, inputData); +}); + + +/** + * @module Item + * @exampleFile ArchiveItem.feature + * @step I want to archive this item + **/ +Then('I want to archive this item', function() { + let path = '/items/' + this.context.item.id + '/actions' + let inputData = {action: 'ARCHIVE'}; + return util.request(this.context, 'PUT', path, inputData); +}); + + +/** + * @module Item + * @exampleFile ArchiveItem.feature + * @step I want to restore this item + **/ +Then('I want to restore this item', function() { + let path = '/items/' + this.context.item.id + '/actions' + let inputData = {action: 'RESTORE'}; + return util.request(this.context, 'PUT', path, inputData); +}); + diff --git a/cucumber-js-test-apis-ci/stepDefinitions/NetworkPackage_steps.js b/cucumber-js-test-apis-ci/stepDefinitions/NetworkPackage_steps.js new file mode 100644 index 0000000000..731d5b8470 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/NetworkPackage_steps.js @@ -0,0 +1,54 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); +const _ = require('lodash'); +const fs = require('fs'); +require('node-zip'); + +/** + * @module NetworkPackage + * @description Uploads the NetworkPackage file to the VSP on the context + * @exampleFile Example_HEAT.feature + * @step I want to upload a NetworkPackage for this VSP from path {string} + **/ +Then('I want to upload a NetworkPackage for this VSP from path {string}', function (string) { + let path = '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/orchestration-template-candidate'; + return util.request(this.context, 'POST', path, string, true); +}); + +/** + * @module NetworkPackage + * @description Downloads the network package to disk + * @exampleFile Example_HEAT.feature + * @step I want to download the NetworkPackage for this VSP to path {string} + **/ +When('I want to download the NetworkPackage for this VSP to path {string}', function (string, callback) { + let path = '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/orchestration-template-candidate'; + return [util.download(this.context, path, string, callback)]; +}); + +/** + * @module NetworkPackage + * @description Processes the NetworkPackage file on the server + * @exampleFile Example_HEAT.feature + * @step I want to process the NetworkPackage file for this VSP + **/ +Then('I want to process the NetworkPackage file for this VSP', function () { + let path = '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/orchestration-template-candidate/process'; + return util.request(this.context, 'PUT', path, this.context.inputData); +}); diff --git a/cucumber-js-test-apis-ci/stepDefinitions/Questionnaire_steps.js b/cucumber-js-test-apis-ci/stepDefinitions/Questionnaire_steps.js new file mode 100644 index 0000000000..2e169fadc8 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/Questionnaire_steps.js @@ -0,0 +1,129 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); +const _ = require('lodash'); + +function getPath(path, context) { + let compiled = _.template(path); + return compiled(context); +} + +/** + * @module Questionnaire + * @description Gets the questionnaire for the current item and saves it on the context + * @exampleFile Example_VSP.feature + * @step I want to get the questionnaire for this item + **/ +Then('I want to get the questionnaire for this item', function () { + let path = "/vendor-software-products/" + this.context.item.id + "/versions/" + this.context.item.versionId + "/questionnaire"; + return util.request(this.context, 'GET', path).then(result => { + this.context.qdata = JSON.parse(result.data.data); + this.context.qschema = result.data.schema; + this.context.qurl = path; + }); +}); + +/** + * @module Questionnaire + * @description Gets the questionnaire for the current item and component and saves it on the context + * @exampleFile Example_VSP.feature + * @step I want to get the questionnaire for this component + **/ +Then('I want to get the questionnaire for this component', function () { + let path = "/vendor-software-products/" + this.context.item.id + "/versions/" + this.context.item.versionId + "/components/" + this.context.componentId + "/questionnaire"; + return util.request(this.context, 'GET', path).then(result => { + this.context.qdata = JSON.parse(result.data.data); + this.context.qschema = result.data.schema; + this.context.qurl = path; + }); +}); + +/** + * @module Questionnaire + * @description Gets the questionnaire from path and saves it on the context + * @exampleFile TestMD5.feature + * @step I want to get the questionnaire for this path {string} + **/ +Then('I want to get the questionnaire for this path {string}', function (string) { + let path = getPath(string, this.context); + return util.request(this.context, 'GET', path).then(result => { + this.context.qdata = JSON.parse(result.data.data); + this.context.qschema = result.data.schema; + this.context.qurl = path; + }); +}); + +/** + * @module Questionnaire + * @description Updates the property for the saved questionnaire + * @exampleFile Example_VSP.feature + * @step I want to update this questionnaire with value {string} for path {string} + **/ +Then('I want to update this questionnaire with value {string} for property {string}', function (string, string2) { + _.set(this.context.qdata, string, string2); +}); + +/** + * @module Questionnaire + * @description Checks the questionnaire data on the context for the given value and property + * @exampleFile Example_VSP.feature + * @step I want to check this questionnaire has value {string} for property {string} + **/ +Then('I want to check this questionnaire has value {string} for property {string}', function (string, string2) { + assert.equal(_.get(this.context.qdata, string), string2); +}); + +/** + * @module Questionnaire + * @description Updates the the questionnaire data from the context to the same url that loaded it + * @exampleFile Example_VSP.feature + * @step I want to update this questionnaire + **/ +Then('I want to update this questionnaire', function () { + return util.request(this.context, 'PUT', this.context.qurl, this.context.qdata); +}); + +/** + * @module Questionnaire + * @description Checks if the value of given property name in questionnaire data on the context is same as provided value + * @exampleFile ComponentData.feature + * @step I want to check value of {string} in the questionnaire data with value of property {string} + */ +Then('I want to check value of {string} in the questionnaire data with value of property {string}', function (string, + propertyName) { + expectedValue = _.get(this.context, propertyName) + data1 = this.context.qdata; + assert.equal(_.get(data1, string), expectedValue); +}); + +/** + * @module Questionnaire - Defined in Questionnaire module since this is used to fetch componentId for which questionnaire is to be fetched + * @description Finds and set componentId in context from list of components in responseData for component name in given property + * @exampleFile ComponentData.feature + * @step I want to set componentId for component name in property {string} + */ +Then('I want to set componentId for component name in property {string}', function (string) { + displayName = _.get(this.context, string); + results = this.context.responseData.results; + for (i=0; i<results.length; i++) { + if (results[i].displayName == displayName ){ + this.context.componentId = results[i].id; + return; + } + } +});
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/stepDefinitions/REST_Steps.js b/cucumber-js-test-apis-ci/stepDefinitions/REST_Steps.js new file mode 100644 index 0000000000..c3844124d7 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/REST_Steps.js @@ -0,0 +1,80 @@ +/* + * Copyright © 2016-2018 European Support Limited + * + * 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. + */ +const {When} = require('cucumber'); +const _ = require('lodash'); +const util = require('./Utils.js'); +_.templateSettings.interpolate = /{([\s\S]+?)}/g; + +function getPath(path, context) { + let compiled = _.template(path); + return compiled(context); +} +/** + * @module Rest_Calls + * @description makes a GET request to the given path (path is appended after the "onboarding-api/v1.0" prefix)<br> + * @exampleFile Example_Rest_Calls.feature + * @step I want to get path {string} + **/ +When('I want to get path {string}', function(string) { + let path = getPath(string, this.context); + return util.request(this.context, 'GET', path); +}); + +/** + * @module Rest_Calls + * @description makes a DELETE request to the given path and appends the saved property (path is appended after the "onboarding-api/v1.0" prefix)<br> + * @exampleFile Example_Rest_Calls.feature + * @step I want to delete for path {string} with the value from saved property {string} + **/ +When('I want to delete for path {string} with the value from saved property {string}', function(string, string2) { + let path = getPath(string, this.context); + path += '/' + this.context[string2]; + return util.request(this.context, 'DELETE', path); +}); + +/** + * @module Rest_Calls + * @description makes a DELETE request to the given path and appends the saved property (path is appended after the "onboarding-api/v1.0" prefix)<br> + * @exampleFile Example_Rest_Calls.feature + * @step I want to delete for path {string} with the value from saved property {string} + **/ +When('I want to delete for path {string}', function (string) { + let path = getPath(string, this.context); + //path += '/' + this.context[string2]; + return util.request(this.context, 'DELETE', path); +}); + +/** + * @module Rest_Calls + * @description makes a PUT request to the given path and sends the input data from the context (path is appended after the "onboarding-api/v1.0" prefix)<br> + * @exampleFile Example_Rest_Calls.feature + * @step I want to update for path {string} with the input data from the context + **/ +When('I want to update for path {string} with the input data from the context', function(string) { + let path = getPath(string, this.context); + return util.request(this.context, 'PUT', path, this.context.inputData); +}); + +/** + * @module Rest_Calls + * @description makes a POST request to the given path and sends the input data from the context (path is appended after the "onboarding-api/v1.0" prefix)<br> + * @exampleFile Example_Rest_Calls.feature + * @step I want to create for path {string} with the input data from the context + **/ +When('I want to create for path {string} with the input data from the context', function(string) { + let path = getPath(string, this.context); + return util.request(this.context, 'POST', path, this.context.inputData); +}); diff --git a/cucumber-js-test-apis-ci/stepDefinitions/Toggle_Steps.js b/cucumber-js-test-apis-ci/stepDefinitions/Toggle_Steps.js new file mode 100644 index 0000000000..16bcc2afb9 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/Toggle_Steps.js @@ -0,0 +1,48 @@ +/* +* Copyright © 2016-2018 European Support Limited +* +* 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. +*/ + +const {Then, When, Given} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); + + +/** + * @module Toggle + * @description this step will retrun and print to console the list of toggled features with their status + * @exampleFile Example_Toggle.feature + * @step I want to list Togglz + **/ + +Then('I want to list Togglz', function() { + let path = '/togglz' ; + return util.request(this.context, 'GET', path).then(result => { + const featureList = result.data.features; + console.log(featureList); + }); + +}); + +/** + * @module Toggle + * @description this step will set the status for all toggled features + * @exampleFile Example_Toggle.feature + * @step I want to set all Togglz to be "true/false" + **/ + +Then('I want to set all Togglz to be {string}', function(string) { + let path = '/togglz/state/' + string ; + return util.request(this.context, 'PUT', path); +});
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/stepDefinitions/Utils.js b/cucumber-js-test-apis-ci/stepDefinitions/Utils.js new file mode 100644 index 0000000000..66e959f6e5 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/Utils.js @@ -0,0 +1,148 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const request = require('request'); +const fs = require('fs'); +require('node-zip'); + +function _request(context, method, path, data, isBinary=false, type='onboarding') { + let server = context.getUrlForType(type); + + let options = { + method: method, + url: server + path, + headers: context.headers[type] + }; + console.log('--> Calling REST ' + options.method +' url: ' + options.url); + + return new Promise(function (resolve, reject) { + if (method === 'POST' || method === 'PUT') { + if (isBinary) { + var formData = { + upload: fs.createReadStream(data), + }; + options.formData = formData; + } else { + options.json = data; + } + } + request(options, function (err, result, data) { + context.inputData = null; + if (err) { + console.error('Request URL: ' + result.request.uri.href); + console.error('Request Method: ' + result.request.method); + console.error('Response Status Code: ' +result.statusCode); + console.log(err); + reject(err); + } else { + let isExpected = (context.shouldFail) ? (result.statusCode != 200 && result.statusCode != 201) : (result.statusCode == 200 || result.statusCode == 201); + if (!isExpected) { + console.error('Request URL: ' + result.request.uri.href); + console.error('Request Method: ' + result.request.method); + console.error('Response Status Code: ' +result.statusCode); + console.error(result.body); + reject('Status Code was ' + result.statusCode); + } + if (context.shouldFail && context.errorCode) { + if (typeof data === 'string' && data) { + data = JSON.parse(data); + } + let errorCode = data.errorCode; + let contextErrorCode = context.errorCode; + context.errorCode = null; + if (errorCode !== contextErrorCode) { + reject('Error Code was ' + errorCode + ' instead of ' + contextErrorCode); + } + } + if (context.shouldFail && context.errorMessage) { + if (typeof data === 'string' && data) { + data = JSON.parse(data); + } + let errorMessage = data.message; + let contextErrorMessage = context.errorMessage; + context.errorMessage = null; + if (errorMessage !== contextErrorMessage) { + reject('Error Message was ' + errorMessage + ' instead of ' + contextErrorMessage); + } + } + if (context.shouldFail) { + context.shouldFail = false; + resolve({statusCode: result.statusCode, data: {}}); + return; + } + if (method === 'GET' && isBinary) { + // downloading (NetworkPackage) files + return ({ + blob: blobUtil.createBlob([data], {type: 'text/plain'}), + headers: result.headers + }); + } else { + if (typeof data === 'string' && data) { + data = JSON.parse(data); + } + context.responseData = data; + context.inputData = data; + resolve({statusCode: result.statusCode, data: data}); + } + } + }); + }); +} + +function download(context, path, filePath, callback, type='onboarding') { + let server = context.getUrlForType(type); + let options = { + method: 'GET', + url: server + path, + headers: context.headers[type] + }; + console.log('--> Calling REST download url: ' + options.url); + + var file = fs.createWriteStream(filePath); + var r = request(options).pipe(file); + r.on('error', function (err) { + console.log(err); + callback(err); + }); + r.on('finish', function () { + file.close(); + let zipFile = fs.readFileSync(filePath, 'binary'); + let zip = new JSZip(zipFile, {base64: false, checkCRC32: true}); + if (zip.files['MANIFEST.json']) { + let manifestData = zip.files['MANIFEST.json']._data; + manifestData = manifestData.replace(/\\n/g, ''); + context.responseData = JSON.parse(manifestData); + } + callback(); + }); + +}; + +function _random() { + let d = new Date(); + return d.getTime().toString().split('').reverse().join(''); +} + +function _getJSONFromFile(file) { + return JSON.parse(fs.readFileSync(file, 'utf8')); +} + + +module.exports = { + request: _request, + random : _random, + getJSONFromFile: _getJSONFromFile, + download: download +}; diff --git a/cucumber-js-test-apis-ci/stepDefinitions/VF_steps.js b/cucumber-js-test-apis-ci/stepDefinitions/VF_steps.js new file mode 100644 index 0000000000..3411a25fcb --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/VF_steps.js @@ -0,0 +1,43 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); + + +/** + * @module VF + * @description Creates a VF for this Item (does NOT work on localhost). will get the data for the item and then update the input + * data for the VF call. + * @exampleFile Example_VSP.feature + * @step I want to create a VF for this Item + **/ +Then('I want to create a VF for this Item', function () { + return util.request(this.context, 'GET', '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId).then(result => { + this.context.inputData = util.getJSONFromFile('resources/json/createVF.json'); + // start replacing stuff + this.context.inputData.contactId = this.context.headers['vf']["USER_ID"]; + this.context.inputData.categories[0].uniqueId = result.data.category; + this.context.inputData.categories[0].subcategories[0].uniqueId = result.data.subCategory; + this.context.inputData.description = result.data.description; + this.context.inputData.name = result.data.name; + this.context.inputData.tags[0] = result.data.name; + this.context.inputData.vendorName = result.data.vendorName; + this.context.inputData.csarUUID = this.context.item.id; + return util.request(this.context, 'POST', '/catalog/resources', this.context.inputData, false, 'vf'); + }); +}); + diff --git a/cucumber-js-test-apis-ci/stepDefinitions/VLM_steps.js b/cucumber-js-test-apis-ci/stepDefinitions/VLM_steps.js new file mode 100644 index 0000000000..35e78b2d97 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/VLM_steps.js @@ -0,0 +1,79 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When, Given} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); + +/** + * @module VLM + * @description Creates a new VLM with a random name and saves the id and versionId on the context item object and the context vlm object<br> + * Input data will be taken from the 'resources/json/createVLM.json' file. + *@exampleFile Example_VLM.feature + * @step I want to create a VLM + **/ +When('I want to create a VLM', function() { + let inputData = util.getJSONFromFile('resources/json/createVLM.json'); + inputData.vendorName = util.random(); + let path = '/vendor-license-models'; + return util.request(this.context, 'POST', path, inputData).then(result => { + this.context.item ={id : result.data.itemId, versionId: result.data.version.id}; + this.context.vlm = {id : result.data.itemId, name : inputData.vendorName}; + }); +}); + +/** + * @module VLM + * @exampleFile Example_VLM.feature + * @step I want to submit this VLM + **/ +Then('I want to submit this VLM', function() { + let inputData = {action: 'Submit'}; + let path = '/vendor-license-models/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/actions'; + return util.request(this.context, 'PUT', path, inputData); +}); + +/** + * @module VLM + * @exampleFile DeleteVLMDraft.feature + * @step I want to delete this VLM + **/ +Then('I want to delete this VLM', function() { + let path = '/vendor-license-models/' + this.context.item.id ; + return util.request(this.context, 'DELETE', path); +}); + + +/** + * @module VLM + * @exampleFile ArchiveItem.feature + * @step I want to list Archived VLMs + **/ +Then('I want to list Archived VLMs', function() { + let path = '/vendor-license-models/?Status=ARCHIVED'; + return util.request(this.context, 'GET', path); +}); + +/** + * @module VLM + * @exampleFile ArchiveItem.feature + * @step I want to list Active VLMs + **/ +Then('I want to list Active VLMs', function() { + let path = '/vendor-license-models'; + return util.request(this.context, 'GET', path); +}); + + diff --git a/cucumber-js-test-apis-ci/stepDefinitions/VSP_steps.js b/cucumber-js-test-apis-ci/stepDefinitions/VSP_steps.js new file mode 100644 index 0000000000..b9b928a7f6 --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/VSP_steps.js @@ -0,0 +1,185 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const {Then, When} = require('cucumber'); +const assert = require('assert'); +const util = require('./Utils.js'); +const _ = require('lodash'); + + +/** + * @module VSP + * @description Creates a new VSP with a random name and saves the id and versionId on the context item object and the context vsp object<br> + * Input data will be taken from the 'resources/json/createVSP.json' file. + * Vendor id and name are taken from the vlm on the context (requires a VLM to be created first). + * @exampleFile Example_VSP.feature + * @step I want to create a VSP with onboarding type {string} + **/ +When('I want to create a VSP with onboarding type {string}', function(string) { + let inputData = util.getJSONFromFile('resources/json/createVSP.json'); + inputData.onboardingMethod = string; + inputData.vendorName = this.context.vlm.name; + inputData.vendorId = this.context.vlm.id; + inputData.name = util.random(); + let path = '/vendor-software-products'; + return util.request(this.context, 'POST', path, inputData).then(result => { + this.context.item = {id : result.data.itemId, versionId: result.data.version.id}; + this.context.vsp = {id : result.data.itemId, versionId: result.data.version.id}; + }); +}); + +/** + * @module VSP + * @description Creates a new VSP with the 'NetowrkPackage' onboarding type and with a random name and saves the id and versionId on the context item object and the context vsp object<br> + * Input data will be taken from the 'resources/json/createVSP.json' file. + * Vendor id and name are taken from the vlm on the context (requires a VLM to be created first). + * @exampleFile Example_VSP.feature + * @step I want to create a VSP with onboarding type {string} + **/ +When('I want to create a VSP with onboarding type Manual', function() { + let inputData = util.getJSONFromFile('resources/json/createManualVSP.json'); + inputData.vendorName = this.context.vlm.name; + inputData.vendorId = this.context.vlm.id; + inputData.name = util.random(); + inputData.licensingVersion = this.context.licensingVersion; + inputData.licensingData.licenseAgreement = this.context.licenseAgreement; + inputData.licensingData.featureGroups[0] = this.context.featureGroupId; + let path = '/vendor-software-products'; + return util.request(this.context, 'POST', path, inputData).then(result => { + this.context.item = {id : result.data.itemId, versionId: result.data.version.id}; + this.context.vsp = {id : result.data.itemId, versionId: result.data.version.id}; + }); +}); + + +/** + * @module VSP + * @exampleFile Example_VSP.feature + * @step I want to submit this VSP + **/ +Then('I want to submit this VSP', function () { + let path = '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/actions'; + let inputData = {action: 'Submit'}; + return util.request(this.context, 'PUT', path, inputData); +}); + +/** + * @module VSP + * @exampleFile Example_VSP.feature + * @step I want to package this VSP + **/ +Then('I want to package this VSP', function () { + let path = '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/actions'; + let inputData = {action: 'Create_Package'}; + return util.request(this.context, 'PUT', path, inputData); +}); + +/** + * @module VSP + * @description Adds a component to the current item + * @exampleFile Example_VSP.feature + * @step I want to add a component + **/ +Then('I want to add a component', function () { + let path = '/vendor-software-products/' + this.context.item.id + '/versions/' + this.context.item.versionId + '/components'; + let inputData = {name: 'Cucumber Name', displayName: 'Cucumber', description: 'Cucumber Description'}; + return util.request(this.context, 'POST', path, inputData).then(result => { + this.context.componentId = result.data.vfcId; + }); +}); + + +/** + * @module VSP + * @description Downloads the packaged file for this component to the given path + * @exampleFile Example_VSP.feature + * @step I want to get the package for this Item to path {string} + **/ +When('I want to get the package for this Item to path {string}', function (string, callback) { + let path = '/vendor-software-products/packages/' + this.context.item.id; + return [util.download(this.context, path, string, callback)]; +}); + + +/** + * @module VSP + * @exampleFile DeleteVSPDraft.feature + * @step I want to delete this VSP + **/ +Then('I want to delete this VSP', function() { + let path = '/vendor-software-products/' + this.context.item.id ; + return util.request(this.context, 'DELETE', path); +}); + +/** + * @module VSP + * @exampleFile ArchiveItem.feature + * @step I want to list Archived VSPs + **/ +Then('I want to list Archived VSPs', function() { + let path = '/vendor-software-products/?Status=ARCHIVED'; + return util.request(this.context, 'GET', path); +}); + +/** + * @module VSP + * @exampleFile ArchiveItem.feature + * @step I want to list Active VSPs + **/ +Then('I want to list Active VSPs', function() { + let path = '/vendor-software-products'; + return util.request(this.context, 'GET', path); +}); + + +/** + * @module VSP + * @exampleFile FilterArchivedVSPpackage.feature + * @step I want to list Archived VSPs packages + **/ +Then('I want to list Archived VSPs packages', function() { + let path = '/vendor-software-products/packages?Status=ARCHIVED'; + return util.request(this.context, 'GET', path); +}); + +/** + * @module VSP + * @exampleFile FilterArchivedVSPpackage.feature + * @step I want to list Active VSPs packages + **/ +Then('I want to list Active VSPs packages', function() { + let path = '/vendor-software-products/packages'; + return util.request(this.context, 'GET', path); + +}); + +/** + * @module VSP + * @exampleFile FilterArchivedVSPpackage.feature + * @step I want to check that VSP package exits in response + **/ +Then('I want to check that VSP package exits in response', function() { + + const packages = this.context.responseData.results; + const id = this.context.item.id; + var testResult = false; + + for(var i=0; i< packages.length; i++){ + if (id == packages[i].packageId){ + testResult = true; + } + } + assert.equal(testResult,true); +});
\ No newline at end of file diff --git a/cucumber-js-test-apis-ci/stepDefinitions/world.js b/cucumber-js-test-apis-ci/stepDefinitions/world.js new file mode 100644 index 0000000000..eaf48aa31f --- /dev/null +++ b/cucumber-js-test-apis-ci/stepDefinitions/world.js @@ -0,0 +1,92 @@ +/* + * Copyright © 2016-2017 European Support Limited + * + * 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. + */ +const { setWorldConstructor } = require('cucumber'); +const _ = require('lodash'); + +let config = require('../config.json'); +let localConfig = {}; +try { + localConfig = require('../devConfig.json'); +} catch (e) { + try { + localConfig = require('../environments/dockerConfig.json'); + } catch (e) { + console.error("no env configuration was found!"); + } +} + +config = _.merge(config, localConfig); +var {setDefaultTimeout} = require('cucumber'); + + +/** + * @module Context + * @description Context that is used per feature file and can be accessed as 'this.context' in all steps.<Br> + *<Br> + * Contains the following items:<br> + * <li>this.context.server <ul>REST server and onboarding prefix including version. set either in configuration file or from the command line or SERVER environment variable</ul> + * <li>this.context.vlm <ul>When a VLM has been created, this has the an id and versionId set to the correct IDs.</ul> + * <li>this.context.vsp <ul>When a VSP has been created, this has the an id and versionId and componentId set to the correct IDs.</ul> + * <li>this.context.item <ul>When a VLM or VSP has been created, this has the an id and versionId set to the correct IDs.</ul> + * <li>this.context <ul>Object with properties that were saved in the steps.</ul> + * <li>this.context.inputdata <ul><b>Automatically updated with the last responseData from the Rest call</b><br>Object with properties that were prepares in the steps.</ul> + * <li>this.context.responseData <ul>Response from the last REST call.</ul> + **/ +class CustomWorld { + constructor(options) { + this.context = {}; + this.context.headers = {}; + let typeName; + for (typeName in config) { + this.context.headers[typeName] = {}; + if (config[typeName].user) { + this.context.headers[typeName]['USER_ID'] = config[typeName].user; + } + } + + this.context.vlm = {id: null, versionId: null}; + this.context.vsp = {id: null, versionId: null}; + this.context.item = {id: null, versionId: null, componentId: null}; + + this.context.shouldFail = false; + this.context.errorCode = null; + this.context.inputData = null; + this.context.responseData = null; + + this.context.defaultServerType = 'onboarding'; + + this.config = config; + + let context = this.context; + this.context.getUrlForType = (function(type) { + var _server = context.server; + var _config = config; + return function(type) { + let typeData = _config[type]; + let _url = _config.protocol + '://' + + typeData.server + ':' + + typeData.port + '/' + + typeData.prefix; + return _url; + } + })(); + + setDefaultTimeout(60 * 1000); + } +} + + +setWorldConstructor(CustomWorld); diff --git a/cucumber-js-test-apis-ci/yarn.lock b/cucumber-js-test-apis-ci/yarn.lock new file mode 100644 index 0000000000..6324af4df8 --- /dev/null +++ b/cucumber-js-test-apis-ci/yarn.lock @@ -0,0 +1,1186 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +ajv@^5.1.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ansi-styles@^3.1.0, ansi-styles@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +assertion-error-formatter@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/assertion-error-formatter/-/assertion-error-formatter-2.0.1.tgz#6bbdffaec8e2fa9e2b0eb158bfe353132d7c0a9b" + dependencies: + diff "^3.0.0" + pad-right "^0.2.2" + repeat-string "^1.6.1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-runtime@^6.11.6: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@7.0.0-beta.19: + version "7.0.0-beta.19" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.19.tgz#e928c7e807e970e0536b078ab3e0c48f9e052503" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +becke-ch--regex--s0-0-v1--base--pl--lib@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.2.0.tgz#2e73e9d21f2c2e6f5a5454045636f0ab93e46130" + +bluebird@^3.4.1, bluebird@~3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +catharsis@~0.8.9: + version "0.8.9" + resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.9.tgz#98cc890ca652dd2ef0e70b37925310ff9e90fc8b" + dependencies: + underscore-contrib "~0.3.0" + +chalk@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +cli-table@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + dependencies: + colors "1.0.3" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +colors@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +commander@^2.9.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +core-js@^2.4.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +cucumber-expressions@^5.0.7: + version "5.0.13" + resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-5.0.13.tgz#f174597dae6d2f0121294ac2ea65443249cf1587" + dependencies: + becke-ch--regex--s0-0-v1--base--pl--lib "^1.2.0" + +cucumber-html-reporter@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/cucumber-html-reporter/-/cucumber-html-reporter-3.0.4.tgz#1be0dee83f30a2f4719207859a5440ce082ffadd" + dependencies: + find "^0.2.7" + fs-extra "^3.0.1" + js-base64 "^2.3.2" + jsonfile "^3.0.0" + lodash "^4.17.2" + open "0.0.5" + +cucumber-tag-expressions@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cucumber-tag-expressions/-/cucumber-tag-expressions-1.1.1.tgz#7f5c7b70009bc2b666591bfe64854578bedee85a" + +cucumber@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/cucumber/-/cucumber-3.2.1.tgz#7898509bf6f3fe4ef5fa30ba987bd53d88d53251" + dependencies: + assertion-error-formatter "^2.0.1" + babel-runtime "^6.11.6" + bluebird "^3.4.1" + cli-table "^0.3.1" + colors "^1.1.2" + commander "^2.9.0" + cucumber-expressions "^5.0.7" + cucumber-tag-expressions "^1.1.1" + duration "^0.2.0" + escape-string-regexp "^1.0.5" + figures "2.0.0" + gherkin "^5.0.0" + glob "^7.0.0" + indent-string "^3.1.0" + is-generator "^1.0.2" + is-stream "^1.1.0" + lodash "^4.0.0" + mz "^2.4.0" + progress "^2.0.0" + resolve "^1.3.3" + stack-chain "^2.0.0" + stacktrace-js "^2.0.0" + string-argv "0.0.2" + title-case "^2.1.1" + util-arity "^1.0.2" + verror "^1.9.0" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +d@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" + dependencies: + es5-ext "~0.10.2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +diff@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + +docdash@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/docdash/-/docdash-0.4.0.tgz#05c3a50d83189981699ee0c076d3a3950db7ec00" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +duration@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/duration/-/duration-0.2.0.tgz#5f9c4dfaafff655de986112efe25c5978dd85146" + dependencies: + d "~0.1.1" + es5-ext "~0.10.2" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +error-ex@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.1.tgz#a3202b8fb03114aa9b40a0e3669e48b2b65a010a" + dependencies: + stackframe "^1.0.3" + +es-abstract@^1.4.3: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: + version "0.10.38" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.38.tgz#fa7d40d65bbc9bb8a67e1d3f9cc656a00530eed3" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +event-stream@~3.3.0: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +figures@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +find@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/find/-/find-0.2.9.tgz#4b73f1ff9e56ad91b76e716407fe5ffe6554bb8c" + dependencies: + traverse-chain "~0.1.0" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs-extra@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +gherkin@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/gherkin/-/gherkin-5.0.0.tgz#96def41198ec3908258b511af74f655a2764d2a1" + +glob@^7.0.0, glob@^7.0.5: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +indent-string@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-generator@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +js-base64@^2.3.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" + +js2xmlparser@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-3.0.0.tgz#3fb60eaa089c5440f9319f51760ccd07e2499733" + dependencies: + xmlcreate "^1.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdoc-one-page@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/jsdoc-one-page/-/jsdoc-one-page-0.0.5.tgz#8701e022159844dbd9cb64d9504974059604f58a" + +jsdoc@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.5.5.tgz#484521b126e81904d632ff83ec9aaa096708fa4d" + dependencies: + babylon "7.0.0-beta.19" + bluebird "~3.5.0" + catharsis "~0.8.9" + escape-string-regexp "~1.0.5" + js2xmlparser "~3.0.0" + klaw "~2.0.0" + marked "~0.3.6" + mkdirp "~0.5.1" + requizzle "~0.2.1" + strip-json-comments "~2.0.1" + taffydb "2.6.2" + underscore "~1.8.3" + +json-parse-better-errors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-2.5.0.tgz#7444fd8551ddf3e5da7198fea0c91bc8308cc274" + dependencies: + pako "~0.2.5" + +klaw@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-2.0.0.tgz#59c128e0dc5ce410201151194eeb9cbf858650f6" + dependencies: + graceful-fs "^4.1.9" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +lodash@^4.0.0, lodash@^4.17.2, lodash@^4.17.4: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +marked@~0.3.6: + version "0.3.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.12.tgz#7cf25ff2252632f3fe2406bde258e94eee927519" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.1.12, mime-types@~2.1.17: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + dependencies: + lower-case "^1.1.1" + +node-zip@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/node-zip/-/node-zip-1.1.1.tgz#94d1ad674a3cd46a1588dd736f4a9a78c757eb62" + dependencies: + jszip "2.5.0" + +normalize-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-newline/-/normalize-newline-3.0.0.tgz#1cbea804aba436001f83938ab21ec039d69ae9d3" + +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +npm-run-all@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056" + dependencies: + ansi-styles "^3.2.0" + chalk "^2.1.0" + cross-spawn "^5.1.0" + memorystream "^0.3.1" + minimatch "^3.0.4" + ps-tree "^1.1.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +open@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" + +pad-right@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/pad-right/-/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774" + dependencies: + repeat-string "^1.5.2" + +pako@~0.2.5: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + dependencies: + pify "^3.0.0" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + +ps-tree@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + dependencies: + event-stream "~3.3.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +request@^2.83.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +requizzle@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.1.tgz#6943c3530c4d9a7e46f1cddd51c158fc670cdbde" + dependencies: + underscore "~1.6.0" + +resolve@^1.3.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +"semver@2 || 3 || 4 || 5": + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stack-chain@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-2.0.0.tgz#d73d1172af89565f07438b5bcc086831b6689b2d" + +stack-generator@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.2.tgz#3c13d952a596ab9318fec0669d0a1df8b87176c7" + dependencies: + stackframe "^1.0.4" + +stackframe@^1.0.3, stackframe@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.0.4.tgz#357b24a992f9427cba6b545d96a14ed2cbca187b" + +stacktrace-gps@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz#33f8baa4467323ab2bd1816efa279942ba431ccc" + dependencies: + source-map "0.5.6" + stackframe "^1.0.4" + +stacktrace-js@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.0.tgz#776ca646a95bc6c6b2b90776536a7fc72c6ddb58" + dependencies: + error-stack-parser "^2.0.1" + stack-generator "^2.0.1" + stacktrace-gps "^3.0.1" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +string-argv@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" + +string.prototype.padend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +stringstream@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +taffydb@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + dependencies: + any-promise "^1.0.0" + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +title-case@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" + dependencies: + no-case "^2.2.0" + upper-case "^1.0.3" + +tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + +traverse-chain@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +underscore-contrib@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7" + dependencies: + underscore "1.6.0" + +underscore@1.6.0, underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + +underscore@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + +universalify@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + +upper-case@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +util-arity@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/util-arity/-/util-arity-1.1.0.tgz#59d01af1fdb3fede0ac4e632b0ab5f6ce97c9330" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +verror@1.10.0, verror@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xmlcreate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yamljs@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" + dependencies: + argparse "^1.0.7" + glob "^7.0.5" |