From 71daad00b149115eed40a7084aaa65237437b0cd Mon Sep 17 00:00:00 2001 From: Sean Shookman Date: Wed, 4 Sep 2019 10:44:41 -0500 Subject: [PATCH] Test cases (#68) * Adds tests for more scenarios * Version and Changelog * Cleaning up root directory --- .dockerignore | 10 ---------- CHANGELOG.md | 7 +++++++ Dockerfile | 15 --------------- VERSION | 2 +- docs/installing.md | 2 +- install.sh => jobs/install.sh | 0 publish.sh => jobs/publish.sh | 0 pypi-upload.sh => jobs/pypi-upload.sh | 0 test.sh => jobs/test.sh | 2 +- skelebot.yaml | 6 +++--- skelebot/systems/parsing/skeleParser.py | 2 +- test/test_systems_execution_docker.py | 3 ++- test/test_systems_parsing_skeleParser.py | 21 ++++++++++++++++----- test/test_systems_scaffolding_scaffolder.py | 2 +- test_v0.1.0.pkl | 0 15 files changed, 33 insertions(+), 39 deletions(-) delete mode 100644 .dockerignore delete mode 100644 Dockerfile rename install.sh => jobs/install.sh (100%) rename publish.sh => jobs/publish.sh (100%) rename pypi-upload.sh => jobs/pypi-upload.sh (100%) rename test.sh => jobs/test.sh (94%) delete mode 100644 test_v0.1.0.pkl diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 829613b..0000000 --- a/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ - -# This dockerignore was generated by Skelebot -# Editing this file manually is not advised as all changes will be overwritten by Skelebot - -**/*.zip -**/*.RData -**/*.pkl -**/*.csv -**/*.model -**/*.pyc diff --git a/CHANGELOG.md b/CHANGELOG.md index 927ab87..1f55aff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,14 @@ Documenting All Changes to the Skelebot Project --- +## v1.2.1 +#### Added +- **Tests** | Added more test cases to cover important edge cases that were missed + +--- + ## v1.2.0 +#### Merged: 2019-08-22 #### Added - **Primary Job** | Added the ability for primary job to accept component hooks and use default params diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 747a5f9..0000000 --- a/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ - -# This Dockerfile was generated by Skelebot -# Editing this file manually is not advised as all changes will be overwritten by Skelebot - -FROM skelebot/python-base -MAINTAINER Sean Shookman -WORKDIR /app -RUN ["pip", "install", "pyyaml==5.1.2"] -RUN ["pip", "install", "artifactory==0.1.17"] -RUN ["pip", "install", "requests==2.22.0"] -RUN ["pip", "install", "coverage"] -RUN ["pip", "install", "pytest"] -RUN ["pip", "install", "schema==0.7.0"] -COPY . /app -CMD /bin/bash -c "bash test.sh" diff --git a/VERSION b/VERSION index 867e524..cb174d5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.0 \ No newline at end of file +1.2.1 \ No newline at end of file diff --git a/docs/installing.md b/docs/installing.md index 92bba88..a30c021 100644 --- a/docs/installing.md +++ b/docs/installing.md @@ -21,7 +21,7 @@ to the root of the project and execute the install.sh script. ``` -> ./install.sh +> ./jobs/install.sh ``` If you do not have proper access on the machine you are using, Skelebot can be installed locally with the following command. diff --git a/install.sh b/jobs/install.sh similarity index 100% rename from install.sh rename to jobs/install.sh diff --git a/publish.sh b/jobs/publish.sh similarity index 100% rename from publish.sh rename to jobs/publish.sh diff --git a/pypi-upload.sh b/jobs/pypi-upload.sh similarity index 100% rename from pypi-upload.sh rename to jobs/pypi-upload.sh diff --git a/test.sh b/jobs/test.sh similarity index 94% rename from test.sh rename to jobs/test.sh index 33796f4..1f645c2 100755 --- a/test.sh +++ b/jobs/test.sh @@ -1,6 +1,6 @@ if [ "--coverage" = "$1" ] then - coverage run --source=skelebot setup.py test && coverage report + coverage run --source=skelebot setup.py test && coverage report -m else python setup.py test fi diff --git a/skelebot.yaml b/skelebot.yaml index 4c9a3fc..67295d4 100644 --- a/skelebot.yaml +++ b/skelebot.yaml @@ -3,7 +3,7 @@ description: ML Build Tool maintainer: Sean Shookman contact: sshookman@cars.com language: Python -ephemeral: False +ephemeral: True primaryJob: test dependencies: - pyyaml==5.1.2 @@ -21,11 +21,11 @@ ignores: - '**/*.pyc' jobs: - name: publish - source: publish.sh + source: jobs/publish.sh mode: i help: Build and Publish the Docker Base Images - name: test - source: test.sh + source: jobs/test.sh mode: i help: Run the test cases for the project with coverage params: diff --git a/skelebot/systems/parsing/skeleParser.py b/skelebot/systems/parsing/skeleParser.py index 9741559..8226315 100644 --- a/skelebot/systems/parsing/skeleParser.py +++ b/skelebot/systems/parsing/skeleParser.py @@ -115,7 +115,7 @@ def parseArgs(self, args=None): def showHelp(self): """Display the help message from the internal parser object""" - return self.parser.print_help() + self.parser.print_help() def buildDescription(self): """Construct the description text for the '--help' output""" diff --git a/test/test_systems_execution_docker.py b/test/test_systems_execution_docker.py index 4fc8c50..629bb83 100644 --- a/test/test_systems_execution_docker.py +++ b/test/test_systems_execution_docker.py @@ -74,11 +74,12 @@ def test_run(self, mock_getcwd, mock_system, mock_expanduser): mock_system.return_value = 0 config = sb.systems.generators.yaml.loadConfig() + config.ports = ["1127:1127"] job = config.jobs[0] job.mappings = ["data/", "/test/output/:/app/output/", "~/temp/:/app/temp/"] command = sb.systems.execution.commandBuilder.build(config, job, args) - expected = "docker run --name test-build --rm -i -v {cwd}/data/:/app/data/ -v /test/output/:/app/output/ -v {path}/temp/:/app/temp/ test /bin/bash -c \"bash build.sh 0.1 --env local --log info\"".format(cwd=folderPath, path=homePath) + expected = "docker run --name test-build --rm -i -p 1127:1127 -v {cwd}/data/:/app/data/ -v /test/output/:/app/output/ -v {path}/temp/:/app/temp/ test /bin/bash -c \"bash build.sh 0.1 --env local --log info\"".format(cwd=folderPath, path=homePath) sb.systems.execution.docker.run(config, command, job.mode, config.ports, job.mappings, job.name) mock_system.assert_called_once_with(expected) diff --git a/test/test_systems_parsing_skeleParser.py b/test/test_systems_parsing_skeleParser.py index 66a3f3d..2626d35 100644 --- a/test/test_systems_parsing_skeleParser.py +++ b/test/test_systems_parsing_skeleParser.py @@ -1,4 +1,5 @@ from unittest import TestCase +from unittest import mock import skelebot as sb @@ -9,13 +10,14 @@ def test_parseArgs(self): arg2 = sb.objects.arg.Arg(name="end", choices=["now", "never"]) param1 = sb.objects.param.Param(name="days", alt="d", default=10) param2 = sb.objects.param.Param(name="env", alt="e", default="local", choices=["local", "prod"]) - param3 = sb.objects.param.Param(name="method") + param3 = sb.objects.param.Param(name="method", accepts="boolean") param4 = sb.objects.param.Param(name="simple") + param4 = sb.objects.param.Param(name="multi", accepts="list") topParam = sb.objects.param.Param(name="log", alt="l", default="info", choices=["debug", "info", "warn", "error"]) job = sb.objects.job.Job(name="test", mode="d", source="test.py", help="TEST", args=[arg1, arg2], params=[param1, param2, param3, param4]) config = sb.objects.config.Config(name="test-project", description="A test project", version="0.1.0", jobs=[job], params=[topParam]) sbParser = sb.systems.parsing.skeleParser.SkeleParser(config, "test") - args = sbParser.parseArgs(["test", "2019", "never", "-d", "20", "--env", "prod", "-l", "debug", "--method", "tune"]) + args = sbParser.parseArgs(["test", "2019", "never", "-d", "20", "--env", "prod", "-l", "debug", "--method", "--multi", "abc", "123"]) self.assertEqual(args.job, "test") self.assertEqual(args.start, "2019") @@ -23,8 +25,9 @@ def test_parseArgs(self): self.assertEqual(args.days, "20") self.assertEqual(args.env, "prod") self.assertEqual(args.log, "debug") - self.assertEqual(args.method, "tune") - self.assertEqual(args.simple, None) + self.assertEqual(args.method, True) + self.assertEqual(args.multi, ["abc", "123"]) + self.assertEqual(hasattr(args, 'simple'), False) def test_parseArgs_non_skelebot_scaffold(self): config = sb.objects.config.Config() @@ -45,10 +48,18 @@ def test_description(self): ----------------------------------- Version: 0.1.0 Environment: test -Skelebot Version: 1.2.0 +Skelebot Version: 1.2.1 -----------------------------------""" self.assertEqual(description, expectedDescription) + @mock.patch('skelebot.systems.parsing.skeleParser.argparse.ArgumentParser.print_help') + def test_help(self, mock_printHelp): + config = sb.objects.config.Config(name="test-project", description="A test project", version="0.1.0") + sbParser = sb.systems.parsing.skeleParser.SkeleParser(config, "test") + actualHelp = sbParser.showHelp() + + mock_printHelp.expect_called_once_with() + if __name__ == '__main__': unittest.main() diff --git a/test/test_systems_scaffolding_scaffolder.py b/test/test_systems_scaffolding_scaffolder.py index 923ba9b..e890d55 100644 --- a/test/test_systems_scaffolding_scaffolder.py +++ b/test/test_systems_scaffolding_scaffolder.py @@ -3,7 +3,7 @@ import skelebot as sb -class TestExecutor(TestCase): +class TestScaffolder(TestCase): @mock.patch('os.path.expanduser') @mock.patch('os.path.exists') diff --git a/test_v0.1.0.pkl b/test_v0.1.0.pkl deleted file mode 100644 index e69de29..0000000