Exemple #1
0
def test_unchanged_stdout(runner, project, capsys, no_lfs_warning):
    """Test detection of unchanged stdout."""
    with capsys.disabled():
        with open("output.txt", "wb") as stdout:
            try:
                old_stdout = sys.stdout
                sys.stdout = stdout
                try:
                    cli.main(args=("run", "echo", "1"), )
                except SystemExit as e:
                    assert e.code in {None, 0}
            finally:
                sys.stdout = old_stdout

    with capsys.disabled():
        with open("output.txt", "wb") as stdout:
            try:
                old_stdout = sys.stdout
                sys.stdout = stdout
                try:
                    cli.main(args=("run", "echo", "1"), )
                except SystemExit as e:
                    # The stdout has not been modified!
                    assert e.code in {None, 1}
            finally:
                sys.stdout = old_stdout
Exemple #2
0
def test_unchanged_stdout(runner, project, capsys):
    """Test detection of unchanged stdout."""
    with capsys.disabled():
        with open('output.txt', 'wb') as stdout:
            try:
                old_stdout = sys.stdout
                sys.stdout = stdout
                try:
                    cli.main(args=('run', 'echo', '1'), )
                except SystemExit as e:
                    assert e.code in {None, 0}
            finally:
                sys.stdout = old_stdout

    with capsys.disabled():
        with open('output.txt', 'wb') as stdout:
            try:
                old_stdout = sys.stdout
                sys.stdout = stdout
                try:
                    cli.main(args=('run', 'echo', '1'), )
                except SystemExit as e:
                    # The stdout has not been modified!
                    assert e.code in {None, 1}
            finally:
                sys.stdout = old_stdout
Exemple #3
0
def test_workflow(runner, project):
    """Test workflow command."""
    result = runner.invoke(cli, ['run', 'touch', 'data.csv'])
    assert 0 == result.exit_code

    with open('counted.txt', 'w') as stdout:
        with contextlib.redirect_stdout(stdout):
            try:
                cli.main(
                    args=('run', 'wc', 'data.csv'),
                    prog_name=runner.get_default_prog_name(cli),
                )
            except SystemExit as e:
                assert e.code in {None, 0}

    result = runner.invoke(
        cli,
        ['workflow', 'create', 'counted.txt', '-o', 'workflow.cwl'],
        catch_exceptions=False,
    )
    assert 0 == result.exit_code

    with open('workflow.cwl', 'r') as f:
        workflow = Workflow.from_cwl(yaml.safe_load(f))
        assert workflow.steps[0].run.startswith('.renku/workflow/')

    # Compare default log and log for a specific file.
    result_default = runner.invoke(cli, ['log'])
    result_arg = runner.invoke(cli, ['log', 'counted.txt'])

    assert 0 == result_default.exit_code
    assert 0 == result_arg.exit_code
    assert result_default.output == result_arg.output
Exemple #4
0
def test_workflow(runner, project):
    """Test workflow command."""
    result = runner.invoke(cli, ["run", "touch", "data.csv"])
    assert 0 == result.exit_code

    with open("counted.txt", "w") as stdout:
        with contextlib.redirect_stdout(stdout):
            try:
                cli.main(
                    args=("run", "wc", "data.csv"),
                    prog_name=runner.get_default_prog_name(cli),
                )
            except SystemExit as e:
                assert e.code in {None, 0}

    result = runner.invoke(
        cli,
        ["workflow", "create", "counted.txt", "-o", "workflow.cwl"],
        catch_exceptions=False,
    )
    assert 0 == result.exit_code
    workflow = parse_cwl("workflow.cwl")
    assert 2 == len(workflow.steps)

    # Compare default log and log for a specific file.
    result_default = runner.invoke(cli, ["log"])
    result_arg = runner.invoke(cli, ["log", "counted.txt"])

    assert 0 == result_default.exit_code
    assert 0 == result_arg.exit_code
    assert result_default.output == result_arg.output
 def generate(args=('update', ), cwd=None, **streams):
     """Generate an output."""
     with capsys.disabled(), Isolation(cwd=cwd, **streams):
         try:
             cli.main(
                 args=args,
                 prog_name=runner.get_default_prog_name(cli),
             )
         except SystemExit as e:
             return 0 if e.code is None else e.code
         except Exception:
             raise
Exemple #6
0
def test_streams_and_args_names(runner, project, capsys):
    """Test streams and conflicting argument names."""
    with capsys.disabled():
        with open('lalala', 'wb') as stdout:
            try:
                old_stdout = sys.stdout
                sys.stdout = stdout
                try:
                    cli.main(args=('run', 'echo', 'lalala'), )
                except SystemExit as e:
                    assert e.code in {None, 0}
            finally:
                sys.stdout = old_stdout

    with open('lalala', 'r') as f:
        assert f.read().strip() == 'lalala'

    result = runner.invoke(cli, ['status'], catch_exceptions=False)
    assert 0 == result.exit_code
Exemple #7
0
def test_streams_and_args_names(runner, project, capsys, no_lfs_warning):
    """Test streams and conflicting argument names."""
    with capsys.disabled():
        with open("lalala", "wb") as stdout:
            try:
                old_stdout = sys.stdout
                sys.stdout = stdout
                try:
                    cli.main(args=("run", "echo", "lalala"), )
                except SystemExit as e:
                    assert e.code in {None, 0}
            finally:
                sys.stdout = old_stdout

    with open("lalala", "r") as f:
        assert f.read().strip() == "lalala"

    result = runner.invoke(cli, ["status"], catch_exceptions=False)
    assert 0 == result.exit_code
Exemple #8
0
def test_status_with_submodules(isolated_runner, monkeypatch):
    """Test status calculation with submodules."""
    runner = isolated_runner

    os.mkdir('foo')
    os.mkdir('bar')

    with open('woop', 'w') as f:
        f.write('woop')

    os.chdir('foo')
    result = runner.invoke(cli, [
        'init', '.', '--template', 'Basic Python Project',
        '--no-external-storage'
    ],
                           catch_exceptions=False)
    assert 0 == result.exit_code

    os.chdir('../bar')
    result = runner.invoke(cli, [
        'init', '.', '--template', 'Basic Python Project',
        '--no-external-storage'
    ],
                           catch_exceptions=False)
    assert 0 == result.exit_code

    os.chdir('../foo')
    with monkeypatch.context() as monkey:
        monkey.setattr(StorageApiMixin, 'storage_installed', False)

        result = runner.invoke(cli, ['dataset', 'add', 'f', '../woop'],
                               catch_exceptions=False)

        assert 1 == result.exit_code
        subprocess.call(['git', 'clean', '-dff'])

    result = runner.invoke(cli, ['-S', 'dataset', 'add', 'f', '../woop'],
                           catch_exceptions=False)
    assert 0 == result.exit_code

    os.chdir('../bar')
    result = runner.invoke(cli,
                           ['-S', 'dataset', 'add', 'b', '../foo/data/f/woop'],
                           catch_exceptions=False)
    assert 0 == result.exit_code

    # Produce a derived data from the imported data.
    with open('woop.wc', 'w') as stdout:
        with contextlib.redirect_stdout(stdout):
            try:
                cli.main(
                    args=('-S', 'run', 'wc', 'data/b/woop'),
                    prog_name=runner.get_default_prog_name(cli),
                )
            except SystemExit as e:
                assert e.code in {None, 0}

    result = runner.invoke(cli, ['status'], catch_exceptions=False)
    assert 0 == result.exit_code

    # Modify the source data.
    os.chdir('../foo')
    with open('data/f/woop', 'w') as f:
        f.write('woop2')

    subprocess.call(['git', 'commit', '-am', 'commiting changes to woop'])

    os.chdir('../bar')
    subprocess.call(['git', 'submodule', 'update', '--rebase', '--remote'])
    subprocess.call(['git', 'commit', '-am', 'update submodule'])

    result = runner.invoke(cli, ['status'], catch_exceptions=False)
    assert 0 != result.exit_code

    # Test relative log output
    cmd = ['--path', '../foo', 'log']
    result = runner.invoke(cli, cmd, catch_exceptions=False)
    assert '../foo/data/f/woop' in result.output
    assert 0 == result.exit_code
Exemple #9
0
def test_streams(runner, project, capsys):
    """Test redirection of std streams."""
    repo = git.Repo('.')

    with open('source.txt', 'w') as source:
        source.write('first,second,third')

    repo.git.add('--all')
    repo.index.commit('Added source.txt')

    with capsys.disabled():
        with open('source.txt', 'rb') as stdin:
            with open('result.txt', 'wb') as stdout:
                try:
                    old_stdin, old_stdout = sys.stdin, sys.stdout
                    sys.stdin, sys.stdout = stdin, stdout
                    try:
                        cli.main(
                            args=('run', 'cut', '-d,', '-f', '2', '-s'),
                            prog_name=runner.get_default_prog_name(cli),
                        )
                    except SystemExit as e:
                        assert e.code in {None, 0}
                finally:
                    sys.stdin, sys.stdout = old_stdin, old_stdout

    with open('result.txt', 'r') as f:
        assert f.read().strip() == 'second'

    result = runner.invoke(cli, ['workflow', 'create', 'result.txt'])
    assert 0 == result.exit_code

    result = runner.invoke(cli, ['status'])
    assert 0 == result.exit_code

    # Check that source.txt is not shown in outputs.
    result = runner.invoke(cli, ['show', 'outputs', 'source.txt'])
    assert 1 == result.exit_code

    result = runner.invoke(cli, ['show', 'outputs'])
    assert 0 == result.exit_code
    assert {
        'result.txt',
    } == set(result.output.strip().split('\n'))

    # Check that source.txt is shown in inputs.
    result = runner.invoke(cli, ['show', 'inputs'])
    assert 0 == result.exit_code
    assert {
        'source.txt',
    } == set(result.output.strip().split('\n'))

    with open('source.txt', 'w') as source:
        source.write('first,second,third,fourth')

    repo.git.add('--all')
    repo.index.commit('Changed source.txt')

    result = runner.invoke(cli, ['status'])
    assert 1 == result.exit_code
    assert 'source.txt' in result.output
Exemple #10
0
def test_status_with_submodules(isolated_runner, monkeypatch, project_init):
    """Test status calculation with submodules."""
    runner = isolated_runner
    data, commands = project_init

    os.mkdir("foo")
    os.mkdir("bar")

    with open("woop", "w") as f:
        f.write("woop")

    os.chdir("foo")
    result = runner.invoke(cli,
                           commands["init"] + commands["id"] +
                           ["--no-external-storage"],
                           commands["confirm"],
                           catch_exceptions=False)
    assert 0 == result.exit_code

    os.chdir("../bar")
    result = runner.invoke(cli,
                           commands["init"] + commands["id"] +
                           ["--no-external-storage"],
                           commands["confirm"],
                           catch_exceptions=False)
    assert 0 == result.exit_code

    os.chdir("../foo")
    with monkeypatch.context() as monkey:
        monkey.setattr(StorageApiMixin, "storage_installed", False)

        result = runner.invoke(cli, ["dataset", "add", "f", "../woop"],
                               catch_exceptions=False)

        assert 1 == result.exit_code
        subprocess.call(["git", "clean", "-dff"])

    result = runner.invoke(cli, ["-S", "dataset", "add", "f", "../woop"],
                           catch_exceptions=False)
    assert 0 == result.exit_code

    os.chdir("../bar")
    result = runner.invoke(cli,
                           ["-S", "dataset", "add", "b", "../foo/data/f/woop"],
                           catch_exceptions=False)
    assert 0 == result.exit_code

    # Produce a derived data from the imported data.
    with open("woop.wc", "w") as stdout:
        with contextlib.redirect_stdout(stdout):
            try:
                cli.main(
                    args=("-S", "run", "wc", "data/b/woop"),
                    prog_name=runner.get_default_prog_name(cli),
                )
            except SystemExit as e:
                assert e.code in {None, 0}

    result = runner.invoke(cli, ["status"], catch_exceptions=False)
    assert 0 == result.exit_code

    # Modify the source data.
    os.chdir("../foo")
    with open("data/f/woop", "w") as f:
        f.write("woop2")

    subprocess.call(["git", "commit", "-am", "commiting changes to woop"])

    os.chdir("../bar")
    subprocess.call(["git", "submodule", "update", "--rebase", "--remote"])
    subprocess.call(["git", "commit", "-am", "update submodule"])

    result = runner.invoke(cli, ["status"], catch_exceptions=False)
    assert 0 != result.exit_code

    # Test relative log output
    cmd = ["--path", "../foo", "log"]
    result = runner.invoke(cli, cmd, catch_exceptions=False)
    assert "../foo/data/f/woop" in result.output
    assert 0 == result.exit_code
Exemple #11
0
def test_streams(runner, project, capsys, no_lfs_warning):
    """Test redirection of std streams."""
    repo = git.Repo(".")

    with open("source.txt", "w") as source:
        source.write("first,second,third")

    repo.git.add("--all")
    repo.index.commit("Added source.txt")

    with capsys.disabled():
        with open("source.txt", "rb") as stdin:
            with open("result.txt", "wb") as stdout:
                try:
                    old_stdin, old_stdout = sys.stdin, sys.stdout
                    sys.stdin, sys.stdout = stdin, stdout
                    try:
                        cli.main(
                            args=("run", "cut", "-d,", "-f", "2", "-s"),
                            prog_name=runner.get_default_prog_name(cli),
                        )
                    except SystemExit as e:
                        assert e.code in {None, 0}
                finally:
                    sys.stdin, sys.stdout = old_stdin, old_stdout

    with open("result.txt", "r") as f:
        assert f.read().strip() == "second"

    result = runner.invoke(cli, ["workflow", "create", "result.txt"])
    assert 0 == result.exit_code

    result = runner.invoke(cli, ["status"])
    assert 0 == result.exit_code

    # Check that source.txt is not shown in outputs.
    result = runner.invoke(cli, ["show", "outputs", "source.txt"])
    assert 1 == result.exit_code

    result = runner.invoke(cli, ["show", "outputs"])
    assert 0 == result.exit_code
    assert {
        "result.txt",
    } == set(result.output.strip().split("\n"))

    # Check that source.txt is shown in inputs.
    result = runner.invoke(cli, ["show", "inputs"])
    assert 0 == result.exit_code
    assert {
        "source.txt",
    } == set(result.output.strip().split("\n"))

    with open("source.txt", "w") as source:
        source.write("first,second,third,fourth")

    repo.git.add("--all")
    repo.index.commit("Changed source.txt")

    result = runner.invoke(cli, ["status"])
    assert 1 == result.exit_code
    assert "source.txt" in result.output