[VVP] Generated completed preload from env files
[vvp/validation-scripts.git] / ice_validator / app_tests / test_config.py
diff --git a/ice_validator/app_tests/test_config.py b/ice_validator/app_tests/test_config.py
new file mode 100644 (file)
index 0000000..a41cfbf
--- /dev/null
@@ -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