summaryrefslogtreecommitdiffstats
path: root/mod/onboardingapi/dcae_cli/commands/tests
diff options
context:
space:
mode:
Diffstat (limited to 'mod/onboardingapi/dcae_cli/commands/tests')
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/format.json10
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/spec_end.json77
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/spec_start.json78
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/collector/kpi-collector.comp.json47
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/collector/vnf-kpi.format.json13
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/anomaly-model.comp.json52
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/badjson0
-rwxr-xr-xmod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/generatedir/ex1.json3
-rwxr-xr-xmod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/generatedir/ex2.json4
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/int-class.format.json18
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/empty.format.json10
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/line-viz.comp.json51
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/web-url.format.json19
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/test_component_cmd.py149
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/test_data_format_cmd.py122
-rw-r--r--mod/onboardingapi/dcae_cli/commands/tests/test_profiles_cmd.py84
16 files changed, 737 insertions, 0 deletions
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/format.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/format.json
new file mode 100644
index 0000000..8456a30
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/format.json
@@ -0,0 +1,10 @@
+{
+ "self": {
+ "name": "std.empty",
+ "version": "1.0.6",
+ "description": "Represents an empty message with no content"
+ },
+ "dataformatversion": "1.0.0",
+ "jsonschema": {
+ }
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/spec_end.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/spec_end.json
new file mode 100644
index 0000000..9642a6e
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/spec_end.json
@@ -0,0 +1,77 @@
+{
+ "self":{
+ "name":"cdap.helloworld.mock.catalog.testing.endnode",
+ "version":"0.7.1",
+ "description":"cdap test component",
+ "component_type":"cdap"
+ },
+ "streams":{
+ "subscribes": [],
+ "publishes": [{
+ "format": "std.empty",
+ "version": "1.0.6",
+ "config_key": "stream_publish_example",
+ "type": "http"
+ }]
+ },
+ "services":{
+ "calls": [],
+ "provides":[
+ {
+ "request":{
+ "format":"std.empty",
+ "version":"1.0.6"
+ },
+ "response":{
+ "format":"std.empty",
+ "version":"1.0.6"
+ },
+ "service_name":"Greeting",
+ "service_endpoint":"greet",
+ "verb":"GET"
+ }
+ ]
+ },
+ "parameters": {
+ "app_config" : [
+ {"name" : "some_param",
+ "description" : "some desc",
+ "value" : "some_value",
+ "designer_editable" : false,
+ "sourced_at_deployment" : false,
+ "policy_editable" : false}
+ ],
+ "app_preferences" : [
+ {"name" : "some_param2",
+ "description" : "some desc2",
+ "value" : "some_value2",
+ "designer_editable" : false,
+ "sourced_at_deployment" : false,
+ "policy_editable" : false}
+ ],
+ "program_preferences" : [{"program_type" : "flows",
+ "program_id" : "WhoFlow",
+ "program_pref" : [{"name" : "some_param3",
+ "description" : "some desc3",
+ "value" : "some_value3",
+ "designer_editable" : false,
+ "sourced_at_deployment" : false,
+ "policy_editable" : false}]}]
+ },
+ "auxilary": {
+ "streamname":"who",
+ "artifact_name" : "HelloWorld",
+ "artifact_version" : "3.4.3",
+ "programs" : [
+ {"program_type" : "flows", "program_id" : "WhoFlow"},
+ {"program_type" : "services", "program_id" : "Greeting"}
+ ],
+ "namespace" : "hw"
+ },
+ "artifacts": [
+ {
+ "uri": "http://make-me-valid/jar_files/HelloWorld-3.4.3.jar",
+ "type": "jar"
+ }
+ ]
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/spec_start.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/spec_start.json
new file mode 100644
index 0000000..83b5c28
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/cdap/spec_start.json
@@ -0,0 +1,78 @@
+{
+ "self":{
+ "name":"cdap.helloworld.mock.catalog.testing.startnode",
+ "version":"0.7.1",
+ "description":"cdap test component",
+ "component_type":"cdap"
+ },
+ "streams":{
+ "subscribes": [{
+ "format": "std.empty",
+ "version": "1.0.6",
+ "route": "/unsure_if_needed_for_cdap",
+ "type": "http"
+ }],
+ "publishes": []
+ },
+ "services":{
+ "calls": [
+ {
+ "config_key": "service_call_example",
+ "verb": "GET",
+ "request": {
+ "format": "std.empty",
+ "version": "1.0.6"
+ },
+ "response": {
+ "format": "std.empty",
+ "version": "1.0.6"
+ }
+ }
+ ],
+ "provides":[]
+ },
+"parameters": {
+ "app_config" : [
+ {"name" : "some_param",
+ "description" : "some desc",
+ "value" : "some_value",
+ "designer_editable" : false,
+ "sourced_at_deployment" : false,
+ "policy_editable" : false}
+ ],
+ "app_preferences" : [
+ {"name" : "some_param2",
+ "description" : "some desc2",
+ "value" : "some_value2",
+ "designer_editable" : false,
+ "sourced_at_deployment" : false,
+ "policy_editable" : false}
+ ],
+ "program_preferences" : [{"program_type" : "flows",
+ "program_id" : "WhoFlow",
+ "program_pref" : [{"name" : "some_param3",
+ "description" : "some desc3",
+ "value" : "some_value3",
+ "designer_editable" : false,
+ "sourced_at_deployment" : false,
+ "policy_editable" : false}
+ ]}]
+ },
+ "auxilary": {
+ "streamname":"who",
+ "artifact_name" : "HelloWorld",
+ "artifact_version" : "3.4.3",
+ "programs" : [
+ {"program_type" : "flows", "program_id" : "WhoFlow"},
+ {"program_type" : "services", "program_id" : "Greeting"}
+ ],
+ "namespace" : "hw"
+ },
+ "artifacts": [
+ {
+ "uri": "http://make-me-valid/jar_files/HelloWorld-3.4.3.jar",
+ "type": "jar"
+ }
+ ]
+}
+
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/collector/kpi-collector.comp.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/collector/kpi-collector.comp.json
new file mode 100644
index 0000000..5b86d9c
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/collector/kpi-collector.comp.json
@@ -0,0 +1,47 @@
+{
+ "self": {
+ "version": "1.0.0",
+ "name": "std.vnf.kpi_collector",
+ "description": "Continuously publishes VNF KPIs",
+ "component_type": "docker"
+ },
+ "streams": {
+ "subscribes": [],
+ "publishes": [
+ {
+ "format": "std.vnf.kpi",
+ "version": "1.0.0",
+ "config_key": "kpi_pub",
+ "type": "http"
+ }
+ ]
+ },
+ "services": {
+ "calls": [],
+ "provides": []
+ },
+ "parameters": [
+ {
+ "name": "sleep_sec",
+ "value": 0.75,
+ "description": "Number of seconds to sleep between publishes",
+ "designer_editable": false,
+ "sourced_at_deployment": false,
+ "policy_editable": false
+ }
+ ],
+ "auxilary": {
+ "healthcheck": {
+ "type": "http",
+ "endpoint": "/health",
+ "interval": "15s",
+ "timeout": "1s"
+ }
+ },
+ "artifacts": [
+ {
+ "uri": "asimov-anomaly-collector",
+ "type": "docker image"
+ }
+ ]
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/collector/vnf-kpi.format.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/collector/vnf-kpi.format.json
new file mode 100644
index 0000000..6fba1a1
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/collector/vnf-kpi.format.json
@@ -0,0 +1,13 @@
+{
+ "self": {
+ "name": "std.vnf.kpi",
+ "version": "1.0.0",
+ "description": "Represents a KPI of a VNF at particular instance of time."
+ },
+ "dataformatversion": "1.0.0",
+ "reference": {
+ "name": "Common Event Format",
+ "format": "JSON",
+ "version": "25.0.0"
+ }
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/anomaly-model.comp.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/anomaly-model.comp.json
new file mode 100644
index 0000000..3e2d142
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/anomaly-model.comp.json
@@ -0,0 +1,52 @@
+{
+ "self": {
+ "version": "1.0.0",
+ "name": "asimov.anomaly_classifier",
+ "description": "Classifies VNF KPIs as anommalous or not",
+ "component_type": "docker"
+ },
+ "streams": {
+ "subscribes": [{
+ "format": "std.vnf.kpi",
+ "version": "1.0.0",
+ "route": "/data",
+ "type": "http"
+ }],
+ "publishes": [
+ {
+ "format": "asimov.std.integerClassification",
+ "version": "1.0.0",
+ "config_key": "pred",
+ "type": "http"
+ }
+ ]
+ },
+ "services": {
+ "calls": [],
+ "provides": []
+ },
+ "parameters": [
+ {
+ "name": "threshold",
+ "value": 0.75,
+ "description": "Probability threshold to exceed to be anomalous",
+ "designer_editable" : false,
+ "sourced_at_deployment" : false,
+ "policy_editable" : false
+ }
+ ],
+ "auxilary": {
+ "healthcheck": {
+ "type": "http",
+ "endpoint": "/health",
+ "interval": "15s",
+ "timeout": "1s"
+ }
+ },
+ "artifacts": [
+ {
+ "uri": "asimov-anomaly-model",
+ "type": "docker image"
+ }
+ ]
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/badjson b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/badjson
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/badjson
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/generatedir/ex1.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/generatedir/ex1.json
new file mode 100755
index 0000000..7db1e06
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/generatedir/ex1.json
@@ -0,0 +1,3 @@
+{
+ "foobar": "test 1"
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/generatedir/ex2.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/generatedir/ex2.json
new file mode 100755
index 0000000..75a5fa4
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/generatedir/ex2.json
@@ -0,0 +1,4 @@
+{
+ "foobar2": "test 1"
+}
+
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/int-class.format.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/int-class.format.json
new file mode 100644
index 0000000..7d3dedf
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/model/int-class.format.json
@@ -0,0 +1,18 @@
+{
+ "self": {
+ "name": "asimov.std.integerClassification",
+ "version": "1.0.0",
+ "description": "Represents a single classification from a machine learning model"
+ },
+ "dataformatversion": "1.0.0",
+ "jsonschema": {
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "properties": {
+ "classification": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/empty.format.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/empty.format.json
new file mode 100644
index 0000000..4ff7d3a
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/empty.format.json
@@ -0,0 +1,10 @@
+{
+ "self": {
+ "name": "std.empty",
+ "version": "1.0.0",
+ "description": "Represents an empty message with no content"
+ },
+ "dataformatversion": "1.0.0",
+ "jsonschema": {
+ }
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/line-viz.comp.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/line-viz.comp.json
new file mode 100644
index 0000000..d3b9e23
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/line-viz.comp.json
@@ -0,0 +1,51 @@
+{
+ "self": {
+ "version": "1.0.0",
+ "name": "asimov.viz.line_plot",
+ "description": "Plots class probabilities as a line plot in real-time",
+ "component_type": "docker"
+ },
+ "streams": {
+ "subscribes": [
+ {
+ "format": "asimov.std.integerClassification",
+ "version": "1.0.0",
+ "route": "/prediction",
+ "type": "http"
+ }
+ ],
+ "publishes": []
+ },
+ "services": {
+ "calls": [],
+ "provides": [
+ {
+ "route": "/viz",
+ "verb": "GET",
+ "request": {
+ "format": "std.empty",
+ "version": "1.0.0"
+ },
+ "response": {
+ "format": "std.web.url",
+ "version": "1.0.0"
+ }
+ }
+ ]
+ },
+ "parameters": [],
+ "auxilary": {
+ "healthcheck": {
+ "type": "http",
+ "endpoint": "/health",
+ "interval": "15s",
+ "timeout": "1s"
+ }
+ },
+ "artifacts": [
+ {
+ "uri": "asimov-anomaly-viz",
+ "type": "docker image"
+ }
+ ]
+}
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/web-url.format.json b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/web-url.format.json
new file mode 100644
index 0000000..3e823b9
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/mocked_components/viz/web-url.format.json
@@ -0,0 +1,19 @@
+{
+ "self": {
+ "name": "std.web.url",
+ "version": "1.0.0",
+ "description": "Represents a web URL"
+ },
+ "dataformatversion": "1.0.0",
+ "jsonschema": {
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "type": "object",
+ "properties": {
+ "URL": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+}
+
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/test_component_cmd.py b/mod/onboardingapi/dcae_cli/commands/tests/test_component_cmd.py
new file mode 100644
index 0000000..2bba4cf
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/test_component_cmd.py
@@ -0,0 +1,149 @@
+# ============LICENSE_START=======================================================
+# org.onap.dcae
+# ================================================================================
+# Copyright (c) 2017-2018 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=========================================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+# -*- coding: utf-8 -*-
+'''
+Tests component CLI commands
+'''
+import os
+import json
+from click.testing import CliRunner
+import time
+import pytest
+
+from dcae_cli.cli import cli
+from dcae_cli.catalog import MockCatalog
+
+TEST_DIR = os.path.dirname(__file__)
+
+
+def _get_spec(path):
+ with open(path) as file:
+ return json.load(file)
+
+
+def test_comp_docker(mock_cli_config, mock_db_url, obj=None):
+
+ obj = {'catalog': MockCatalog(purge_existing=True, db_name='dcae_cli.test.db',
+ enforce_image=False, db_url=mock_db_url),
+ 'config': {'user': 'test-user'}}
+
+ df_kpi = os.path.join(TEST_DIR, 'mocked_components', 'collector', 'vnf-kpi.format.json')
+ comp_coll = os.path.join(TEST_DIR, 'mocked_components', 'collector', 'kpi-collector.comp.json')
+
+ df_cls = os.path.join(TEST_DIR, 'mocked_components', 'model', 'int-class.format.json')
+ comp_model = os.path.join(TEST_DIR, 'mocked_components', 'model', 'anomaly-model.comp.json')
+
+ df_empty = os.path.join(TEST_DIR, 'mocked_components', 'viz', 'empty.format.json')
+ df_url = os.path.join(TEST_DIR, 'mocked_components', 'viz', 'web-url.format.json')
+ comp_viz = os.path.join(TEST_DIR, 'mocked_components', 'viz', 'line-viz.comp.json')
+
+ runner = CliRunner()
+
+
+ # add the collector
+ cmd = "data_format add {:}".format(df_kpi).split()
+ assert runner.invoke(cli, cmd, obj=obj).exit_code == 0
+
+ cmd = "component add {:}".format(comp_coll).split()
+ assert runner.invoke(cli, cmd, obj=obj).exit_code == 0
+
+
+ # add the model
+ cmd = "data_format add {:}".format(df_cls).split()
+ assert runner.invoke(cli, cmd, obj=obj).exit_code == 0
+
+ cmd = "component add {:}".format(comp_model).split()
+ assert runner.invoke(cli, cmd, obj=obj).exit_code == 0
+
+
+ # add the viz
+ cmd = "data_format add {:}".format(df_empty).split()
+ assert runner.invoke(cli, cmd, obj=obj).exit_code == 0
+
+ cmd = "data_format add {:}".format(df_url).split()
+ assert runner.invoke(cli, cmd, obj=obj).exit_code == 0
+
+ cmd = "component add {:}".format(comp_viz).split()
+ assert runner.invoke(cli, cmd, obj=obj).exit_code == 0
+
+
+ # light test of component list
+ df_cls_spec = _get_spec(df_cls)
+ df_cls_name, df_cls_ver = df_cls_spec['self']['name'], df_cls_spec['self']['version']
+ comp_model_spec = _get_spec(comp_model)
+ comp_model_name = comp_model_spec['self']['name']
+
+ cmd = "component list -pub {:}".format(df_cls_name).split()
+ #assert comp_model_name in runner.invoke(cli, cmd, obj=obj).output
+
+ cmd = "component list -pub {:}:{:}".format(df_cls_name, df_cls_ver).split()
+ #assert comp_model_name in runner.invoke(cli, cmd, obj=obj).output
+
+
+ # light test of component info
+ cmd = "component show {:}".format(comp_model_name).split()
+ spec_str = runner.invoke(cli, cmd, obj=obj).output
+ assert comp_model_spec == json.loads(spec_str)
+
+
+@pytest.mark.skip(reason="This is not a pure unit test. Need a way to setup dependencies and trigger in the appropriate stages of testing.")
+def test_comp_cdap(obj=None):
+ """
+ This is not a unit test. It is bigger than that. It Does a full "workflow" test:
+ 1) adds a data format
+ 2) adds a cdap component
+ 3) runs a cdap component using our "Rework" broker
+ 4) undeploys the cdap component using our "Rework" broker
+
+ NOTE: TODO: Mocking out the broker would be an improvement over this, probably. This is impure. Mocking the broker owuld be a huge undertaking, though.
+ """
+
+ obj = {'catalog': MockCatalog(purge_existing=True, db_name='dcae_cli.test.db'),
+ 'config': {'user': 'test-user'}}
+ runner = CliRunner()
+
+ #add the data format
+ df = os.path.join(TEST_DIR, 'mocked_components', 'cdap', 'format.json')
+ cmd = "data_format add {:}".format(df).split()
+ assert runner.invoke(cli, cmd, obj=obj).exit_code == 0
+
+ #add the CDAP components
+ # TODO: Need to update the host
+ jar = 'http://make-me-valid/HelloWorld-3.4.3.jar'
+
+ comp_cdap_start = os.path.join(TEST_DIR, 'mocked_components', 'cdap', 'spec_start.json')
+ cmd = "component add {0}".format(comp_cdap_start).split()
+ print(cmd)
+ result = runner.invoke(cli, cmd, obj=obj)
+ print(result.output)
+ assert result.exit_code == 0
+
+ comp_cdap_end = os.path.join(TEST_DIR, 'mocked_components', 'cdap', 'spec_end.json')
+ cmd = "component add {0}".format(comp_cdap_end).split()
+ print(cmd)
+ result = runner.invoke(cli, cmd, obj=obj)
+ print(result.output)
+ assert result.exit_code == 0
+
+if __name__ == '__main__':
+ '''Test area'''
+ #pytest.main([__file__, ])
+ test_comp_cdap()
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/test_data_format_cmd.py b/mod/onboardingapi/dcae_cli/commands/tests/test_data_format_cmd.py
new file mode 100644
index 0000000..a291a74
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/test_data_format_cmd.py
@@ -0,0 +1,122 @@
+# ============LICENSE_START=======================================================
+# org.onap.dcae
+# ================================================================================
+# Copyright (c) 2017-2018 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=========================================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+# -*- coding: utf-8 -*-
+'''
+Tests data_format CLI commands
+'''
+import os
+import json
+
+import pytest
+from click.testing import CliRunner
+
+from dcae_cli.cli import cli
+from dcae_cli.catalog import MockCatalog
+
+
+TEST_DIR = os.path.dirname(__file__)
+
+
+def _get_spec(path):
+ with open(path) as file:
+ return json.load(file)
+
+
+def test_basic(mock_cli_config, mock_db_url, tmpdir):
+ obj = {'catalog': MockCatalog(purge_existing=True, db_name='dcae_cli.test.db',
+ enforce_image=False, db_url=mock_db_url),
+ 'config': {'user': 'test-user'}}
+
+ runner = CliRunner()
+ spec_file = os.path.join(TEST_DIR, 'mocked_components', 'model', 'int-class.format.json')
+ cmd = "data_format add {:}".format(spec_file).split()
+
+ # succeed the first time
+ result = runner.invoke(cli, cmd, obj=obj)
+
+ assert result.exit_code == 0
+
+ # adding a duplicate is an error
+ result = runner.invoke(cli, cmd, obj=obj)
+ assert result.exit_code == 1
+ assert 'exists' in result.output.lower()
+
+ # allow updates
+ cmd = "data_format add --update {:}".format(spec_file).split()
+ result = runner.invoke(cli, cmd, obj=obj)
+ assert result.exit_code == 0
+
+
+ # light test of list format command
+ cmd = 'data_format list'.split()
+ df_spec = _get_spec(spec_file)
+ df_name = df_spec['self']['name']
+ assert df_name in runner.invoke(cli, cmd, obj=obj).output
+
+
+ # light test of component info
+ cmd = "data_format show {:}".format(df_name).split()
+ spec_str = runner.invoke(cli, cmd, obj=obj).output
+ assert df_spec == json.loads(spec_str)
+
+ # test of generate
+ bad_dir = os.path.join(TEST_DIR, 'mocked_components', 'model', 'baddir')
+ cmd = "data_format generate --keywords \"name:1.0.2\" {:}".format(bad_dir).split()
+ err_str = runner.invoke(cli, cmd, obj=obj).output
+ assert "does not exist" in err_str
+
+ empty_dir = os.path.join(TEST_DIR, 'mocked_components', 'model', 'emptydir')
+ try:
+ os.stat(empty_dir)
+ except:
+ os.mkdir(empty_dir)
+ cmd = "data_format generate --keywords \"name:1.0.2\" {:}".format(empty_dir).split()
+ err_str = runner.invoke(cli, cmd, obj=obj).output
+ assert "No JSON files found" in err_str
+
+ bad_json = os.path.join(TEST_DIR, 'mocked_components', 'model', 'badjson')
+ cmd = "data_format generate --keywords \"name:1.0.2\" {:}".format(bad_json).split()
+ err_str = runner.invoke(cli, cmd, obj=obj).output
+ assert "Bad JSON file" in err_str
+
+ generate_dir = os.path.join(TEST_DIR, 'mocked_components', 'model', 'generatedir')
+ cmd = "data_format generate --keywords name:1.0.2 {:} ".format(generate_dir).split()
+ actual = json.loads(runner.invoke(cli, cmd, obj=obj).output)
+ expected = json.loads('{\n "dataformatversion": "1.0.0", \n "jsonschema": {\n "$schema": "http://json-schema.org/draft-04/schema#", \n "description": "", \n "properties": {\n "foobar": {\n "description": "", \n "maxLength": 0, \n "minLength": 0, \n "pattern": "", \n "type": "string"\n }, \n "foobar2": {\n "description": "", \n "maxLength": 0, \n "minLength": 0, \n "pattern": "", \n "type": "string"\n }\n }, \n "type": "object"\n }, \n "self": {\n "description": "", \n "name": "name", \n "version": "1.0.2"\n }\n}\n')
+ assert actual == expected
+
+ generate_dir = os.path.join(TEST_DIR, 'mocked_components', 'model', 'generatedir')
+ cmd = "data_format generate name:1.0.2 {:} ".format(generate_dir).split()
+ actual = json.loads(runner.invoke(cli, cmd, obj=obj).output)
+ expected = json.loads('{\n "dataformatversion": "1.0.0", \n "jsonschema": {\n "$schema": "http://json-schema.org/draft-04/schema#", \n "description": "", \n "properties": {\n "foobar": {\n "description": "", \n "type": "string"\n }, \n "foobar2": {\n "description": "", \n "type": "string"\n }\n }, \n "type": "object"\n }, \n "self": {\n "description": "", \n "name": "name", \n "version": "1.0.2"\n }\n}\n'
+ )
+ assert actual == expected
+
+ generate_dir = os.path.join(TEST_DIR, 'mocked_components', 'model', 'generatedir', 'ex1.json')
+ cmd = "data_format generate name:1.0.2 {:} ".format(generate_dir).split()
+ actual = json.loads(runner.invoke(cli, cmd, obj=obj).output)
+ expected = json.loads('{\n "dataformatversion": "1.0.0", \n "jsonschema": {\n "$schema": "http://json-schema.org/draft-04/schema#", \n "additionalproperties": true, \n "description": "", \n "properties": {\n "foobar": {\n "description": "", \n "type": "string"\n }\n }, \n "required": [\n "foobar"\n ], \n "type": "object"\n }, \n "self": {\n "description": "", \n "name": "name", \n "version": "1.0.2"\n }\n}\n')
+ assert actual == expected
+
+
+if __name__ == '__main__':
+ '''Test area'''
+ pytest.main([__file__, ])
diff --git a/mod/onboardingapi/dcae_cli/commands/tests/test_profiles_cmd.py b/mod/onboardingapi/dcae_cli/commands/tests/test_profiles_cmd.py
new file mode 100644
index 0000000..be89722
--- /dev/null
+++ b/mod/onboardingapi/dcae_cli/commands/tests/test_profiles_cmd.py
@@ -0,0 +1,84 @@
+# ============LICENSE_START=======================================================
+# org.onap.dcae
+# ================================================================================
+# Copyright (c) 2017 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=========================================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+
+# -*- coding: utf-8 -*-
+'''
+Tests profiles CLI commands
+'''
+import json
+
+import pytest
+import click
+from click.testing import CliRunner
+
+from dcae_cli import util
+from dcae_cli.cli import cli
+from dcae_cli.util import profiles
+from dcae_cli.util import config
+
+
+def test_basic(monkeypatch, tmpdir, mock_db_url):
+
+ runner = CliRunner()
+
+ # Setup config
+ test_db_url = mock_db_url
+ config_dict = { "user": "ninny", "active_profile": "fake-solutioning",
+ "db_url": test_db_url, "cli_version": "2.0.0" }
+ config_file = tmpdir.join("config.json")
+ config_file.write(json.dumps(config_dict))
+
+ # Setup profile
+ profile_dict = { "fake-solutioning": { "cdap_broker": "cdap_broker",
+ "config_binding_service": "config_binding_service",
+ "consul_host": "realsolcnsl00.dcae.solutioning.com",
+ "docker_host": "realsoldokr00.dcae.solutioning.com:2376" }}
+ profile_file = tmpdir.join("profiles.json")
+ profile_file.write(json.dumps(profile_dict))
+
+ monkeypatch.setattr(click, "get_app_dir", lambda app: str(tmpdir.realpath()))
+
+ cmd = 'profiles show fake-solutioning'.split()
+ result = runner.invoke(cli, cmd)
+ assert result.output == "{}\n".format(json.dumps(profile_dict["fake-solutioning"],
+ sort_keys=True, indent=4))
+
+ cmd = 'profiles list'.split()
+ result = runner.invoke(cli, cmd)
+ assert result.output == '* fake-solutioning\n'
+
+ cmd = 'profiles create foo'.split()
+ result = runner.invoke(cli, cmd)
+
+ cmd = 'profiles list'.split()
+ result = runner.invoke(cli, cmd)
+ assert result.output == '* fake-solutioning\n foo\n'
+
+ cmd = 'profiles activate foo'.split()
+ result = runner.invoke(cli, cmd)
+
+ cmd = 'profiles list'.split()
+ result = runner.invoke(cli, cmd)
+ assert result.output == ' fake-solutioning\n* foo\n'
+
+
+if __name__ == '__main__':
+ '''Test area'''
+ pytest.main([__file__, ])