def test_invalid_user(binddn, bindpwdfile):
    user = '******'
    args = univention_lastbind.parse_args(
        ['--user', user, '--binddn', binddn, '--bindpwdfile', bindpwdfile])
    with pytest.raises(univention_lastbind.ScriptError) as excinfo:
        univention_lastbind.main(args)
    assert 'The provided user "%s" could not be found' % (user, ) in str(
        excinfo.value)
def test_main_single_server(activate_lastbind, binddn, bindpwdfile, testudm,
                            readudm):
    o = readudm.obj_by_dn(testudm.create_user()[0])
    assert o.props.lastbind is None
    timestamp = bind_for_timestamp(o.dn)
    assert timestamp is not None
    args = univention_lastbind.parse_args(
        ['--binddn', binddn, '--bindpwdfile', bindpwdfile, '--user', o.dn])
    univention_lastbind.main(args)
    o.reload()
    assert o.props.lastbind == timestamp
def test_tracebacks(binddn, failbinddn, bindpwdfile, failbindpwdfile, ucr):
    args = univention_lastbind.parse_args(
        ['--user', 'foo', '--binddn', binddn])
    with pytest.raises(univention_lastbind.ScriptError) as excinfo:
        univention_lastbind.main(args)
    assert '"binddn" provided but not "bindpwdfile".' in str(excinfo.value)

    args = univention_lastbind.parse_args([
        '--user', 'foo', '--binddn', binddn, '--bindpwdfile', failbindpwdfile
    ])
    with pytest.raises(univention_lastbind.ScriptError) as excinfo:
        univention_lastbind.main(args)
    assert 'Could not open "bindpwdfile" "%s"' % (failbindpwdfile) in str(
        excinfo.value)

    args = univention_lastbind.parse_args([
        '--user', 'foo', '--binddn', failbinddn, '--bindpwdfile', bindpwdfile
    ])
    with pytest.raises(univention_lastbind.ScriptError) as excinfo:
        univention_lastbind.main(args)
    assert 'Could not connect to server "%s" with provided "binddn" "%s" and "bindpwdfile" "%s"' % (
        ucr.get('ldap/server/name'), failbinddn, bindpwdfile)
def test_main_multi_server(activate_lastbind, binddn, bindpwdfile, testudm,
                           readudm, other_server):
    assert other_server is not None
    o = readudm.obj_by_dn(testudm.create_user()[0])
    assert o.props.lastbind is None
    local_timestamp = bind_for_timestamp(o.dn)
    assert local_timestamp is not None
    time.sleep(2)
    other_timestamp = bind_for_timestamp(o.dn, other_server.props.fqdn)
    assert other_timestamp is not None
    youngest_timestamp = max(local_timestamp, other_timestamp)
    assert youngest_timestamp is not None
    args = univention_lastbind.parse_args(
        ['--binddn', binddn, '--bindpwdfile', bindpwdfile, '--user', o.dn])
    univention_lastbind.main(args)
    o.reload()
    assert o.props.lastbind == youngest_timestamp
def test_main_not_enough_arguments():
    args = univention_lastbind.parse_args([])
    with pytest.raises(univention_lastbind.ScriptError) as excinfo:
        univention_lastbind.main(args)
    assert 'Provide either --user USER or --allusers.' in str(excinfo.value)