class DCCTestCase(BotTestCase): dmask = utils.IrcString('gawel@gawel!127.0.0.1') def callDCCFTU(self, *args, **kwargs): bot = self.callFTU() self.future = asyncio.Future(loop=self.loop) bot.protocol.transport.get_extra_info = get_extra_info self.manager = manager = bot.dcc self.server = manager.create(*args, **kwargs) self.server.ready.add_done_callback(self.created) def createFiles(self): self.wd = tempfile.mkdtemp(prefix='irc3dcc') self.addCleanup(shutil.rmtree, self.wd) self.dst = os.path.join(self.wd, 'dst') self.src = os.path.join(self.wd, 'src') with open(self.src, 'wb') as fd: fd.write(('start%ssend' % ('---' * (1024 * 1024))).encode('ascii')) def assertFileSent(self): getsize = os.path.getsize assert getsize(self.dst), getsize(self.src) assert getsize(self.dst), getsize(self.src) with open(self.src, 'rb') as fd: src = fd.read() with open(self.dst, 'rb') as fd: dest = fd.read() assert src == dest
def process_results(self, results=None, **value): """take results list of all events and return first dict""" for res in results: if 'mask' in res: res['mask'] = utils.IrcString(res['mask']) value['success'] = res.pop('retcode', None) != '486' value.update(res) return value
def process_results(self, results=None, **value): for res in results: if 'retcode' not in res: res['mask'] = utils.IrcString( '{nick}!{user}@{host}'.format(**res)) value.update(res) value['success'] = value.get('retcode') == '315' return value
def created(self, f): self.client = self.manager.create('get', utils.IrcString('gawel!gawel@host'), host='127.0.0.1', port=self.server.port, idle_timeout=10, filepath=self.dst) self.client.closed.add_done_callback(self.future.set_result)
def process_results(self, results=None, **value): users = [] for res in results: if 'retcode' in res: value.update(res) else: res['mask'] = utils.IrcString( '{nick}!{user}@{host}'.format(**res)) users.append(res) value['users'] = users value['success'] = value.get('retcode') == '315' return value
def test_async_plugin(self): bot = self.callFTU(nick='foo', loop=asyncio.new_event_loop()) bot.include('async_command') plugin = bot.get_plugin(command.Commands) mask = utils.IrcString('*****@*****.**') res = plugin.on_command('get', mask, mask.nick, data='') assert isinstance(res, asyncio.Task) res2 = plugin.on_command('get', mask, mask.nick, data='') assert res2 is None plugin.on_command('put', mask, mask.nick, data='xx yy') bot.loop.run_until_complete(res) assert res.result() == ['xx', 'yy']
class TestChat(BotTestCase): config = dict(includes=['irc3.plugins.dcc'], dcc={'ip': '127.0.0.1'}) mask = utils.IrcString('gawel@gawel!bearstech.com') dmask = utils.IrcString('gawel@gawel!127.0.0.1') def callDCCFTU(self, *args, **kwargs): self.bot = self.callFTU() self.bot.protocol.transport.get_extra_info = get_extra_info self.bot.dispatch(':%s PRIVMSG irc3 :!chat' % self.mask) self.future = asyncio.Future(loop=self.loop) self.loop.call_later(.1, self.created) def created(self): servers = self.bot.dcc.connections['chat']['masks'][self.mask] self.server = list(servers.values())[0] print(self.server) self.client = self.bot.dcc.create('chat', self.dmask, host='127.0.0.1', port=self.server.port) self.client.ready.add_done_callback(chat_ready) self.client.closed.add_done_callback(self.future.set_result) def test_create(self): self.callDCCFTU() self.bot.include('irc3.plugins.dcc') self.bot.include(__name__) self.loop.run_until_complete(self.future) proto = self.client assert proto.transport is not None info = self.bot.dcc.connections['chat']['masks']['gawel'] assert proto not in info.values() assert proto.started.result() is proto assert proto.closed.done() # the timeout message is sent or not regarding python version. # we tolerate both assert len(log['in']) in (5, 6) assert len(log['out']) == 6
def set_nick(self, nick): self.data['nick'] = nick self.data['mask'] = utils.IrcString( '{nick}!{username}@{uuid[0]}'.format(**self.data))