You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.0 KiB
67 lines
2.0 KiB
import pytest |
|
from tests.lib import * # NOQA - fixtures |
|
from time import sleep, time |
|
from pyircbot import IRCCore |
|
import logging |
|
|
|
|
|
logging.getLogger().setLevel(logging.DEBUG) |
|
|
|
|
|
def wait_until(server, channel, nick, func, timeout): |
|
start = time() |
|
while time() < start + timeout: |
|
v = func() |
|
if v: |
|
return v |
|
sleep(0.02) |
|
raise Exception("Function {} did not settle after {}s".format(func, timeout)) |
|
|
|
|
|
def wait_until_joined(server, channel, nick, timeout=5.0): |
|
def in_ch(): |
|
if channel in server.channels: |
|
members = [u.nickname for u in server.channels[channel].members] |
|
if nick in members: |
|
return members |
|
return wait_until(server, channel, nick, in_ch, timeout=timeout) |
|
|
|
|
|
def wait_until_absent(server, channel, nick, timeout=5.0): |
|
def not_in_ch(): |
|
if channel not in server.channels: |
|
return True |
|
members = [u.nickname for u in server.channels[channel].members] |
|
if nick not in members: |
|
return True |
|
return wait_until(server, channel, nick, not_in_ch, timeout=timeout) |
|
|
|
|
|
def test_connect_and_join(livebot): |
|
port, server, bot, bot_t, channel, nick = livebot |
|
bot_t.start() |
|
assert nick in wait_until_joined(server, channel, nick) |
|
|
|
|
|
@pytest.mark.slow |
|
def test_hop_to_next_server(livebot): |
|
port, server, bot, bot_t, channel, nick = livebot |
|
bot.irc.servers = [["localhost", bot.irc.servers[0][1] + 1], bot.irc.servers[0]] # bad port, con refused on 1st srv |
|
bot_t.start() |
|
assert nick in wait_until_joined(server, channel, nick) |
|
|
|
|
|
@pytest.mark.slow |
|
def test_quit_reconnect(livebot): |
|
port, server, bot, bot_t, channel, nick = livebot |
|
bot.irc.reconnect_delay = 0.1 |
|
bot_t.start() |
|
wait_until_joined(server, channel, nick) |
|
bot.act_QUIT("quitting") |
|
wait_until_absent(server, channel, nick) |
|
assert nick in wait_until_joined(server, channel, nick) |
|
|
|
|
|
def test_bs(): |
|
IRCCore.fulltrace() |
|
IRCCore.trace()
|
|
|