Exemple #1
0
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
Exemple #2
0
 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
Exemple #3
0
 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
Exemple #4
0
 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)
Exemple #5
0
 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
Exemple #6
0
 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']
Exemple #7
0
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
Exemple #8
0
 def set_nick(self, nick):
     self.data['nick'] = nick
     self.data['mask'] = utils.IrcString(
         '{nick}!{username}@{uuid[0]}'.format(**self.data))