aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_vsp.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_vsp.py')
-rw-r--r--tests/test_vsp.py799
1 files changed, 799 insertions, 0 deletions
diff --git a/tests/test_vsp.py b/tests/test_vsp.py
new file mode 100644
index 0000000..a1aa8a7
--- /dev/null
+++ b/tests/test_vsp.py
@@ -0,0 +1,799 @@
+"""Test vsp module."""
+# Copyright 2022 Orange, Deutsche Telekom AG
+#
+# 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.
+from unittest import mock
+import json
+
+import pytest
+import requests
+from onapsdk.exceptions import APIError, ParameterError, RequestError
+
+from onapsdk.sdc.vsp import Vsp
+from onapsdk.sdc.vendor import Vendor
+import onapsdk.constants as const
+from onapsdk.sdc.sdc_element import SdcElement
+
+@mock.patch.object(Vsp, 'send_message_json')
+def test_get_all_no_vsp(mock_send):
+ """Returns empty array if no vsps."""
+ mock_send.return_value = {}
+ assert Vsp.get_all() == []
+ mock_send.assert_called_once_with(
+ "GET", 'get Vsps',
+ 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products')
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_get_all_some_vsps(mock_send, mock_load_status):
+ """Returns a list of vsp."""
+ mock_send.return_value = {'results':[
+ {'name': 'one', 'id': '1234', 'vendorName': 'vspOne'},
+ {'name': 'two', 'id': '1235', 'vendorName': 'vspOne'}]}
+ assert len(Vsp.get_all()) == 2
+ vsp_1 = Vsp.get_all()[0]
+ assert vsp_1.name == "one"
+ assert vsp_1.identifier == "1234"
+ assert vsp_1.created()
+ vsp_2 = Vsp.get_all()[1]
+ assert vsp_2.name == "two"
+ assert vsp_2.identifier == "1235"
+ assert vsp_2.vendor == vsp_1.vendor
+ assert vsp_2.created()
+ mock_send.assert_called_with(
+ "GET", 'get Vsps',
+ 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products')
+
+@mock.patch.object(Vsp, 'created')
+def test_init_no_name(mock_created):
+ """Check init with no names."""
+ mock_created.return_value = False
+ vsp = Vsp()
+ assert isinstance(vsp, SdcElement)
+ assert vsp._identifier == None
+ assert vsp._version == None
+ assert vsp.name == "ONAP-test-VSP"
+ assert vsp.headers["USER_ID"] == "cs0008"
+ assert vsp.vendor == None
+ assert isinstance(vsp._base_url(), str)
+ assert "sdc1/feProxy/onboarding-api/v1.0" in vsp._base_url()
+
+@mock.patch.object(Vsp, 'exists')
+def test_init_with_name(mock_exists):
+ """Check init with no names."""
+ vsp = Vsp(name="YOLO")
+ mock_exists.return_value = False
+ assert vsp._identifier == None
+ assert vsp._version == None
+ assert vsp.name == "YOLO"
+ assert vsp.created() == False
+ assert vsp.headers["USER_ID"] == "cs0008"
+ assert vsp.vendor == None
+ assert isinstance(vsp._base_url(), str)
+ assert "sdc1/feProxy/onboarding-api/v1.0" in vsp._base_url()
+
+def test_equality_really_equals():
+ """Check two vsps are equals if name is the same."""
+ vsp_1 = Vsp(name="equal")
+ vsp_1.identifier = "1234"
+ vsp_2 = Vsp(name="equal")
+ vsp_2.identifier = "1235"
+ assert vsp_1 == vsp_2
+
+def test_equality_not_equals():
+ """Check two vsps are not equals if name is not the same."""
+ vsp_1 = Vsp(name="equal")
+ vsp_1.identifier = "1234"
+ vsp_2 = Vsp(name="not_equal")
+ vsp_2.identifier = "1234"
+ assert vsp_1 != vsp_2
+
+def test_equality_not_equals_not_same_object():
+ """Check a vsp and something different are not equals."""
+ vsp_1 = Vsp(name="equal")
+ vsp_1.identifier = "1234"
+ vsp_2 = Vendor(name="equal")
+ assert vsp_1 != vsp_2
+
+@mock.patch.object(Vsp, 'get_all')
+def test_exists_not_exists(mock_get_all):
+ """Return False if vsp doesn't exist in SDC."""
+ vsp_1 = Vsp(name="one")
+ vsp_1.identifier = "1234"
+ mock_get_all.return_value = [vsp_1]
+ vsp = Vsp(name="two")
+ assert not vsp.exists()
+
+@mock.patch.object(Vsp, 'get_all')
+def test_exists_exists(mock_get_all):
+ """Return True if vsp exists in SDC."""
+ vsp_1 = Vsp(name="one")
+ vsp_1.identifier = "1234"
+ vsp_1.version = "1.1"
+ mock_get_all.return_value = [vsp_1]
+ vsp = Vsp(name="one")
+ assert vsp.exists()
+
+@mock.patch.object(Vsp, 'get_all')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_load_created(mock_send, mock_get_all):
+ mock_send.return_value = {'results':
+ [{'status': 'state_one', 'id': "5678", 'vendorName': 'vspOne', 'name': "1.0"}], "listCount": 1}
+ vsp = Vsp(name="one")
+ vsp.identifier = "1234"
+ vsp.load()
+ mock_get_all.assert_not_called()
+ mock_send.assert_called_once_with('GET', 'get item', 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/items/1234/versions')
+ assert vsp._status == None
+ assert vsp.version == "5678"
+
+@mock.patch.object(Vsp, 'get_all')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_load_not_created(mock_send, mock_get_all):
+ mock_send.return_value = {'results':
+ [{'status': 'state_one', 'id': "5678", 'vendorName': 'vspOne', 'name': "1.0"}], "listCount": 1}
+ vsp = Vsp(name="one")
+ vsp.load()
+ mock_get_all.return_value = []
+ mock_send.assert_not_called()
+ assert vsp._status == None
+ assert vsp.version == None
+ assert vsp.identifier == None
+
+@mock.patch.object(Vsp, 'exists')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_create_no_vendor(mock_send, mock_exists):
+ """Do nothing if no vendor."""
+ vsp = Vsp()
+ mock_exists.return_value = False
+ vsp.create()
+ mock_send.assert_not_called()
+
+@mock.patch.object(Vsp, 'exists')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_create_already_exists(mock_send, mock_exists):
+ """Do nothing if already created in SDC."""
+ vsp = Vsp()
+ vendor = Vendor()
+ vendor._identifier = "1232"
+ vsp.vendor = vendor
+ mock_exists.return_value = True
+ vsp.create()
+ mock_send.assert_not_called()
+
+@mock.patch.object(Vsp, 'exists')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_create_issue_in_creation(mock_send, mock_exists):
+ """Do nothing if not created but issue during creation."""
+ vsp = Vsp()
+ vendor = Vendor()
+ vendor._identifier = "1232"
+ vsp.vendor = vendor
+ expected_data = '{\n "name": "ONAP-test-VSP",\n "description": "vendor software product",\n "icon": "icon",\n "category": "resourceNewCategory.generic",\n "subCategory": "resourceNewCategory.generic.abstract",\n "vendorName": "Generic-Vendor",\n "vendorId": "1232",\n "licensingData": {},\n "onboardingMethod": "NetworkPackage"\n}'
+ mock_exists.return_value = False
+ mock_send.side_effect = RequestError
+ with pytest.raises(RequestError) as exc:
+ vsp.create()
+ mock_send.assert_called_once_with("POST", "create Vsp", 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products', data=expected_data)
+ assert vsp.created() == False
+
+@mock.patch.object(Vsp, 'exists')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_create_OK(mock_send, mock_exists):
+ """Create and update object."""
+ vsp = Vsp()
+ vendor = Vendor()
+ vendor._identifier = "1232"
+ vsp.vendor = vendor
+ expected_data = '{\n "name": "ONAP-test-VSP",\n "description": "vendor software product",\n "icon": "icon",\n "category": "resourceNewCategory.generic",\n "subCategory": "resourceNewCategory.generic.abstract",\n "vendorName": "Generic-Vendor",\n "vendorId": "1232",\n "licensingData": {},\n "onboardingMethod": "NetworkPackage"\n}'
+ mock_exists.return_value = False
+ mock_send.return_value = {
+ 'itemId': "1234",
+ 'version': {'id': "5678", 'status': 'state_created'}}
+ vsp.create()
+ mock_send.assert_called_once_with("POST", "create Vsp", 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products', data=expected_data)
+ assert vsp.created() == True
+ assert vsp._status == const.DRAFT
+ assert vsp.identifier == "1234"
+ assert vsp.version == "5678"
+
+@mock.patch.object(Vsp, 'exists')
+@mock.patch.object(Vsp, 'load')
+def test_version_no_load_no_created(mock_load, mock_exists):
+ mock_exists.return_value = False
+ vsp = Vsp()
+ assert vsp.version == None
+ mock_load.assert_not_called()
+
+@mock.patch.object(Vsp, 'load')
+def test_version_no_load_created(mock_load):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ vsp._version = "64"
+ assert vsp.version == "64"
+ mock_load.assert_not_called()
+
+@mock.patch.object(Vsp, 'load')
+def test_version_with_load(mock_load):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ assert vsp.version == None
+ mock_load.assert_called_once()
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, 'created')
+def test_vendor_not_created_not_vendor(mock_created, mock_details):
+ mock_created.return_value = False
+ vsp = Vsp()
+ assert vsp.vendor == None
+ mock_details.assert_not_called()
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, 'created')
+def test_vendor_not_created_vendor(mock_created, mock_details):
+ mock_created.return_value = False
+ vsp = Vsp()
+ vendor = Vendor()
+ vsp.vendor = vendor
+ assert vsp.vendor == vendor
+ mock_details.assert_not_called()
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, 'created')
+def test_vendor_created_not_details(mock_created, mock_details):
+ mock_created.return_value = True
+ mock_details.return_value = {}
+ vsp = Vsp()
+ assert vsp.vendor == None
+ mock_details.assert_called_once()
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, 'created')
+def test_vendor_created_details(mock_created, mock_details):
+ mock_created.return_value = True
+ mock_details.return_value = {'vendorName': 'test'}
+ vsp = Vsp()
+ assert vsp.vendor.name == 'test'
+ mock_details.assert_called_once()
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, 'created')
+def test_vendor_created_but_already_vendor(mock_created, mock_details):
+ mock_created.return_value = True
+ vsp = Vsp()
+ vendor = Vendor()
+ vsp.vendor = vendor
+ assert vsp.vendor == vendor
+ mock_details.assert_not_called()
+
+@mock.patch.object(Vsp, 'exists')
+def test_status_no_load_no_created(mock_exists):
+ mock_exists.return_value = False
+ vsp = Vsp()
+ assert vsp.status == None
+
+@mock.patch.object(Vsp, '_get_item_details')
+def test_status_status_is_certified_in_SDC(mock_vsp_items):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ mock_vsp_items.return_value={'status': const.CERTIFIED}
+ vsp._status = "Draft"
+ assert vsp.status == const.CERTIFIED
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, '_get_item_version_details')
+@mock.patch.object(Vsp, '_get_item_details')
+def test_status_version_is_not_dirty(mock_vsp_items, mock_vsp_items_version, mock_vsp_details):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ mock_vsp_items.return_value={'status': const.DRAFT}
+ mock_vsp_items_version.return_value={"state": {'dirty': False}}
+ mock_vsp_details.return_value={'validationData': "true"}
+ assert vsp.status == const.COMMITED
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, '_get_item_version_details')
+@mock.patch.object(Vsp, '_get_item_details')
+def test_status_version_is_dirty_has_validation_data(mock_vsp_items, mock_vsp_items_version,
+ mock_vsp_details):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ mock_vsp_items.return_value={'status': const.DRAFT}
+ mock_vsp_items_version.return_value={"state": {'dirty': True}}
+ mock_vsp_details.return_value={'validationData': {'some': 'thing'}}
+ assert vsp.status == const.VALIDATED
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, '_get_item_version_details')
+@mock.patch.object(Vsp, '_get_item_details')
+def test_status_version_is_dirty_no_validation_data_no_state(mock_vsp_items, mock_vsp_items_version,
+ mock_vsp_details):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ mock_vsp_items.return_value={'status': const.DRAFT}
+ mock_vsp_items_version.return_value={"status": {'dirty': False}}
+ mock_vsp_details.return_value={'no_validationData': {'some': 'thing'}}
+ assert vsp.status == const.DRAFT
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, '_get_item_version_details')
+@mock.patch.object(Vsp, '_get_item_details')
+def test_status_version_is_dirty_no_validation_data_but_state(mock_vsp_items, mock_vsp_items_version,
+ mock_vsp_details):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ mock_vsp_items.return_value={'status': const.DRAFT}
+ mock_vsp_items_version.return_value={"state": {'dirty': True}}
+ mock_vsp_details.return_value={'no_validationData': {'some': 'thing'}}
+ assert vsp.status == const.DRAFT
+
+@mock.patch.object(Vsp, '_get_vsp_details')
+@mock.patch.object(Vsp, '_get_item_version_details')
+@mock.patch.object(Vsp, '_get_item_details')
+def test_status_version_is_dirty_no_validation_data_but_networkPackageName(mock_vsp_items, mock_vsp_items_version,
+ mock_vsp_details):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ mock_vsp_items.return_value={'status': const.DRAFT}
+ mock_vsp_items_version.return_value={"state": {'dirty': True}}
+ mock_vsp_details.return_value={'no_validationData': {'some': 'thing'}, 'networkPackageName': 'ubuntu16'}
+ assert vsp.status == const.UPLOADED
+
+
+@mock.patch.object(Vsp, 'exists')
+@mock.patch.object(Vsp, 'send_message_json')
+def test__get_vsp_details_not_created(mock_send, mock_exists):
+ mock_exists.return_value = False
+ vsp = Vsp()
+ assert vsp._get_vsp_details() == {}
+ mock_send.assert_not_called()
+
+@mock.patch.object(Vsp, 'load')
+@mock.patch.object(Vsp, 'send_message_json')
+def test__get_vsp_details_no_version(mock_send, mock_load):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ mock_send.assert_not_called()
+ assert vsp._get_vsp_details() == {}
+
+@mock.patch.object(Vsp, 'send_message_json')
+def test__get_vsp_details(mock_send):
+ vsp = Vsp()
+ vsp.identifier = "1234"
+ vsp._version = "4567"
+ mock_send.return_value = {'return': 'value'}
+ assert vsp._get_vsp_details() == {'return': 'value'}
+ mock_send.assert_called_once_with('GET', 'get vsp version', "{}/vendor-software-products/1234/versions/4567".format(vsp._base_url()))
+
+@pytest.mark.parametrize("status", [const.DRAFT, const.CERTIFIED, const.UPLOADED, const.VALIDATED])
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_submit_not_Commited(mock_send, mock_status, status):
+ """Do nothing if not created."""
+ vsp = Vsp()
+ vsp._status = status
+ vsp.submit()
+ mock_send.assert_not_called()
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_submit_OK(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.COMMITED
+ expected_data = '{\n\n "action": "Submit"\n}'
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.submit()
+ mock_send.assert_called_once_with("PUT", "Submit Vsp", 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/actions', data=expected_data)
+
+@pytest.mark.parametrize("status", [const.DRAFT, const.COMMITED, const.UPLOADED, const.VALIDATED])
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_create_csar_not_Certified(mock_send, mock_status, status):
+ """Do nothing if not created."""
+ vsp = Vsp()
+ vsp._status = status
+ vsp.create_csar()
+ mock_send.assert_not_called()
+ assert vsp.csar_uuid == None
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_create_csar_not_OK(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.CERTIFIED
+ mock_send.return_value = {}
+ expected_data = '{\n\n "action": "Create_Package"\n}'
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.create_csar()
+ mock_send.assert_called_once_with("PUT", "Create_Package Vsp", 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/actions', data=expected_data)
+ assert vsp.csar_uuid == None
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_create_csar_OK(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.CERTIFIED
+ result = requests.Response()
+ result.status_code = 201
+ result._content = json.dumps({'packageId': "64"}).encode('UTF-8')
+ mock_send.return_value = result
+ expected_data = '{\n\n "action": "Create_Package"\n}'
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.create_csar()
+ mock_send.assert_called_once_with("PUT", "Create_Package Vsp", 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/actions', data=expected_data)
+ assert vsp.csar_uuid == "64"
+
+@pytest.mark.parametrize("status", [const.DRAFT, const.CERTIFIED, const.UPLOADED, const.COMMITED])
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_commit_not_Validated(mock_send, mock_status, status):
+ """Do nothing if not created."""
+ vsp = Vsp()
+ vsp._status = status
+ vsp.commit()
+ mock_send.assert_not_called()
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_commit_OK(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.VALIDATED
+ expected_data = '{\n\n "commitRequest":{"message":"ok"},\n\n "action": "Commit"\n}'
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.commit()
+ mock_send.assert_called_once_with("PUT", "Commit Vsp", 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/items/12345/versions/1234/actions', data=expected_data)
+
+@pytest.mark.parametrize("status", [const.CERTIFIED, const.COMMITED, const.UPLOADED, const.VALIDATED])
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_upload_not_Draft(mock_send, mock_status, status):
+ """Do nothing if not created."""
+ vsp = Vsp()
+ vsp._status = status
+ vsp.upload_package('data')
+ mock_send.assert_not_called()
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_upload_not_OK(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.DRAFT
+ mock_send.return_value = None
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.upload_package('data')
+ mock_send.assert_called_once_with('POST', 'upload ZIP for Vsp', "https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/orchestration-template-candidate", files={'upload': 'data'}, headers={'Accept': 'application/json', 'USER_ID': 'cs0008', 'Authorization': 'Basic YWFpOktwOGJKNFNYc3pNMFdYbGhhazNlSGxjc2UyZ0F3ODR2YW9HR21KdlV5MlU=', 'X-ECOMP-InstanceID': 'onapsdk', 'Accept-Encoding': 'gzip, deflate'})
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_upload_error_in_response(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.DRAFT
+ mock_send.return_value = mock.MagicMock(text='{"status": "Failure"}')
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ with pytest.raises(APIError):
+ vsp.upload_package('data')
+ mock_send.assert_called_once_with('POST', 'upload ZIP for Vsp', "https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/orchestration-template-candidate", files={'upload': 'data'}, headers={'Accept': 'application/json', 'USER_ID': 'cs0008', 'Authorization': 'Basic YWFpOktwOGJKNFNYc3pNMFdYbGhhazNlSGxjc2UyZ0F3ODR2YW9HR21KdlV5MlU=', 'X-ECOMP-InstanceID': 'onapsdk', 'Accept-Encoding': 'gzip, deflate'})
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message')
+def test_upload_OK(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.DRAFT
+ mock_send.return_value = mock.MagicMock(text='{"status": "Success"}')
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.upload_package('data')
+ mock_send.assert_called_once_with('POST', 'upload ZIP for Vsp', "https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/orchestration-template-candidate", files={'upload': 'data'}, headers={'Accept': 'application/json', 'USER_ID': 'cs0008', 'Authorization': 'Basic YWFpOktwOGJKNFNYc3pNMFdYbGhhazNlSGxjc2UyZ0F3ODR2YW9HR21KdlV5MlU=', 'X-ECOMP-InstanceID': 'onapsdk', 'Accept-Encoding': 'gzip, deflate'})
+
+@pytest.mark.parametrize("status", [const.CERTIFIED, const.COMMITED, const.DRAFT, const.VALIDATED])
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_validate_not_Draft(mock_send, mock_status, status):
+ """Do nothing if not created."""
+ vsp = Vsp()
+ vsp._status = status
+ vsp.validate()
+ mock_send.assert_not_called()
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_validate_not_OK(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.UPLOADED
+ mock_send.return_value = {}
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.validate()
+ mock_send.assert_called_once_with('PUT', 'Validate artifacts for Vsp', 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/orchestration-template-candidate/process')
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_validate_not_success(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.UPLOADED
+ mock_send.return_value = {'status': 'not_success'}
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.validate()
+ mock_send.assert_called_once_with('PUT', 'Validate artifacts for Vsp', 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/orchestration-template-candidate/process')
+
+@mock.patch.object(Vsp, 'load_status')
+@mock.patch.object(Vsp, 'send_message_json')
+def test_validate_OK(mock_send, mock_status):
+ """Don't update status if submission NOK."""
+ vsp = Vsp()
+ vsp._status = const.UPLOADED
+ mock_send.return_value = {'status': 'Success'}
+ vsp._version = "1234"
+ vsp._identifier = "12345"
+ vsp.validate()
+ mock_send.assert_called_once_with('PUT', 'Validate artifacts for Vsp', 'https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/vendor-software-products/12345/versions/1234/orchestration-template-candidate/process')
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+@mock.patch.object(Vsp, 'created')
+def test_onboard_new_vsp_no_vendor(mock_created, mock_create, mock_upload_package,
+ mock_validate, mock_commit, mock_submit,
+ mock_create_csar):
+ mock_created.return_value = False
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [None, const.APPROVED, const.APPROVED,
+ const.APPROVED, const.APPROVED,
+ const.APPROVED, None]
+ vsp = Vsp()
+ with pytest.raises(ParameterError):
+ vsp.onboard()
+ mock_create.assert_not_called()
+ mock_upload_package.assert_not_called()
+ mock_validate.assert_not_called()
+ mock_commit.assert_not_called()
+ mock_submit.assert_not_called()
+ mock_create_csar.assert_not_called()
+
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+@mock.patch.object(Vsp, 'created')
+def test_onboard_new_vsp(mock_created, mock_create, mock_upload_package,
+ mock_validate, mock_commit, mock_submit,
+ mock_create_csar):
+ mock_created.return_value = False
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [None, const.APPROVED, const.APPROVED,
+ const.APPROVED, const.APPROVED,
+ const.APPROVED, None]
+ vendor = Vendor()
+ vsp = Vsp(vendor=vendor)
+ vsp.onboard()
+ mock_create.assert_called_once()
+ mock_upload_package.assert_not_called()
+ mock_validate.assert_not_called()
+ mock_commit.assert_not_called()
+ mock_submit.assert_not_called()
+ mock_create_csar.assert_not_called()
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+def test_onboard_vsp_upload_no_files(mock_create, mock_upload_package,
+ mock_validate, mock_commit, mock_submit,
+ mock_create_csar):
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [const.DRAFT, const.DRAFT, const.APPROVED,
+ const.APPROVED, const.APPROVED, const.APPROVED,
+ const.APPROVED, None]
+ vsp = Vsp()
+ with pytest.raises(ParameterError):
+ vsp.onboard()
+ mock_create.assert_not_called()
+ mock_upload_package.assert_not_called()
+ mock_validate.assert_not_called()
+ mock_commit.assert_not_called()
+ mock_submit.assert_not_called()
+ mock_create_csar.assert_not_called()
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+def test_onboard_vsp_upload_package(mock_create, mock_upload_package,
+ mock_validate, mock_commit, mock_submit,
+ mock_create_csar):
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [const.DRAFT, const.APPROVED, None]
+ vsp = Vsp(package="yes")
+ vsp.onboard()
+ mock_create.assert_not_called()
+ mock_upload_package.assert_called_once_with("yes")
+ mock_validate.assert_not_called()
+ mock_commit.assert_not_called()
+ mock_submit.assert_not_called()
+ mock_create_csar.assert_not_called()
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+def test_onboard_new_vsp_validate(mock_create, mock_upload_package,
+ mock_validate, mock_commit, mock_submit,
+ mock_create_csar):
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [const.UPLOADED, const.APPROVED, None]
+ vsp = Vsp()
+ vsp.onboard()
+ mock_create.assert_not_called()
+ mock_upload_package.assert_not_called()
+ mock_validate.assert_called_once()
+ mock_commit.assert_not_called()
+ mock_submit.assert_not_called()
+ mock_create_csar.assert_not_called()
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+def test_onboard_new_vsp_commit(mock_create, mock_upload_package,
+ mock_validate, mock_commit, mock_submit,
+ mock_create_csar):
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [const.VALIDATED, const.APPROVED, None]
+ vsp = Vsp()
+ vsp.onboard()
+ mock_create.assert_not_called()
+ mock_upload_package.assert_not_called()
+ mock_validate.assert_not_called()
+ mock_commit.assert_called_once()
+ mock_submit.assert_not_called()
+ mock_create_csar.assert_not_called()
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+def test_onboard_new_vsp_submit(mock_create, mock_upload_package,
+ mock_validate, mock_commit, mock_submit,
+ mock_create_csar):
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [const.COMMITED, const.APPROVED, None]
+ vsp = Vsp()
+ vsp.onboard()
+ mock_create.assert_not_called()
+ mock_upload_package.assert_not_called()
+ mock_validate.assert_not_called()
+ mock_commit.assert_not_called()
+ mock_submit.assert_called_once()
+ mock_create_csar.assert_not_called()
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+def test_onboard_new_vsp_create_csar(mock_create,
+ mock_upload_package, mock_validate,
+ mock_commit, mock_submit,
+ mock_create_csar):
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [const.CERTIFIED, const.APPROVED, None]
+ vsp = Vsp()
+ vsp.onboard()
+ mock_create.assert_not_called()
+ mock_upload_package.assert_not_called()
+ mock_validate.assert_not_called()
+ mock_commit.assert_not_called()
+ mock_submit.assert_not_called()
+ mock_create_csar.assert_called_once()
+
+@mock.patch.object(Vsp, 'create_csar')
+@mock.patch.object(Vsp, 'submit')
+@mock.patch.object(Vsp, 'commit')
+@mock.patch.object(Vsp, 'validate')
+@mock.patch.object(Vsp, 'upload_package')
+@mock.patch.object(Vsp, 'create')
+@mock.patch.object(Vsp, 'created')
+@mock.patch.object(Vsp, 'load')
+def test_onboard_whole_vsp(mock_load, mock_created, mock_create,
+ mock_upload_package, mock_validate,
+ mock_commit, mock_submit,
+ mock_create_csar):
+ getter_mock = mock.Mock(wraps=Vsp.status.fget)
+ mock_status = Vsp.status.getter(getter_mock)
+ with mock.patch.object(Vsp, 'status', mock_status):
+ getter_mock.side_effect = [None, const.DRAFT, const.UPLOADED, const.VALIDATED,
+ const.COMMITED, const.CERTIFIED, None]
+ vendor = Vendor()
+ vsp = Vsp(vendor=vendor, package="yes")
+ vsp.onboard()
+ mock_create.assert_called_once()
+ mock_upload_package.assert_called_once()
+ mock_validate.assert_called_once()
+ mock_commit.assert_called_once()
+ mock_submit.assert_called_once()
+ mock_create_csar.assert_called_once()
+
+
+@mock.patch.object(Vsp, "status", new_callable=mock.PropertyMock)
+@mock.patch.object(Vsp, '_upload_action')
+def test_update_package(mock_upload, mock_status):
+ mock_status.return_value = const.DRAFT
+ vsp = Vsp(vendor=mock.MagicMock())
+ vsp.update_package("new")
+ mock_upload.assert_not_called()
+ mock_status.return_value = const.COMMITED
+ vsp.update_package("new")
+ mock_upload.assert_called_once()
+
+
+@mock.patch.object(Vsp, "send_message_json")
+@mock.patch.object(Vsp, 'load')
+def test_create_new_version(mock_load, mock_send):
+ vsp = Vsp(vendor=mock.MagicMock())
+ vsp._identifier = "1232"
+ vsp._version = "4321"
+ vsp.create_new_version()
+ mock_load.assert_called_once()
+ mock_send.assert_called_once_with("POST",
+ "Create new VSP version",
+ "https://sdc.api.fe.simpledemo.onap.org:30207/sdc1/feProxy/onboarding-api/v1.0/items/1232/versions/4321",
+ data='{"creationMethod": "major", "description": "New VSP version"}')