From a5b4d29291c57158973acaa87aa0cc306ee96aed Mon Sep 17 00:00:00 2001 From: spzala Date: Sat, 14 Nov 2015 22:40:01 -0800 Subject: [PATCH] Create an initial test coverage for shell entry point Ceate a new initial test coverarge for the shell entry point. Change-Id: Idc0ec8c38345ebeee4c915a607d2cccd0bf84956 Partially-Implements: blueprint tosca-shell-entry-support --- toscaparser/shell.py | 90 +++++++++++++++++++-------------- toscaparser/tests/test_shell.py | 56 ++++++++++++++++++++ 2 files changed, 107 insertions(+), 39 deletions(-) create mode 100644 toscaparser/tests/test_shell.py diff --git a/toscaparser/shell.py b/toscaparser/shell.py index 1e18669..2e19ed8 100644 --- a/toscaparser/shell.py +++ b/toscaparser/shell.py @@ -38,47 +38,59 @@ e.g. """ -def main(): - if len(sys.argv) < 2: - msg = _("The program requires template or CSAR file as an argument. " - "Please refer to the usage documentation.") - raise ValueError(msg) - if "--template-file=" not in sys.argv[1]: - msg = _("The program expects --template-file as first argument. " - "Please refer to the usage documentation.") - path = sys.argv[1].split('--template-file=')[1] - if os.path.isfile(path): - parse(path) - elif toscaparser.utils.urlutils.UrlUtils.validate_url(path): - parse(path, False) - else: - raise ValueError(_("%(path)s is not a valid file.") % {'path': path}) +class ParserShell(object): + + def _validate(self, args): + if len(args) < 1: + msg = _("The program requires template or CSAR file as an " + "argument. Please refer to the usage documentation.") + raise ValueError(msg) + if "--template-file=" not in args[0]: + msg = _("The program expects --template-file as first argument. " + "Please refer to the usage documentation.") + raise ValueError(msg) + + def main(self, args): + self._validate(args) + path = args[0].split('--template-file=')[1] + if os.path.isfile(path): + self.parse(path) + elif toscaparser.utils.urlutils.UrlUtils.validate_url(path): + self.parse(path, False) + else: + raise ValueError(_("%(path)s is not a valid file.") + % {'path': path}) + + def parse(self, path, a_file=True): + output = None + tosca = ToscaTemplate(path, None, a_file) + version = tosca.version + if tosca.version: + print ("\nversion: " + version) + description = tosca.description + if description: + print ("\ndescription: " + description) + inputs = tosca.inputs + if inputs: + print ("\ninputs:") + for input in inputs: + print ("\t" + input.name) + nodetemplates = tosca.nodetemplates + if nodetemplates: + print ("\nnodetemplates:") + for node in nodetemplates: + print ("\t" + node.name) + outputs = tosca.outputs + if outputs: + print ("\noutputs:") + for output in outputs: + print ("\t" + output.name) -def parse(path, a_file=True): - output = None - tosca = ToscaTemplate(path, None, a_file) - version = tosca.version - if tosca.version: - print ("\nversion: " + version) - description = tosca.description - if description: - print ("\ndescription: " + description) - inputs = tosca.inputs - if inputs: - print ("\ninputs:") - for input in inputs: - print ("\t" + input.name) - nodetemplates = tosca.nodetemplates - if nodetemplates: - print ("\nnodetemplates:") - for node in nodetemplates: - print ("\t" + node.name) - outputs = tosca.outputs - if outputs: - print ("\noutputs:") - for output in outputs: - print ("\t" + output.name) +def main(args=None): + if args is None: + args = sys.argv[1:] + ParserShell().main(args) if __name__ == '__main__': diff --git a/toscaparser/tests/test_shell.py b/toscaparser/tests/test_shell.py new file mode 100644 index 0000000..0947687 --- /dev/null +++ b/toscaparser/tests/test_shell.py @@ -0,0 +1,56 @@ +# 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. + +import os + +from toscaparser.common import exception +import toscaparser.shell as shell +from toscaparser.tests.base import TestCase + + +class ShellTest(TestCase): + + tosca_helloworld = os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "data/tosca_helloworld.yaml") + + errornous_template = os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "data/test_multiple_validation_errors.yaml") + + def test_missing_arg(self): + error = self.assertRaises(ValueError, shell.main, '') + err_msg = "The program requires template or CSAR file as an " \ + "argument. Please refer to the usage documentation." + self.assertEqual(err_msg, str(error)) + + def test_invalid_arg(self): + error = self.assertRaises(ValueError, shell.main, 'parse me') + err_msg = "The program expects --template-file as first argument. " \ + "Please refer to the usage documentation." + self.assertEqual(err_msg, str(error)) + + def test_template_not_exist(self): + error = self.assertRaises( + ValueError, shell.main, ['--template-file=template.txt']) + self.assertEqual('template.txt is not a valid file.', str(error)) + + def test_template_invalid(self): + arg = '--template-file=' + self.errornous_template + self.assertRaises(exception.ValidationError, shell.main, [arg]) + + def test_template_valid(self): + arg = '--template-file=' + self.tosca_helloworld + try: + shell.main([arg]) + except Exception: + self.fail("The program raised an exception unexpectedly.")