diff options
author | Hansen, Tony (th1395) <th1395@att.com> | 2020-05-13 18:55:54 +0000 |
---|---|---|
committer | Hansen, Tony (th1395) <th1395@att.com> | 2020-06-02 20:36:06 +0000 |
commit | 7e1efe3174336fa09a56c596af55ba93d7b14a91 (patch) | |
tree | bad0fc0c5bb0a54f69e7d046008c423c507f87d6 /helm/plugin/tests | |
parent | 05e95de3b9736160b4229232903e86706fb782e1 (diff) |
move plugins from from ccsdk to dcaegen2
copy dmaap, helm, pgaas and sshkeyshare plugins from ccsdk to dcaegen2
Change-Id: Ib257495de6c275c45f0c87a4b42ac21a2fab7979
Signed-off-by: Hansen, Tony (th1395) <th1395@att.com>
Issue-ID: DCAEGEN2-2207
Signed-off-by: Hansen, Tony (th1395) <th1395@att.com>
Diffstat (limited to 'helm/plugin/tests')
-rw-r--r-- | helm/plugin/tests/__init__.py | 30 | ||||
-rw-r--r-- | helm/plugin/tests/blueprint/blueprint.yaml | 85 | ||||
-rw-r--r-- | helm/plugin/tests/blueprint/plugin/test_plugin.yaml | 139 | ||||
-rw-r--r-- | helm/plugin/tests/test_plugin.py | 192 |
4 files changed, 446 insertions, 0 deletions
diff --git a/helm/plugin/tests/__init__.py b/helm/plugin/tests/__init__.py new file mode 100644 index 0000000..230e4c9 --- /dev/null +++ b/helm/plugin/tests/__init__.py @@ -0,0 +1,30 @@ +# ================================================================================ +# Copyright (c) 2014 GigaSpaces Technologies Ltd. All rights reserved +# Copyright (c) 2017-2020 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# 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. +# ============LICENSE_END========================================================= +# +# +# +# Copyright (c) 2017-2020 AT&T Intellectual Property. All rights reserved. +# =================================================================== +# Licensed under the Creative Commons License, Attribution 4.0 Intl. (the "License"); +# you may not use this documentation except in compliance with the License. +# You may obtain a copy of the License at +# https://creativecommons.org/licenses/by/4.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. diff --git a/helm/plugin/tests/blueprint/blueprint.yaml b/helm/plugin/tests/blueprint/blueprint.yaml new file mode 100644 index 0000000..2a7198d --- /dev/null +++ b/helm/plugin/tests/blueprint/blueprint.yaml @@ -0,0 +1,85 @@ +# DSL version, should appear in the main blueprint.yaml +# and may appear in other imports. In such case, the versions must match +tosca_definitions_version: cloudify_dsl_1_3 + +imports: + # importing cloudify related types, plugins, workflow, etc... + # to speed things up, it is possible downloading this file, + # including it in the blueprint directory and importing it + # instead. + - http://www.getcloudify.org/spec/cloudify/4.1.1/types.yaml + # relative import of plugin.yaml that resides in the blueprint directory + - plugin/test_plugin.yaml + +inputs: + # example input that could be injected by test + test_input: + description: an input for the test + default: default_test_input + tiller-server-ip: + default: 1.1.1.1 + tiller-server-port: + default: 8888 + namespace: + default: onap + chart-repo-url: + default: local + chart-version : + default: 2.0.0 + jsonConfig: + default: '' + config-url: + default: '' + config-set: + default: '' + config-format: + default: 'json' + tls-enable: + type: boolean + default: false + config-dir: + type: string + default: './' + repo-user: + type: string + default: '' + repo-user-password: + type: string + default: '' + stable-repo-url: + type: string + default: 'http://0.0.0.0/stable' + + +node_templates: + # defining a single node template that will serve as our test node + test_node: + # using base cloudify type + type: onap.nodes.component + properties: + tiller_ip: { get_input: tiller-server-ip } + tiller_port: { get_input: tiller-server-port } + component_name: test_node + chart_repo_url: { get_input: chart-repo-url } + chart_version: { get_input: chart-version } + namespace: { get_input: namespace } + config: { get_input: jsonConfig} + config_set: { get_input: config-set} + config_url: { get_input: config-url} + repo_user: { get_input: repo-user} + repo_user_password: { get_input: repo-user-password} + config_format: { get_input: config-format} + tls_enable: { get_input: tls-enable} + ca: "result of get_secret ca_value" + cert: "result of get_secret cert_value" + key: "result of get_secret key_value" + config_dir: { get_input: config-dir} + stable_repo_url: { get_input: stable-repo-url} + +outputs: + # example output the could be used to simplify assertions by test + test_output: + description: an output for the test + value: + helm-value: { get_attribute: [test_node, current-helm-value] } + helm-history: { get_attribute: [test_node, helm-history] } diff --git a/helm/plugin/tests/blueprint/plugin/test_plugin.yaml b/helm/plugin/tests/blueprint/plugin/test_plugin.yaml new file mode 100644 index 0000000..e9f874f --- /dev/null +++ b/helm/plugin/tests/blueprint/plugin/test_plugin.yaml @@ -0,0 +1,139 @@ +# ============LICENSE_START========================================== +# =================================================================== +# Copyright (c) 2017-2020 AT&T +# +# 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. +#============LICENSE_END============================================ + +plugins: + helm-plugin: + executor: central_deployment_agent + package_name: helm + install: false + +node_types: + + onap.nodes.component: + derived_from: cloudify.nodes.Root + properties: + tiller_ip: + description: IP of tiller server + type: string + tiller_port: + default: local + description: Port of tiller server + type: string + chart_repo_url: + default: local + description: helm chart repo url + type: string + component_name: + description: onap component string + type: string + chart_version: + description: helm chart version + type: string + config_dir: + description: config file dir + default: '/opt/manager/resources/' + type: string + namespace: + description: k8s namespace + default: onap + config: + description: String format config file + type: string + default: '' + config_set: + description: String format config file + type: string + default: '' + config_url: + description: String format config file url + type: string + default: '' + config_format: + description: String format config file format + type: string + default: 'json' + runtime_config: + default: '' + description: String format json object. To save the runtime config generate from other nodes. + tls_enable: + description: enable helm TSL + type: boolean + default: false + ca: + description: value of ca.pem + type: string + default: '' + cert: + description: value of cert.pem + type: string + default: '' + key: + description: value of key.pem + type: string + default: '' + stable_repo_url: + description: URL for stable repository + type: string + default: 'https://kubernetes-charts.storage.googleapis.com' + repo_user: + type: string + default: '' + repo_user_password: + type: string + default: '' + + + interfaces: + cloudify.interfaces.lifecycle: + configure: helm-plugin.plugin.tasks.config + start: helm-plugin.plugin.tasks.start + stop: helm-plugin.plugin.tasks.stop + upgrade: helm-plugin.plugin.tasks.upgrade + rollback: helm-plugin.plugin.tasks.rollback + + +workflows: + upgrade: + mapping: helm-plugin.plugin.workflows.upgrade + parameters: + node_instance_id: + description: The id of the node-instance that you want to modify. + config_set: + description: The set option string + default: '' + config: + description: The changes to the new config json + default: '' + config_url: + description: The config input url + default: '' + config_format: + description: The config url input format + default: 'json' + chart_version: + description: chart version + chart_repo_url: + description: chart repo url + rollback: + mapping: helm-plugin.plugin.workflows.rollback + parameters: + node_instance_id: + description: The id of the node-instance that you want to modify. + default: 'node_instance_id' + revision: + description: Check the node runtime property history, find the revision number you want to rollback to + default: 1 diff --git a/helm/plugin/tests/test_plugin.py b/helm/plugin/tests/test_plugin.py new file mode 100644 index 0000000..e18475a --- /dev/null +++ b/helm/plugin/tests/test_plugin.py @@ -0,0 +1,192 @@ +# ============LICENSE_START========================================== +# =================================================================== +# Copyright (c) 2018-2020 AT&T +# +# 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. +# ============LICENSE_END============================================ + + +from os import path +import unittest +import mock +import plugin.tasks + +from cloudify.test_utils import workflow_test +from cloudify.mocks import MockNodeInstanceContext +from cloudify.mocks import MockCloudifyContext +from cloudify.state import current_ctx +from cloudify import ctx + + +class TestPlugin(unittest.TestCase): + + @workflow_test(path.join('blueprint', 'blueprint.yaml'), + resources_to_copy=[(path.join('blueprint', 'plugin', + 'test_plugin.yaml'), + 'plugin')]) + @mock.patch('plugin.tasks.os.remove') + @mock.patch('plugin.tasks.execute_command') + def test_stop(self, cfy_local, mock_execute_command, mock_os_remove): + # execute install workflow + """ + + :param cfy_local: + """ + with mock.patch('plugin.tasks.shutil.rmtree'): + cfy_local.execute('uninstall', task_retries=0) + + # extract single node instance + instance = cfy_local.storage.get_node_instances()[0] + + mock_execute_command.assert_called_with('helm delete --purge onap-test_node --host 1.1.1.1:8888 ') + + @workflow_test(path.join('blueprint', 'blueprint.yaml'), + resources_to_copy=[(path.join('blueprint', 'plugin', + 'test_plugin.yaml'), + 'plugin')]) + @mock.patch('plugin.tasks.execute_command') + def test_start(self, cfy_local, mock_execute_command): + # execute install workflow + """ + + :param cfy_local: + """ + with mock.patch('plugin.tasks.config'): + with mock.patch('plugin.tasks.get_current_helm_value'): + with mock.patch('plugin.tasks.get_helm_history'): + cfy_local.execute('install', task_retries=0) + + # extract single node instance + instance = cfy_local.storage.get_node_instances()[0] + + mock_execute_command.assert_called_with('helm install local/test_node-2.0.0.tgz --name onap-test_node --namespace onap --host 1.1.1.1:8888 ') + + @workflow_test(path.join('blueprint', 'blueprint.yaml'), + resources_to_copy=[(path.join('blueprint', 'plugin', + 'test_plugin.yaml'), + 'plugin')]) + @mock.patch('plugin.tasks.execute_command') + def test_config(self, cfy_local, mock_execute_command): + # execute install workflow + """ + + :param cfy_local: + """ + with mock.patch('plugin.tasks.start'): + cfy_local.execute('install', task_retries=0) + + # extract single node instance + instance = cfy_local.storage.get_node_instances()[0] + + mock_execute_command.assert_called_with('helm init --client-only --stable-repo-url http://0.0.0.0/stable') + + @workflow_test(path.join('blueprint', 'blueprint.yaml'), + resources_to_copy=[(path.join('blueprint', 'plugin', + 'test_plugin.yaml'), + 'plugin')]) + def test_rollback(self, cfy_local): + # execute install workflow + """ + + :param cfy_local: + """ + node_instance_id = 'node_instance_id' + revision = 1 + try: + cfy_local.execute('rollback', task_retries=0, + parameters={'node_instance_id': node_instance_id, 'revision': revision}) + self.fail('Expected exception due to operation not exist') + except Exception as e: + self.assertTrue('operation not available') + + @workflow_test(path.join('blueprint', 'blueprint.yaml'), + resources_to_copy=[(path.join('blueprint', 'plugin', + 'test_plugin.yaml'), + 'plugin')]) + def test_upgrade(self, cfy_local): + # execute install workflow + """ + + :param cfy_local: + """ + node_instance_id = 'node_instance_id' + config_json = '' + config_url = 'http://test:test@11.22.33.44:80/stable' + config_format = 'json' + chartVersion = '2.0.0' + chartRepo = 'repo' + repo_user = '' + repo_user_passwd = '' + try: + cfy_local.execute('upgrade', task_retries=0, + parameters={'node_instance_id': node_instance_id, 'config': config_json, + 'config_url': config_url, 'config_format': config_format, + 'chart_version': chartVersion, 'chart_repo_url': chartRepo, + 'repo_user': repo_user, 'repo_user_password': repo_user_passwd}) + self.fail('Expected exception due to operation not exist') + except Exception as e: + self.assertTrue('operation not available') + + @mock.patch('plugin.tasks.execute_command') + def test_op_rollback(self, mock_execute_command): + # test operation rollback + """ + + :rollback operation test: + """ + props = { + 'component_name': 'test_node', + 'namespace': 'onap', + 'tiller_port': '8888', + 'tiller_ip': '1.1.1.1', + 'tls_enable': 'false' + } + args = {'revision': '1'} + mock_ctx = MockCloudifyContext(node_id='test_node_id', node_name='test_node_name', + properties=props) + try: + current_ctx.set(mock_ctx) + with mock.patch('plugin.tasks.get_current_helm_value'): + with mock.patch('plugin.tasks.get_helm_history'): + plugin.tasks.rollback(**args) + finally: + current_ctx.clear() + + @mock.patch('plugin.tasks.execute_command') + def test_op_upgrade(self, mock_execute_command): + # test operation upgrade + """ + + :upgrade operation test: + """ + props = { + 'component_name': 'test_node', + 'namespace': 'onap', + 'tiller_port': '8888', + 'tiller_ip': '1.1.1.1', + 'tls_enable': 'false', + 'config_dir': '/tmp' + } + args = {'revision': '1', 'config': '', 'chart_repo': 'repo', 'chart_version': '2', + 'config_set': 'config_set', 'config_json': '', 'config_url': '', + 'config_format': 'format', 'repo_user': '', 'repo_user_passwd': ''} + mock_ctx = MockCloudifyContext(node_id='test_node_id', node_name='test_node_name', + properties=props) + try: + current_ctx.set(mock_ctx) + with mock.patch('plugin.tasks.get_current_helm_value'): + with mock.patch('plugin.tasks.get_helm_history'): + with mock.patch('plugin.tasks.gen_config_str'): + plugin.tasks.upgrade(**args) + finally: + current_ctx.clear() |