From ade7fed3a8fc4afac4f670ebd926ae128a0c970b Mon Sep 17 00:00:00 2001 From: dave Date: Mon, 11 Feb 2019 09:15:01 -0800 Subject: [PATCH] Misc test fixes --- pyircbot/irccore.py | 2 +- pyircbot/modules/DCC.py | 8 +++++--- pyircbot/modules/NickUser.py | 28 +++++++++++++++++++++++++--- pyircbot/modules/PingResponder.py | 2 +- tests/modules/test_cryptowallet.py | 3 ++- tests/modules/test_nickuser.py | 2 +- tests/test_jsonrpc.py | 7 +++---- 7 files changed, 38 insertions(+), 14 deletions(-) diff --git a/pyircbot/irccore.py b/pyircbot/irccore.py index 8702696..3c8797d 100644 --- a/pyircbot/irccore.py +++ b/pyircbot/irccore.py @@ -78,7 +78,7 @@ class IRCCore(object): family=self.connection_family, local_addr=self.bind_addr) self.fire_hook("_CONNECT") - except (socket.gaierror, ConnectionRefusedError): + except (socket.gaierror, ConnectionRefusedError, OSError): traceback.print_exc() logging.warning("Non-fatal connect error, trying next server...") self.server = (self.server + 1) % len(self.servers) diff --git a/pyircbot/modules/DCC.py b/pyircbot/modules/DCC.py index ed972d0..bb01dcd 100644 --- a/pyircbot/modules/DCC.py +++ b/pyircbot/modules/DCC.py @@ -96,9 +96,8 @@ class RecieveGenerator(object): print("total", total, "expected", self.length) if total != self.length: raise TransferFailedException("Transfer failed: expected {} bytes but got {}".format(self.length, total)) - raise StopIteration() finally: - self.sock.shutdown(socket.SHUT_RDWR) + # self.sock.shutdown(socket.SHUT_RDWR) self.sock.close() @@ -140,8 +139,11 @@ class OfferThread(Thread): clientsocket.shutdown(socket.SHUT_RDWR) clientsocket.close() finally: - self.listener.shutdown(socket.SHUT_RDWR) + # try: + # self.listener.shutdown(socket.SHUT_RDWR) self.listener.close() + # except Exception: + # pass def abort(self): """ diff --git a/pyircbot/modules/NickUser.py b/pyircbot/modules/NickUser.py index 8ba108e..3498742 100755 --- a/pyircbot/modules/NickUser.py +++ b/pyircbot/modules/NickUser.py @@ -50,13 +50,15 @@ class NickUser(ModuleBase): oldpass = attr.getKey(prefix.nick, "password") if oldpass is None: 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: if len(cmd.args) == 2: if cmd.args[0] == oldpass: attr.setKey(prefix.nick, "password", cmd.args[1]) - self.bot.act_PRIVMSG(prefix.nick, ".setpass: Your password has been set to \"%s\"." % - cmd.args[1]) + self.bot.act_PRIVMSG(prefix.nick, + ".setpass: Your password has been set to \"%s\"." % cmd.args[1]) + attr.setKey(prefix.nick, "loggedinfrom", prefix.hostname) else: self.bot.act_PRIVMSG(prefix.nick, ".setpass: Old password incorrect.") else: @@ -89,3 +91,23 @@ class NickUser(ModuleBase): else: attr.setKey(prefix.nick, "loggedinfrom", None) 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 diff --git a/pyircbot/modules/PingResponder.py b/pyircbot/modules/PingResponder.py index 5a4d512..9471c5f 100755 --- a/pyircbot/modules/PingResponder.py +++ b/pyircbot/modules/PingResponder.py @@ -22,7 +22,7 @@ class PingResponder(ModuleBase): """Respond to the PING command""" # got a ping? send it right back 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") def resettimer(self, msg, cmd): diff --git a/tests/modules/test_cryptowallet.py b/tests/modules/test_cryptowallet.py index 59c8373..3b681a6 100644 --- a/tests/modules/test_cryptowallet.py +++ b/tests/modules/test_cryptowallet.py @@ -70,8 +70,9 @@ def test_getbal_authed(cryptobot): def test_setup(cryptobot, mynick="chatter"): 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() + # TODO shouldn't need .login here, the setpass does it 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.reset_mock() diff --git a/tests/modules/test_nickuser.py b/tests/modules/test_nickuser.py index de2e256..ff5993f 100644 --- a/tests/modules/test_nickuser.py +++ b/tests/modules/test_nickuser.py @@ -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.reset_mock() 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() diff --git a/tests/test_jsonrpc.py b/tests/test_jsonrpc.py index af47994..a3c7e6a 100644 --- a/tests/test_jsonrpc.py +++ b/tests/test_jsonrpc.py @@ -3,7 +3,6 @@ import pytest from pyircbot import jsonrpc from threading import Thread from random import randint -from socket import SHUT_RDWR from time import sleep @@ -37,7 +36,7 @@ def j1testserver(): Thread(target=server.serve, daemon=True).start() sleep(0.1) # Give the serve() time to set up the serversocket yield (server, port) - server._Server__transport.s.shutdown(SHUT_RDWR) + server._Server__transport.close() @pytest.fixture @@ -48,9 +47,9 @@ def j2testserver(): server.register_function(sample) server.register_instance(_sample(), name="obj") 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) - server._Server__transport.s.shutdown(SHUT_RDWR) + server._Server__transport.close() # Basic functionality