test: improve coverage and fix bugs

Signed-off-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
Ruslan Kuprieiev
2018-01-10 19:39:41 +02:00
parent 5dc058ce69
commit 3b09290ed8
9 changed files with 89 additions and 25 deletions
+6
View File
@@ -2,6 +2,8 @@ branches:
only:
- master
platform: x86
environment:
matrix:
@@ -31,6 +33,10 @@ environment:
# PYTHON_ARCH: "64"
install:
- cinst graphviz
- cinst wget
- wget --no-check-certificate https://github.com/dpinney/omf/raw/master/omf/static/pygraphviz-1.3.1-cp27-none-win32.whl
- pip install pygraphviz-1.3.1-cp27-none-win32.whl
- pip install -r requirements.txt
- python setup.py install
+6 -4
View File
@@ -1,18 +1,20 @@
import os
from dvc.project import Project
from dvc.logger import Logger
from dvc.exceptions import DvcException
class CmdBase(object):
def __init__(self, args):
self.project = Project(self._find_root())
self.args = args
if args.quiet and not args.verbose:
self.project.logger.be_quiet()
elif not args.quiet and args.verbose:
self.project.logger.be_verbose()
self.project = Project(self._find_root())
self.args = args
def _find_root(self):
root = os.getcwd()
while not os.path.ismount(root):
@@ -21,7 +23,7 @@ class CmdBase(object):
return root
root = os.path.dirname(root)
msg = "Not a dvc repository (or any parent up to mount point {})"
self.project.logger.error(msg.format(root))
raise DvcException(msg.format(root))
def run_cmd(self):
with self.project.lock:
+2 -2
View File
@@ -12,7 +12,7 @@ class CmdShowPipeline(CmdBase):
A.write(fname + '.dot')
A.draw(fname + '.jpeg', format='jpeg', prog='dot')
except Exception as exc:
Logger.error('Failed to draw dependency graph for {}: {}'.format(target, exc))
self.project.logger.error('Failed to draw dependency graph for {}: {}'.format(target, exc))
return 1
return 0
@@ -22,7 +22,7 @@ class CmdShowPipeline(CmdBase):
if fname in s.nodes():
return s
return self.g
return None
def draw_targets(self, target):
if not target:
+9 -1
View File
@@ -1,5 +1,13 @@
from dvc.logger import Logger
from dvc.cli import parse_args
def main(argv=None):
args = parse_args(argv)
return args.func(args).run_cmd()
try:
cmd = args.func(args)
except Exception as ex:
Logger.error('Initialization error: {}'.format(str(ex)))
return 255
return cmd.run_cmd()
+1
View File
@@ -94,3 +94,4 @@ pyyaml==3.12
tinydb==3.7.0
gitpython==2.1.8
ntfsutils==0.1.3
pygraphviz==1.3.1
+1
View File
@@ -99,6 +99,7 @@ install_requires = [
'tinydb==3.7.0',
'gitpython==2.1.8',
'ntfsutils==0.1.3',
'pygraphviz==1.3.1',
]
if platform.system() == 'Darwin':
+20 -15
View File
@@ -3,30 +3,35 @@ import stat
import shutil
import filecmp
from dvc.main import main
from dvc.data_cloud import file_md5
from dvc.stage import Stage, OutputNoCacheError, OutputOutsideOfRepoError
from dvc.stage import OutputDoesNotExistError, OutputIsNotFileError
from dvc.project import StageNotFoundError
from tests.basic_env import TestDvc
from tests.test_repro import TestRepro
class TestCheckout(TestDvc):
def test_checkout(self):
cmd = 'python {} {} {}'.format(self.CODE, self.FOO, 'out')
deps = [self.FOO, self.CODE]
outs = [os.path.join(self.dvc.root_dir, 'out')]
outs_no_cache = []
locked = False
fname = os.path.join(self.dvc.root_dir, 'out.dvc')
cwd = os.curdir
class TestCheckout(TestRepro):
def setUp(self):
super(TestCheckout, self).setUp()
self.dvc.add(self.FOO)
stage = self.dvc.run(cmd, deps, outs, outs_no_cache, locked, fname, cwd)
shutil.copy(self.FOO, 'orig')
self.orig = 'orig'
shutil.copy(self.FOO, self.orig)
os.chmod(self.FOO, stat.S_IWRITE)
os.unlink(self.FOO)
def test(self):
self.dvc.checkout()
self._test_checkout()
def _test_checkout(self):
self.assertTrue(os.path.isfile(self.FOO))
self.assertTrue(filecmp.cmp(self.FOO, 'orig'))
self.assertTrue(filecmp.cmp(self.FOO, self.orig))
class TestCmdCheckout(TestCheckout):
def test(self):
ret = main(['checkout'])
self.assertEqual(ret, 0)
self._test_checkout()
+33
View File
@@ -0,0 +1,33 @@
import os
import pygraphviz
from dvc.main import main
from tests.test_repro import TestRepro
class TestShowPipeline(TestRepro):
def test_show(self):
ret = main(['show',
'pipeline'])
self.assertEqual(ret, 0)
self.assertTrue(os.path.isfile('pipeline_all.dot'))
self.assertTrue(os.path.isfile('pipeline_all.jpeg'))
def test_target(self):
base = 'pipeline_' + os.path.basename(self.file1_stage)
ret = main(['show',
'pipeline',
self.file1_stage])
self.assertEqual(ret, 0)
self.assertTrue(os.path.isfile(base + '.dot'))
self.assertTrue(os.path.isfile(base + '.jpeg'))
def test_non_existing_target(self):
ret = main(['show',
'pipeline',
'non-existing-target'])
self.assertNotEqual(ret, 0)
+11 -3
View File
@@ -1,12 +1,15 @@
from unittest import TestCase
from dvc.main import main
from dvc.graph.workflow import Workflow,\
CollapseDvcReproCommitsStrategy, CollapseNotMeticsCommitsStrategy
from dvc.graph.commit import Commit
from tests.basic_env import TestDvc
class TestWorkflow(TestCase):
class TestWorkflow(TestDvc):
def setUp(self):
super(TestWorkflow, self).setUp()
self._commit4 = Commit('4', '3', 'name1', 'today', 'comment4')
self._commit3 = Commit('3', '2', 'name1', 'today', 'DVC repro-run ...')
self._commit2 = Commit('2', '1', 'name1', 'today', 'DVC repro-run ...')
@@ -148,3 +151,8 @@ class TestWorkflow(TestCase):
is_collapsed_commit_presented(self, wf._commits['3'], not_metric_commit2)
is_collapsed_commit_presented(self, wf._commits['3'], self._commit1)
pass
def test_cli(self):
ret = main(['show',
'workflow'])
self.assertEqual(ret, 0)