From 99965d2ceea70e742f3a37de0e6dcbe8243f4452 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Mon, 27 Nov 2017 01:09:00 +0200 Subject: [PATCH] functest: add partial repro test Fixes #259 Signed-off-by: Ruslan Kuprieiev --- functest/common.sh | 18 +++++- functest/test-repro-code.sh | 111 +++++++++++++++++++++++++++--------- 2 files changed, 102 insertions(+), 27 deletions(-) diff --git a/functest/common.sh b/functest/common.sh index 38565fd9c..1cb1c759c 100644 --- a/functest/common.sh +++ b/functest/common.sh @@ -22,14 +22,30 @@ TEST_REPO_REGION='us-east-2' TEST_REPO_GCP='dvc-test/myrepo' TEST_REPO_GCP_PROJECT='dvc-project' -function dvc_md5() { +function is_osx() { if [ "$(uname)" == "Darwin" ]; then + return 0 + else + return 1 + fi +} + +function dvc_md5() { + if is_osx; then md5 -r $@ else md5sum $@ fi } +function dvc_timestamp() { + if is_osx; then + stat -f "%m%t%Sm %N" $@ + else + stat -c %y data/foo $@ + fi +} + function dvc_print() { echo -e "$1" } diff --git a/functest/test-repro-code.sh b/functest/test-repro-code.sh index 19734d1ef..ffa814aea 100755 --- a/functest/test-repro-code.sh +++ b/functest/test-repro-code.sh @@ -4,36 +4,95 @@ set -e source common.sh -dvc_create_repo +function test_generic() { + dvc_info '=== Generic repro test' -dvc_info 'Copy foo into foo1' -dvc run -d code/code.sh -d data/foo -o data/foo1 bash code/code.sh data/foo data/foo1 + dvc_create_repo -dvc_info 'Modify code' -echo " " >> code/code.sh -git commit -am 'Change code' - -dvc_info 'Reproduce foo1' -dvc repro data/foo1 -dvc_check_files data/foo1 -if [ "$(cat data/foo1)" != "foo" ]; then - dvc_fail -fi + dvc_info 'Copy foo into foo1' + dvc run -d code/code.sh -d data/foo -o data/foo1 bash code/code.sh data/foo data/foo1 -dvc_info 'Modify foo' -dvc remove data/foo -cp $DATA_CACHE/bar data/foo -dvc add data/foo + dvc_info 'Modify code' + echo " " >> code/code.sh + git commit -am 'Change code' + + dvc_info 'Reproduce foo1' + dvc repro data/foo1 + dvc_check_files data/foo1 + if [ "$(cat data/foo1)" != "foo" ]; then + dvc_fail + fi -dvc_info 'Set default target' -dvc config global.target data/foo1 -git commit -am 'Set default target' + dvc_info 'Modify foo' + dvc remove data/foo + cp $DATA_CACHE/bar data/foo + dvc add data/foo -dvc_info 'Reproduce foo1 as default target' -dvc repro -dvc_check_files data/foo1 -if [ "$(cat data/foo1)" != "bar" ]; then - dvc_fail -fi + dvc_info 'Set default target' + dvc config global.target data/foo1 + git commit -am 'Set default target' + + dvc_info 'Reproduce foo1 as default target' + dvc repro + dvc_check_files data/foo1 + if [ "$(cat data/foo1)" != "bar" ]; then + dvc_fail + fi +} + +function test_partial() { + dvc_info "=== Partial repro test" + + dvc_create_repo + + cp code/code.sh code/code1.sh + cp code/code1.sh code/code2.sh + cp code/code2.sh code/code3.sh + git add code + git commit -m "copy code" + + dvc_info "Create repro chain foo -> foo1 -> foo2 -> foo3" + dvc run -d code/code1.sh -d data/foo -o data/foo1 cp data/foo data/foo1 + dvc run -d code/code2.sh -d data/foo1 -o data/foo2 cp data/foo1 data/foo2 + dvc run -d code/code3.sh -d data/foo2 -o data/foo3 cp data/foo2 data/foo3 + + dvc_info "Save original timestamps" + FOO_TS=$(dvc_timestamp data/foo) + FOO1_TS=$(dvc_timestamp data/foo1) + FOO2_TS=$(dvc_timestamp data/foo2) + FOO3_TS=$(dvc_timestamp data/foo3) + + dvc_info "Modify dependency for data/foo1, that will not result in data/foo1 contents being changed" + echo " " >> code/code1.sh + git add code + git commit -m "modify code1.sh" + + dvc_info "Reproduce data/foo3" + dvc repro data/foo3 + + dvc_info "Check timestamps" + if [ "$FOO_TS" != "$(dvc_timestamp data/foo)" ]; then + dvc_error "data/foo timestamp changed" + dvc_fail + fi + + if [ "$FOO1_TS" == "$(dvc_timestamp data/foo1)" ]; then + dvc_error "data/foo1 timestamp did not change" + dvc_fail + fi + + if [ "$FOO2_TS" != "$(dvc_timestamp data/foo2)" ]; then + dvc_error "data/foo2 timestamp changed" + dvc_fail + fi + + if [ "$FOO3_TS" != "$(dvc_timestamp data/foo3)" ]; then + dvc_error "data/foo3 timestamp changed" + dvc_fail + fi +} + +test_generic +test_partial dvc_pass