Ejemplo n.º 1
0
def test_fatal_if_no_storage_and_no_sqlite_file(tmpdir, use_option):
    from devpi_server.init import init
    from devpi_server.main import _main, get_pluginmanager

    class Plugin:
        @hookimpl
        def devpiserver_cmdline_run(self, xom):
            return 1

    pm = get_pluginmanager()
    pm.register(Plugin())
    if use_option:
        _main(argv=["devpi-server", "--init", "--serverdir",
                    str(tmpdir)],
              pluginmanager=pm)
    else:
        init(argv=["devpi-init", "--serverdir", str(tmpdir)], pluginmanager=pm)
    _main(argv=["devpi-server", "--serverdir", str(tmpdir)], pluginmanager=pm)
    tmpdir.join('.sqlite').remove()
    with pytest.raises(Fatal) as excinfo:
        _main(argv=["devpi-server", "--serverdir",
                    str(tmpdir)],
              pluginmanager=pm)
    assert "you first need to run devpi-init or devpi-import" in str(
        excinfo.value)
Ejemplo n.º 2
0
def test_root_passwd_hash_option(gentmp, makexom, storage_info):
    from devpi_server.init import init
    # by default the password is empty
    serverdir = gentmp()
    argv = ["devpi-init", "--serverdir", serverdir]
    if storage_info["name"] != "sqlite":
        argv.append("--storage=%s" % storage_info["name"])
    init(argv=argv)
    xom = makexom(opts=("--serverdir", serverdir))
    with xom.keyfs.transaction(write=False):
        user = xom.model.get_user('root')
        assert user.validate("")
        assert not user.validate("foobar")
    # the password hash can be directly set from the command line
    serverdir = gentmp()
    argv = [
        "devpi-init", "--serverdir", serverdir, "--root-passwd-hash",
        "$argon2i$v=19$m=102400,t=2,p=8$j9G6V8o5B0Co9f4fQ6gVIg$WzcG2C5Bv0LwtzPWeBcz0g"
    ]
    if storage_info["name"] != "sqlite":
        argv.append("--storage=%s" % storage_info["name"])
    init(argv=argv)
    xom = makexom(opts=("--serverdir", serverdir))
    # we allow writes, because the hash might be upgraded
    # this happend after passlib 1.7.2 made argon2id the default
    with xom.keyfs.transaction(write=True):
        user = xom.model.get_user('root')
        assert not user.validate("")
        assert user.validate("foobar")
Ejemplo n.º 3
0
def test_no_root_pypi_option(gentmp, makexom, storage_info):
    from devpi_server.init import init
    serverdir = gentmp()
    argv = ["devpi-init", "--serverdir", serverdir, "--no-root-pypi"]
    if storage_info["name"] != "sqlite":
        argv.append("--storage=%s" % storage_info["name"])
    init(argv=argv)
    xom = makexom(opts=("--serverdir", serverdir))
    with xom.keyfs.transaction(write=False):
        stage = xom.model.getstage('root/pypi')
        assert stage is None
Ejemplo n.º 4
0
def test_run_commands_called(tmpdir, use_option):
    from devpi_server.init import init
    from devpi_server.main import _main, get_pluginmanager
    l = []

    class Plugin:
        @hookimpl
        def devpiserver_cmdline_run(self, xom):
            l.append(xom)
            return 1

    pm = get_pluginmanager()
    pm.register(Plugin())
    if use_option:
        result = _main(
            argv=["devpi-server", "--init", "--serverdir",
                  str(tmpdir)],
            pluginmanager=pm)
    else:
        result = init(argv=["devpi-init", "--serverdir",
                            str(tmpdir)],
                      pluginmanager=pm)
    result = _main(argv=["devpi-server", "--serverdir",
                         str(tmpdir)],
                   pluginmanager=pm)
    assert result == 1
    assert len(l) == 1
    assert isinstance(l[0], XOM)
Ejemplo n.º 5
0
def test_export_import(tmpdir, capfd, monkeypatch, use_option):
    from devpi_server.importexport import import_
    from devpi_server.init import init
    from devpi_server.main import main
    monkeypatch.setattr("devpi_server.main.configure_logging", lambda a: None)
    clean = tmpdir.join("clean").ensure(dir=True)
    if use_option:
        ret = main(
            argv=["devpi-server", "--init", "--serverdir", clean.strpath])
    else:
        ret = init(argv=["devpi-init", "--serverdir", clean.strpath])
    assert ret == 0
    export = tmpdir.join("export")
    ret = main([
        "devpi-server", "--serverdir", clean.strpath, "--export",
        export.strpath
    ])
    assert ret == 0
    import_dir = tmpdir.join("import")
    if use_option:
        ret = main(argv=[
            "devpi-server", "--serverdir", import_dir.strpath, "--no-events",
            "--import", export.strpath
        ])
    else:
        ret = import_(argv=[
            "devpi-import", "--serverdir", import_dir.strpath, "--no-events",
            export.strpath
        ])
    assert ret == 0
    out, err = capfd.readouterr()
    assert os.listdir(clean.strpath) == os.listdir(import_dir.strpath)
    assert 'import_all: importing finished' in out
    assert err == ''
Ejemplo n.º 6
0
def test_main_starts_server_if_run_commands_returns_none(tmpdir):
    from devpi_server.init import init
    from devpi_server.main import _main, get_pluginmanager
    l = []

    class Plugin:
        @hookimpl
        def devpiserver_cmdline_run(self, xom):
            l.append(xom)

    pm = get_pluginmanager()
    pm.register(Plugin())
    init(argv=["devpi-init", "--serverdir", str(tmpdir)], pluginmanager=pm)
    with pytest.raises(ZeroDivisionError):
        _main(argv=["devpi-server", "--serverdir",
                    str(tmpdir)],
              pluginmanager=pm)
    assert len(l) == 1
    assert isinstance(l[0], XOM)
Ejemplo n.º 7
0
def test_root_passwd_option(gentmp, makexom, storage_info):
    from devpi_server.init import init
    # by default the password is empty
    serverdir = gentmp()
    argv = ["devpi-init", "--serverdir", serverdir]
    if storage_info["name"] != "sqlite":
        argv.append("--storage=%s" % storage_info["name"])
    init(argv=argv)
    xom = makexom(opts=("--serverdir", serverdir))
    with xom.keyfs.transaction(write=False):
        user = xom.model.get_user('root')
        assert user.validate("")
        assert not user.validate("foobar")
    # the password can be set from the command line
    serverdir = gentmp()
    argv = ["devpi-init", "--serverdir", serverdir, "--root-passwd", "foobar"]
    if storage_info["name"] != "sqlite":
        argv.append("--storage=%s" % storage_info["name"])
    init(argv=argv)
    xom = makexom(opts=("--serverdir", serverdir))
    with xom.keyfs.transaction(write=False):
        user = xom.model.get_user('root')
        assert not user.validate("")
        assert user.validate("foobar")
Ejemplo n.º 8
0
def test_export_import_no_root_pypi(tmpdir, capfd, monkeypatch):
    from devpi_server.importexport import export
    from devpi_server.importexport import import_
    from devpi_server.init import init
    monkeypatch.setattr("devpi_server.main.configure_logging", lambda a: None)
    clean = tmpdir.join("clean").ensure(dir=True)
    ret = init(
        argv=["devpi-init", "--serverdir", clean.strpath, "--no-root-pypi"])
    assert ret == 0
    export_dir = tmpdir.join("export")
    ret = export(argv=[
        "devpi-server", "--serverdir", clean.strpath, export_dir.strpath
    ])
    assert ret == 0
    # first we test regular import
    import_dir = tmpdir.join("import")
    ret = import_(argv=[
        "devpi-import", "--serverdir", import_dir.strpath, "--no-events",
        export_dir.strpath
    ])
    assert ret == 0
    out, err = capfd.readouterr()
    assert os.listdir(clean.strpath) == os.listdir(import_dir.strpath)
    assert 'import_all: importing finished' in out
    assert err == ''
    # now we add --no-root-pypi
    import_dir.remove()
    ret = import_(argv=[
        "devpi-import", "--serverdir", import_dir.strpath, "--no-events",
        "--no-root-pypi", export_dir.strpath
    ])
    assert ret == 0
    out, err = capfd.readouterr()
    assert os.listdir(clean.strpath) == os.listdir(import_dir.strpath)
    assert 'import_all: importing finished' in out
    assert err == ''