diff options
Diffstat (limited to 'ice_validator/app_tests/test_config.py')
-rw-r--r-- | ice_validator/app_tests/test_config.py | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/ice_validator/app_tests/test_config.py b/ice_validator/app_tests/test_config.py new file mode 100644 index 0000000..a41cfbf --- /dev/null +++ b/ice_validator/app_tests/test_config.py @@ -0,0 +1,269 @@ +# -*- coding: utf8 -*- +# ============LICENSE_START==================================================== +# org.onap.vvp/validation-scripts +# =================================================================== +# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# =================================================================== +# +# Unless otherwise specified, all software contained herein is licensed +# under the Apache License, Version 2.0 (the "License"); +# you may not use this software 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. +# +# +# +# Unless otherwise specified, all documentation contained herein is 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, documentation +# 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============================================ + +import uuid +from io import StringIO + +import pytest +import yaml + +from config import Config, get_generator_plugin_names, to_uri +import vvp + + +DEFAULT_CONFIG = """ +namespace: {namespace} +owner: onap-test +ui: + app-name: VNF Validation Tool + requirement-link-url: http://requirement.url.com +categories: + - name: Environment File Compliance. (Required to Onboard) + category: environment_file + description: + Checks certain parameters are excluded from the .env file, per HOT Requirements. + Required for ASDC onboarding, not needed for manual Openstack testing. +settings: + polling-freqency: 1000 + env-specs: + - tests.test_environment_file_parameters.ENV_PARAMETER_SPEC +terms: + version: 1.0.0 + path: path/to/terms.txt + popup-title: Terms and Conditions + popup-link-text: View Terms and Conditions + popup-msg-text: Review and Accept the Terms +""" + + +# noinspection PyShadowingNames +@pytest.fixture() +def config(): + unique = str(uuid.uuid4()) + data = DEFAULT_CONFIG.format(namespace=unique) + return Config(yaml.safe_load(StringIO(data))) + + +def test_app_name(config): + assert "VNF Validation Tool" in config.app_name + assert vvp.VERSION in config.app_name + + +def test_categories_names_length(config): + names = config.category_names + assert len(names) == 1 + assert names[0] == "Environment File Compliance. (Required to Onboard)" + + +def test_polling_frequency(config): + assert config.polling_frequency == 1000 + + +def test_get_category_when_other(config): + assert ( + config.get_category("Environment File Compliance. (Required to Onboard)") + == "environment_file" + ) + + +def test_queues(config): + assert config.log_queue.empty(), "Log should start empty" + config.log_file.write("Test") + assert config.log_queue.get() == "Test" + + assert config.status_queue.empty(), "status should start empty" + config.status_queue.put((True, None)) + assert config.status_queue.get() == (True, None) + + +MISSING_CATEGORY_FIELD = """ +namespace: org.onap.test +owner: onap-test +ui: + app-name: VNF Validation Tool +categories: + - description: | + Runs all default validations that apply to all VNF packages + regardless of deployment environment +settings: + polling-freqency: 1000 +""" + + +def test_missing_category_fields(): + settings = yaml.safe_load(StringIO(MISSING_CATEGORY_FIELD)) + with pytest.raises(RuntimeError) as e: + Config(settings) + assert "Missing: name" in str(e) + + +def test_default_output_format(config): + assert config.default_report_format == "HTML" + + +def test_output_formats(config): + for format in ["CSV", "HTML", "Excel"]: + assert format in config.report_formats + + +def test_category_names(config): + assert "Environment File Compliance. (Required to Onboard)" in config.category_names + + +def test_default_input_format(config): + assert "Directory (Uncompressed)" == config.default_input_format + + +def test_input_formats(config): + assert "Directory (Uncompressed)" in config.input_formats + assert "ZIP File" in config.input_formats + + +def test_env_specs(config): + specs = config.env_specs + assert len(specs) == 1 + assert "ALL" in specs[0] + + +def test_get_generator_plugin_names(config): + names = get_generator_plugin_names() + assert "VNF-API" in names + assert "GR-API" in names + + +def test_preload_formats(config): + formats = config.preload_formats + assert all(format in formats for format in ("VNF-API", "GR-API")) + + +def test_requirement_link_http(config): + assert config.requirement_link_url == "http://requirement.url.com" + + +def test_to_uri_relative_path(): + assert to_uri("path/").startswith("file://") + assert to_uri("path/").endswith("/path") + + +def test_to_uri_relative_http(): + assert to_uri("http://url.com") == "http://url.com" + + +def test_to_uri_absolute_path(): + assert to_uri("/path/one").startswith("file:///") + assert to_uri("/path/one").endswith("/path/one") + + +def test_requirement_link_path(config): + config._config["ui"]["requirement-link-url"] = "path/to/reqs.txt" + url = config.requirement_link_url + assert url.startswith("file://") + assert "path/to/reqs.txt" in url + + +def test_terms_version(config): + assert config.terms_version == "1.0.0" + + +def test_terms_popup_title(config): + assert config.terms_popup_title == "Terms and Conditions" + + +def test_terms_popup_message(config): + assert config.terms_popup_message == "Review and Accept the Terms" + + +def test_terms_link_url_default(config): + config._config["terms"]["path"] = None + assert config.terms_link_url is None + + +def test_terms_acceptance(config): + assert not config.are_terms_accepted + config.set_terms_accepted() + assert config.are_terms_accepted + + +def test_terms_link_url_path(config): + assert config.terms_link_url.startswith("file://") + assert config.terms_link_url.endswith("/path/to/terms.txt") + + +def test_terms_link_text(config): + assert config.terms_link_text == "View Terms and Conditions" + + +def test_default_halt_on_failure(config): + assert config.default_halt_on_failure + + +def test_get_subdir_for_preload(config): + assert config.get_subdir_for_preload("VNF-API") == "vnfapi" + + +def test_default_preload_format(config): + assert config.default_preload_format in ("VNF-API", "GR-API", "Excel") + + +def test_category_description(config): + assert "Checks certain parameters" in config.get_description( + "Environment File Compliance. (Required to Onboard)" + ) + + +def test_get_category_by_name(config): + assert ( + config.get_category("Environment File Compliance. (Required to Onboard)") + == "environment_file" + ) + + +def test_cached_category_setting(config): + assert ( + config.get_category_value("Environment File Compliance. (Required to Onboard)") + == 0 + ) + + +def test_disclaimer_text(config): + assert config.disclaimer_text == "" + + +def test_requirement_link_text(config): + url_text = "Requirement URL" + config._config["ui"]["requirement-link-text"] = url_text + assert config.requirement_link_text == url_text |