Ejemplo n.º 1
0
def test_CONDA_DEFAULT_ENV(shell):
    shell_vars = _format_vars(shell)
    with TemporaryDirectory(prefix=ENVS_PREFIX, dir=dirname(__file__)) as envs:
        env_dirs = gen_test_env_paths(envs, shell)
        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}"
        {printdefaultenv}
        """).format(envs=envs, env_dirs=env_dirs, **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout.rstrip(), make_win_ok(env_dirs[0]), stderr)

        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}activate" "{env_dirs[1]}"
        {printdefaultenv}
        """).format(envs=envs, env_dirs=env_dirs, **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout.rstrip(), make_win_ok(env_dirs[1]), stderr)

        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[2]}"
        {printdefaultenv}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, '', stderr)

        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}activate" "{env_dirs[2]}"
        {printdefaultenv}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout.rstrip(), make_win_ok(env_dirs[0]), stderr)

        commands = (shell_vars['command_setup'] + """
        {source} {syspath}{binpath}deactivate
        {printdefaultenv}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, '', stderr)

        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}deactivate"
        {printdefaultenv}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, '', stderr)

        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" two args
        {printdefaultenv}
        """).format(envs=envs, **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, '', stderr)

        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" root {nul}
        {printdefaultenv}
        """).format(envs=envs, **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout.rstrip(), ROOT_ENV_NAME, stderr)

        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" root {nul}
        {source} "{syspath}{binpath}deactivate" {nul}
        {printdefaultenv}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, '', stderr)
Ejemplo n.º 2
0
def test_PS1_no_changeps1(shell):  # , bash_profile
    """Ensure that people's PS1 remains unchanged if they have that setting in their RC file."""
    shell_vars = _format_vars(shell)
    with TemporaryDirectory(prefix=ENVS_PREFIX, dir=dirname(__file__)) as envs:
        rc_file = os.path.join(envs, ".condarc")
        with open(rc_file, 'w') as f:
            f.write("changeps1: False\n")
        condarc = "{set_var}CONDARC=%s\n" % rc_file
        commands = (shell_vars['command_setup'] + condarc + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)

        commands = (shell_vars['command_setup'] + condarc + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}activate" "{env_dirs[1]}"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)

        commands = (shell_vars['command_setup'] + condarc + """
        {source} "{syspath}{binpath}activate" "{env_dirs[2]}"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)

        commands = (shell_vars['command_setup'] + condarc + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}activate" "{env_dirs[2]}"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)

        commands = (shell_vars['command_setup'] + condarc + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}deactivate"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)

        commands = (shell_vars['command_setup'] + condarc + """
        {source} "{syspath}{binpath}activate" two args
        {printps1}
        """).format(envs=envs, **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)
Ejemplo n.º 3
0
def test_PS1_changeps1(shell):  # , bash_profile
    shell_vars = _format_vars(shell)
    with TemporaryDirectory(prefix=ENVS_PREFIX, dir=dirname(__file__)) as envs:
        # activate changes PS1 correctly
        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert not stderr
        assert_equals(
            stdout.strip(),
            print_ps1(env_dirs=gen_test_env_paths(envs, shell),
                      raw_ps=shell_vars["raw_ps"],
                      number=0).strip(), stderr)

        # second activate replaces earlier activated env PS1
        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}activate" "{env_dirs[1]}"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, sterr = run_in(commands, shell)
        assert_equals(
            stdout.strip(),
            print_ps1(env_dirs=gen_test_env_paths(envs, shell),
                      raw_ps=shell_vars["raw_ps"],
                      number=1).strip(), stderr)

        # failed activate does not touch raw PS1
        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[2]}"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)

        # ensure that a failed activate does not touch PS1 (envs[3] folders do not exist.)
        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}activate" "{env_dirs[2]}"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(
            stdout.strip(),
            print_ps1(env_dirs=gen_test_env_paths(envs, shell),
                      raw_ps=shell_vars["raw_ps"],
                      number=0).strip(), stderr)

        # deactivate script in activated env returns us to raw PS1
        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" "{env_dirs[0]}" {nul}
        {source} "{syspath}{binpath}deactivate"
        {printps1}
        """).format(envs=envs,
                    env_dirs=gen_test_env_paths(envs, shell),
                    **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)

        # make sure PS1 is unchanged by faulty activate input
        commands = (shell_vars['command_setup'] + """
        {source} "{syspath}{binpath}activate" two args
        {printps1}
        """).format(envs=envs, **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)

        # deactivate doesn't do anything bad to PS1 when no env active to deactivate
        commands = (shell_vars['command_setup'] + """
        {source} {syspath}{binpath}deactivate
        {printps1}
        """).format(envs=envs, **shell_vars)
        stdout, stderr = run_in(commands, shell)
        assert_equals(stdout, shell_vars['raw_ps'], stderr)
Ejemplo n.º 4
0
def test_CONDA_DEFAULT_ENV():
    for shell in shells:
        with TemporaryDirectory(prefix='envs', dir=dirname(__file__)) as envs:
            activate, deactivate, conda = _write_entry_points(envs)
            commands = (command_setup + """
            source {activate} {envs}/test1
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '{envs}/test1'.format(envs=envs)
            assert stderr == 'discarding {syspath} from PATH\nprepending {envs}/test1/bin to PATH\n'.format(
                envs=envs, syspath=syspath)

            commands = (command_setup + """
            source {activate} {envs}/test1 2> /dev/null
            source {activate} {envs}/test2
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '{envs}/test2'.format(envs=envs)
            assert stderr == 'discarding {envs}/test1/bin from PATH\nprepending {envs}/test2/bin to PATH\n'.format(
                envs=envs)

            commands = (command_setup + """
            source {activate} {envs}/test3
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == ''
            assert stderr == 'Error: no such directory: {envs}/test3/bin\n'.format(
                envs=envs)

            commands = (command_setup + """
            source {activate} {envs}/test1 2> /dev/null
            source {activate} {envs}/test3
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '{envs}/test1'.format(envs=envs)
            assert stderr == 'Error: no such directory: {envs}/test3/bin\n'.format(
                envs=envs)

            commands = (command_setup + """
            source {deactivate}
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, deactivate=deactivate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == ''
            assert stderr == 'Error: No environment to deactivate\n'

            commands = (command_setup + """
            source {activate} {envs}/test1 2> /dev/null
            source {deactivate}
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == ''
            assert stderr == 'discarding {envs}/test1/bin from PATH\n'.format(
                envs=envs)

            commands = (command_setup + """
            source {activate}
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == ''
            assert stderr == 'Error: no environment provided.\n'

            commands = (command_setup + """
            source {activate} two args
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == ''
            assert stderr == 'Error: did not expect more than one argument.\n'

            commands = (command_setup + """
            source {deactivate} test
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == ''
            assert stderr == 'Error: too many arguments.\n'

            commands = (command_setup + """
            source {deactivate} {envs}/test
            printf "$CONDA_DEFAULT_ENV"
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == ''
            assert stderr == 'Error: too many arguments.\n'
Ejemplo n.º 5
0
def test_PS1_no_changeps1():
    for shell in shells:
        with TemporaryDirectory(prefix='envs', dir=dirname(__file__)) as envs:
            activate, deactivate, conda = _write_entry_points(envs)
            with open(join(envs, '.condarc'), 'w') as f:
                f.write("""\
changeps1: no
""")
            condarc = """
            CONDARC="{envs}/.condarc"
            """
            commands = (command_setup + condarc + """
            source {activate} {envs}/test1
            printf $PS1
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'discarding {syspath} from PATH\nprepending {envs}/test1/bin to PATH\n'.format(
                envs=envs, syspath=syspath)

            commands = (command_setup + condarc + """
            source {activate} {envs}/test1 2> /dev/null
            source {activate} {envs}/test2
            printf $PS1
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'discarding {envs}/test1/bin from PATH\nprepending {envs}/test2/bin to PATH\n'.format(
                envs=envs)

            commands = (command_setup + condarc + """
            source {activate} {envs}/test3
            printf $PS1
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'Error: no such directory: {envs}/test3/bin\n'.format(
                envs=envs)

            commands = (command_setup + condarc + """
            source {activate} {envs}/test1 2> /dev/null
            source {activate} {envs}/test3
            printf $PS1
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'Error: no such directory: {envs}/test3/bin\n'.format(
                envs=envs)

            commands = (command_setup + condarc + """
            source {deactivate}
            printf $PS1
            """).format(envs=envs, deactivate=deactivate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'Error: No environment to deactivate\n'

            commands = (command_setup + condarc + """
            source {activate} {envs}/test1 2> /dev/null
            source {deactivate}
            printf $PS1
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'discarding {envs}/test1/bin from PATH\n'.format(
                envs=envs)

            commands = (command_setup + condarc + """
            source {activate}
            printf $PS1
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'Error: no environment provided.\n'

            commands = (command_setup + condarc + """
            source {activate} two args
            printf $PS1
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'Error: did not expect more than one argument.\n'

            commands = (command_setup + condarc + """
            source {deactivate} test
            printf $PS1
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'Error: too many arguments.\n'

            commands = (command_setup + condarc + """
            source {deactivate} {envs}/test
            printf $PS1
            """).format(envs=envs, deactivate=deactivate, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert stdout == '$'
            assert stderr == 'Error: too many arguments.\n'
Ejemplo n.º 6
0
def test_activate_symlinking():
    for shell in shells:
        with TemporaryDirectory(prefix='envs', dir=dirname(__file__)) as envs:
            activate, deactivate, conda = _write_entry_points(envs)
            commands = (command_setup + """
            source {activate} {envs}/test1
            """).format(envs=envs, activate=activate)

            stdout, stderr = run_in(commands, shell)
            assert not stdout
            assert stderr == 'discarding {syspath} from PATH\nprepending {envs}/test1/bin to PATH\n'.format(
                envs=envs, syspath=syspath)
            for f in ['conda', 'activate', 'deactivate']:
                assert os.path.lexists('{envs}/test1/bin/{f}'.format(envs=envs,
                                                                     f=f))
                assert os.path.exists('{envs}/test1/bin/{f}'.format(envs=envs,
                                                                    f=f))
                s = os.lstat('{envs}/test1/bin/{f}'.format(envs=envs, f=f))
                assert stat.S_ISLNK(s.st_mode)
                assert os.readlink('{envs}/test1/bin/{f}'.format(
                    envs=envs, f=f)) == '{syspath}/{f}'.format(syspath=syspath,
                                                               f=f)

            try:
                # Test activate when there are no write permissions in the
                # env. There are two cases:
                # - conda/deactivate/activate are already symlinked
                commands = (command_setup + """
                mkdir -p {envs}/test3/bin
                ln -s {activate} {envs}/test3/bin/activate
                ln -s {deactivate} {envs}/test3/bin/deactivate
                ln -s {conda} {envs}/test3/bin/conda
                chmod 555 {envs}/test3/bin
                source {activate} {envs}/test3
                """).format(envs=envs,
                            activate=activate,
                            deactivate=deactivate,
                            conda=conda)
                stdout, stderr = run_in(commands, shell)
                assert not stdout
                assert stderr == 'discarding {syspath} from PATH\nprepending {envs}/test3/bin to PATH\n'.format(
                    envs=envs, syspath=syspath)

                # Make sure it stays the same
                for f in ['conda', 'activate', 'deactivate']:
                    assert os.path.lexists('{envs}/test3/bin/{f}'.format(
                        envs=envs, f=f))
                    assert os.path.exists('{envs}/test3/bin/{f}'.format(
                        envs=envs, f=f))
                    s = os.lstat('{envs}/test3/bin/{f}'.format(envs=envs, f=f))
                    assert stat.S_ISLNK(s.st_mode)
                    assert os.readlink('{envs}/test3/bin/{f}'.format(
                        envs=envs, f=f)) == '{f}'.format(f=locals()[f])

                # - conda/deactivate/activate are not symlinked. In this case,
                # activate should fail
                commands = (command_setup + """
                mkdir -p {envs}/test4/bin
                chmod 555 {envs}/test4/bin
                source {activate} {envs}/test4
                echo $PATH
                echo $CONDA_DEFAULT_ENV
                """).format(envs=envs,
                            activate=activate,
                            deactivate=deactivate,
                            conda=conda)

                stdout, stderr = run_in(commands, shell)
                assert stdout == (
                    '{ROOTPATH}\n'  # PATH
                    '\n'  # CONDA_DEFAULT_ENV
                ).format(ROOTPATH=ROOTPATH)
                assert stderr == (
                    'Cannot activate environment {envs}/test4, '
                    'do not have write access to write conda symlink\n'
                ).format(envs=envs)

            finally:
                # Change the permissions back so that we can delete the directory
                run_in('chmod 777 {envs}/test3/bin'.format(envs=envs), shell)
                run_in('chmod 777 {envs}/test4/bin'.format(envs=envs), shell)