Misc test fixes

This commit is contained in:
dave 2019-02-11 09:15:01 -08:00
parent a00a5d9f9c
commit ade7fed3a8
7 changed files with 38 additions and 14 deletions

View File

@ -78,7 +78,7 @@ class IRCCore(object):
family=self.connection_family, family=self.connection_family,
local_addr=self.bind_addr) local_addr=self.bind_addr)
self.fire_hook("_CONNECT") self.fire_hook("_CONNECT")
except (socket.gaierror, ConnectionRefusedError): except (socket.gaierror, ConnectionRefusedError, OSError):
traceback.print_exc() traceback.print_exc()
logging.warning("Non-fatal connect error, trying next server...") logging.warning("Non-fatal connect error, trying next server...")
self.server = (self.server + 1) % len(self.servers) self.server = (self.server + 1) % len(self.servers)

View File

@ -96,9 +96,8 @@ class RecieveGenerator(object):
print("total", total, "expected", self.length) print("total", total, "expected", self.length)
if total != self.length: if total != self.length:
raise TransferFailedException("Transfer failed: expected {} bytes but got {}".format(self.length, total)) raise TransferFailedException("Transfer failed: expected {} bytes but got {}".format(self.length, total))
raise StopIteration()
finally: finally:
self.sock.shutdown(socket.SHUT_RDWR) # self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close() self.sock.close()
@ -140,8 +139,11 @@ class OfferThread(Thread):
clientsocket.shutdown(socket.SHUT_RDWR) clientsocket.shutdown(socket.SHUT_RDWR)
clientsocket.close() clientsocket.close()
finally: finally:
self.listener.shutdown(socket.SHUT_RDWR) # try:
# self.listener.shutdown(socket.SHUT_RDWR)
self.listener.close() self.listener.close()
# except Exception:
# pass
def abort(self): def abort(self):
""" """

View File

@ -50,13 +50,15 @@ class NickUser(ModuleBase):
oldpass = attr.getKey(prefix.nick, "password") oldpass = attr.getKey(prefix.nick, "password")
if oldpass is None: if oldpass is None:
attr.setKey(prefix.nick, "password", cmd.args[0]) attr.setKey(prefix.nick, "password", cmd.args[0])
self.bot.act_PRIVMSG(prefix.nick, ".setpass: Your password has been set to \"%s\"." % cmd.args[0]) self.bot.act_PRIVMSG(prefix.nick, ".setpass: You've been logged in and "
"your password has been set to \"%s\"." % cmd.args[0])
else: else:
if len(cmd.args) == 2: if len(cmd.args) == 2:
if cmd.args[0] == oldpass: if cmd.args[0] == oldpass:
attr.setKey(prefix.nick, "password", cmd.args[1]) attr.setKey(prefix.nick, "password", cmd.args[1])
self.bot.act_PRIVMSG(prefix.nick, ".setpass: Your password has been set to \"%s\"." % self.bot.act_PRIVMSG(prefix.nick,
cmd.args[1]) ".setpass: Your password has been set to \"%s\"." % cmd.args[1])
attr.setKey(prefix.nick, "loggedinfrom", prefix.hostname)
else: else:
self.bot.act_PRIVMSG(prefix.nick, ".setpass: Old password incorrect.") self.bot.act_PRIVMSG(prefix.nick, ".setpass: Old password incorrect.")
else: else:
@ -89,3 +91,23 @@ class NickUser(ModuleBase):
else: else:
attr.setKey(prefix.nick, "loggedinfrom", None) attr.setKey(prefix.nick, "loggedinfrom", None)
self.bot.act_PRIVMSG(prefix.nick, ".logout: You have been logged out.") self.bot.act_PRIVMSG(prefix.nick, ".logout: You have been logged out.")
# Decorator for methods that require login
# Assumes your args matches the same format that @command(...) expects
#TODO better docs
class protected(object):
def __init__(self, message=None):
self.message = message or "{}: you need to .login to do that"
def __call__(self, func):
def wrapper(*args, **kwargs):
module, message, command = args
login = module.bot.getBestModuleForService("login")
if not login.check(message.prefix.nick, message.prefix.hostname):
module.bot.act_PRIVMSG(message.args[0], self.message.format(message.prefix.nick))
return
func(*args, **kwargs)
return wrapper

View File

@ -22,7 +22,7 @@ class PingResponder(ModuleBase):
"""Respond to the PING command""" """Respond to the PING command"""
# got a ping? send it right back # got a ping? send it right back
self.bot.act_PONG(msg.trailing) self.bot.act_PONG(msg.trailing)
self.log.info("%s Responded to a ping: %s" % (self.bot.get_nick(), msg.trailing)) self.log.debug("%s Responded to a ping: %s" % (self.bot.get_nick(), msg.trailing))
@hook("_RECV", "_SEND") @hook("_RECV", "_SEND")
def resettimer(self, msg, cmd): def resettimer(self, msg, cmd):

View File

@ -70,8 +70,9 @@ def test_getbal_authed(cryptobot):
def test_setup(cryptobot, mynick="chatter"): def test_setup(cryptobot, mynick="chatter"):
pm(cryptobot, ".setpass foobar", nick=mynick) pm(cryptobot, ".setpass foobar", nick=mynick)
cryptobot.act_PRIVMSG.assert_called_once_with(mynick, '.setpass: Your password has been set to "foobar".') cryptobot.act_PRIVMSG.assert_called_once_with(mynick, '.setpass: You\'ve been logged in and your password has been set to "foobar".')
cryptobot.act_PRIVMSG.reset_mock() cryptobot.act_PRIVMSG.reset_mock()
# TODO shouldn't need .login here, the setpass does it
pm(cryptobot, ".login foobar", nick=mynick) pm(cryptobot, ".login foobar", nick=mynick)
cryptobot.act_PRIVMSG.assert_called_once_with(mynick, '.login: You have been logged in from: cia.gov') cryptobot.act_PRIVMSG.assert_called_once_with(mynick, '.login: You have been logged in from: cia.gov')
cryptobot.act_PRIVMSG.reset_mock() cryptobot.act_PRIVMSG.reset_mock()

View File

@ -36,7 +36,7 @@ def test_register(nickbot):
nickbot.act_PRIVMSG.assert_called_once_with('chatter', '.setpass: usage: ".setpass newpass" or ".setpass oldpass newpass"') nickbot.act_PRIVMSG.assert_called_once_with('chatter', '.setpass: usage: ".setpass newpass" or ".setpass oldpass newpass"')
nickbot.act_PRIVMSG.reset_mock() nickbot.act_PRIVMSG.reset_mock()
pm(nickbot, ".setpass foobar") pm(nickbot, ".setpass foobar")
nickbot.act_PRIVMSG.assert_called_once_with('chatter', '.setpass: Your password has been set to "foobar".') nickbot.act_PRIVMSG.assert_called_once_with('chatter', '.setpass: You\'ve been logged in and your password has been set to "foobar".')
nickbot.act_PRIVMSG.reset_mock() nickbot.act_PRIVMSG.reset_mock()

View File

@ -3,7 +3,6 @@ import pytest
from pyircbot import jsonrpc from pyircbot import jsonrpc
from threading import Thread from threading import Thread
from random import randint from random import randint
from socket import SHUT_RDWR
from time import sleep from time import sleep
@ -37,7 +36,7 @@ def j1testserver():
Thread(target=server.serve, daemon=True).start() Thread(target=server.serve, daemon=True).start()
sleep(0.1) # Give the serve() time to set up the serversocket sleep(0.1) # Give the serve() time to set up the serversocket
yield (server, port) yield (server, port)
server._Server__transport.s.shutdown(SHUT_RDWR) server._Server__transport.close()
@pytest.fixture @pytest.fixture
@ -48,9 +47,9 @@ def j2testserver():
server.register_function(sample) server.register_function(sample)
server.register_instance(_sample(), name="obj") server.register_instance(_sample(), name="obj")
Thread(target=server.serve, daemon=True).start() Thread(target=server.serve, daemon=True).start()
sleep(0.1) # Give the serve() time to set up the serversocket sleep(0.2) # Give the serve() time to set up the serversocket
yield (server, port) yield (server, port)
server._Server__transport.s.shutdown(SHUT_RDWR) server._Server__transport.close()
# Basic functionality # Basic functionality