Ejemplo n.º 1
0
 def testFirstCommands(self):
     try:
         originalNick = conf.supybot.nick()
         originalUser = conf.supybot.user()
         originalPassword = conf.supybot.networks.test.password()
         nick = 'nick'
         conf.supybot.nick.setValue(nick)
         user = '******'
         conf.supybot.user.setValue(user)
         expected = [
             ircmsgs.IrcMsg(command='CAP', args=('LS', '302')),
             ircmsgs.nick(nick),
             ircmsgs.user('limnoria', user),
         ]
         irc = irclib.Irc('test')
         msgs = [irc.takeMsg()]
         while msgs[-1] is not None:
             msgs.append(irc.takeMsg())
         msgs.pop()
         self.assertEqual(msgs, expected)
         password = '******'
         conf.supybot.networks.test.password.setValue(password)
         irc = irclib.Irc('test')
         msgs = [irc.takeMsg()]
         while msgs[-1] is not None:
             msgs.append(irc.takeMsg())
         msgs.pop()
         expected.insert(1, ircmsgs.password(password))
         self.assertEqual(msgs, expected)
     finally:
         conf.supybot.nick.setValue(originalNick)
         conf.supybot.user.setValue(originalUser)
         conf.supybot.networks.test.password.setValue(originalPassword)
Ejemplo n.º 2
0
    def testCapNew(self):
        self.irc = irclib.Irc('test')

        self.assertEqual(self.irc.sasl_current_mechanism, None)
        self.assertEqual(self.irc.sasl_next_mechanisms, [])

        self.startCapNegociation(caps='')

        self.endCapNegociation()

        while self.irc.takeMsg():
            pass

        self.irc.feedMsg(ircmsgs.IrcMsg(command='422'))  # ERR_NOMOTD

        m = self.irc.takeMsg()
        self.assertIsNone(m)

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=['*', 'NEW', 'account-notify']))

        m = self.irc.takeMsg()
        self.assertEqual(
            m, ircmsgs.IrcMsg(command='CAP', args=['REQ', 'account-notify']))

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=['*', 'ACK', 'account-notify']))

        self.assertIn('account-notify', self.irc.state.capabilities_ack)
Ejemplo n.º 3
0
    def testFilter(self):
        try:
            conf.supybot.networks.test.sasl.username.setValue('jilles')
            conf.supybot.networks.test.sasl.password.setValue('sesame')
            conf.supybot.networks.test.certfile.setValue('foo')
            self.irc = irclib.Irc('test')
        finally:
            conf.supybot.networks.test.sasl.username.setValue('')
            conf.supybot.networks.test.sasl.password.setValue('')
            conf.supybot.networks.test.certfile.setValue('')
        self.assertEqual(self.irc.sasl_current_mechanism, None)
        self.assertEqual(self.irc.sasl_next_mechanisms, ['external', 'plain'])

        self.startCapNegociation(caps='sasl=foo,plain,bar')

        m = self.irc.takeMsg()
        self.assertEqual(
            m, ircmsgs.IrcMsg(command='AUTHENTICATE', args=('PLAIN', )))

        self.irc.feedMsg(ircmsgs.IrcMsg(command='AUTHENTICATE', args=('+', )))

        m = self.irc.takeMsg()
        self.assertEqual(
            m,
            ircmsgs.IrcMsg(command='AUTHENTICATE',
                           args=('amlsbGVzAGppbGxlcwBzZXNhbWU=', )))

        self.irc.feedMsg(ircmsgs.IrcMsg(command='900', args=('jilles', )))
        self.irc.feedMsg(ircmsgs.IrcMsg(command='903', args=('jilles', )))

        self.endCapNegociation()
Ejemplo n.º 4
0
    def testReqLineLength(self):
        self.irc = irclib.Irc('test')

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.failUnless(m.args == ('LS', '302'),
                        'Expected CAP LS 302, got %r.' % m)

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'NICK', 'Expected NICK, got %r.' % m)

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'USER', 'Expected USER, got %r.' % m)

        self.irc.REQUEST_CAPABILITIES = set(['a' * 400, 'b' * 400])
        caps = ' '.join(self.irc.REQUEST_CAPABILITIES)
        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=('*', 'LS', '*', 'a' * 400)))
        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=('*', 'LS', 'b' * 400)))

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args[0], 'REQ', m)
        self.assertEqual(m.args[1], 'a' * 400)

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args[0], 'REQ', m)
        self.assertEqual(m.args[1], 'b' * 400)
Ejemplo n.º 5
0
    def testNoEchomessageWithoutLabeledresponse(self):
        self.irc = irclib.Irc('test')

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertTrue(m.args == ('LS', '302'),
                        'Expected CAP LS 302, got %r.' % m)

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'NICK', 'Expected NICK, got %r.' % m)

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'USER', 'Expected USER, got %r.' % m)

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP',
                           args=('*', 'LS', 'account-notify echo-message')))

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args[0], 'REQ', m)
        self.assertEqual(m.args[1], 'account-notify')

        m = self.irc.takeMsg()
        self.assertIsNone(m)

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=('*', 'ACK', 'account-notify')))

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args, ('END', ), m)
Ejemplo n.º 6
0
    def testRescheduledStsPolicy(self):
        irc = irclib.Irc('test')
        net = ircdb.networks.getNetwork('test')
        net.addStsPolicy('example.com', 'duration=10,port=6697')
        net.addDisconnection('example.com')

        with conf.supybot.networks.test.servers.context(
            ['example.com:6667', 'example.org:6667']):

            driver = drivers.ServersMixin(irc)

            timeFastForward(8)

            self.assertEqual(driver._getNextServer(),
                             drivers.Server('example.com', 6697, None, True))
            driver.die()

            self.assertEqual(driver._getNextServer(),
                             drivers.Server('example.org', 6667, None, False))
            driver.die()

            timeFastForward(8)

            self.assertEqual(driver._getNextServer(),
                             drivers.Server('example.com', 6697, None, True))
Ejemplo n.º 7
0
    def testReauthenticate(self):
        try:
            conf.supybot.networks.test.sasl.username.setValue('jilles')
            conf.supybot.networks.test.sasl.password.setValue('sesame')
            self.irc = irclib.Irc('test')
        finally:
            conf.supybot.networks.test.sasl.username.setValue('')
            conf.supybot.networks.test.sasl.password.setValue('')
        self.assertEqual(self.irc.sasl_current_mechanism, None)
        self.assertEqual(self.irc.sasl_next_mechanisms, ['plain'])

        self.startCapNegociation(caps='')

        self.endCapNegociation()

        while self.irc.takeMsg():
            pass

        self.irc.feedMsg(ircmsgs.IrcMsg(command='422'))  # ERR_NOMOTD

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=('*', 'NEW', 'sasl=EXTERNAL')))

        self.irc.takeMsg(
        )  # None. But even if it was CAP REQ sasl, it would be ok
        self.assertEqual(self.irc.takeMsg(), None)

        try:
            conf.supybot.networks.test.sasl.username.setValue('jilles')
            conf.supybot.networks.test.sasl.password.setValue('sesame')
            self.irc.feedMsg(
                ircmsgs.IrcMsg(command='CAP', args=('*', 'DEL', 'sasl')))
            self.irc.feedMsg(
                ircmsgs.IrcMsg(command='CAP', args=('*', 'NEW', 'sasl=PLAIN')))
        finally:
            conf.supybot.networks.test.sasl.username.setValue('')
            conf.supybot.networks.test.sasl.password.setValue('')

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args[0], 'REQ', m)
        self.assertEqual(m.args[1], 'sasl')
        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=('*', 'ACK', 'sasl')))

        m = self.irc.takeMsg()
        self.assertEqual(
            m, ircmsgs.IrcMsg(command='AUTHENTICATE', args=('PLAIN', )))

        self.irc.feedMsg(ircmsgs.IrcMsg(command='AUTHENTICATE', args=('+', )))

        m = self.irc.takeMsg()
        self.assertEqual(
            m,
            ircmsgs.IrcMsg(command='AUTHENTICATE',
                           args=('amlsbGVzAGppbGxlcwBzZXNhbWU=', )))

        self.irc.feedMsg(ircmsgs.IrcMsg(command='900', args=('jilles', )))
        self.irc.feedMsg(ircmsgs.IrcMsg(command='903', args=('jilles', )))
Ejemplo n.º 8
0
    def testExpiredStsPolicy(self):
        irc = irclib.Irc('test')
        net = ircdb.networks.getNetwork('test')
        net.addStsPolicy('example.com', 6697, 'duration=10')
        net.addDisconnection('example.com')

        timeFastForward(16)

        with conf.supybot.networks.test.servers.context(['example.com:6667']):

            driver = drivers.ServersMixin(irc)

            self.assertEqual(driver._getNextServer(),
                             drivers.Server('example.com', 6667, None, False))
Ejemplo n.º 9
0
    def setUp(self):
        self.irc = irclib.Irc('test')

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.failUnless(m.args == ('LS', '302'),
                        'Expected CAP LS 302, got %r.' % m)

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'NICK', 'Expected NICK, got %r.' % m)

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'USER', 'Expected USER, got %r.' % m)

        self.irc.driver = unittest.mock.Mock()
Ejemplo n.º 10
0
 def testFirstCommands(self):
     try:
         originalNick = conf.supybot.nick()
         originalUser = conf.supybot.user()
         originalPassword = conf.supybot.networks.test.password()
         nick = 'nick'
         conf.supybot.nick.setValue(nick)
         user = '******'
         conf.supybot.user.setValue(user)
         expected = [
             ircmsgs.nick(nick),
             ircmsgs.IrcMsg(command='CAP', args=('REQ', 'account-notify')),
             ircmsgs.IrcMsg(command='CAP', args=('REQ', 'extended-join')),
             ircmsgs.IrcMsg(command='CAP', args=('REQ', 'multi-prefix')),
             ircmsgs.IrcMsg(command='CAP', args=('END', )),
             ircmsgs.user('limnoria', user)
         ]
         irc = irclib.Irc('test')
         msgs = [irc.takeMsg()]
         while msgs[-1] != None:
             msgs.append(irc.takeMsg())
         msgs.pop()
         self.assertEqual(msgs, expected)
         password = '******'
         conf.supybot.networks.test.password.setValue(password)
         irc = irclib.Irc('test')
         msgs = [irc.takeMsg()]
         while msgs[-1] != None:
             msgs.append(irc.takeMsg())
         msgs.pop()
         expected.insert(0, ircmsgs.password(password))
         self.assertEqual(msgs, expected)
     finally:
         conf.supybot.nick.setValue(originalNick)
         conf.supybot.user.setValue(originalUser)
         conf.supybot.networks.test.password.setValue(originalPassword)
Ejemplo n.º 11
0
 def setUp(self):
     self.irc = irclib.Irc('test')
     #m = self.irc.takeMsg()
     #self.failUnless(m.command == 'PASS', 'Expected PASS, got %r.' % m)
     m = self.irc.takeMsg()
     self.failUnless(m.command == 'NICK', 'Expected NICK, got %r.' % m)
     m = self.irc.takeMsg()
     self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
     m = self.irc.takeMsg()
     self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
     m = self.irc.takeMsg()
     self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
     m = self.irc.takeMsg()
     self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
     m = self.irc.takeMsg()
     self.failUnless(m.command == 'USER', 'Expected USER, got %r.' % m)
Ejemplo n.º 12
0
 def _connect(self, network, serverPort=None, password='', ssl=False):
     try:
         group = conf.supybot.networks.get(network)
         (server, port) = group.servers()[0]
     except (registry.NonExistentRegistryEntry, IndexError):
         if serverPort is None:
             raise ValueError('connect requires a (server, port) ' \
                               'if the network is not registered.')
         conf.registerNetwork(network, password, ssl)
         serverS = '%s:%s' % serverPort
         conf.supybot.networks.get(network).servers.append(serverS)
         assert conf.supybot.networks.get(network).servers(), \
                'No servers are set for the %s network.' % network
     self.log.debug('Creating new Irc for %s.', network)
     newIrc = irclib.Irc(network)
     driver = drivers.newDriver(newIrc)
     self._loadPlugins(newIrc)
     return newIrc
Ejemplo n.º 13
0
    def setUp(self):
        self.irc = irclib.Irc('test')

        #m = self.irc.takeMsg()
        #self.failUnless(m.command == 'PASS', 'Expected PASS, got %r.' % m)

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.failUnless(m.args == ('LS', '302'),
                        'Expected CAP LS 302, got %r.' % m)

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'NICK', 'Expected NICK, got %r.' % m)

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'USER', 'Expected USER, got %r.' % m)

        # TODO
        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP',
                           args=('*', 'LS', '*', 'account-tag multi-prefix')))
        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=('*', 'LS', 'extended-join')))

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args[0], 'REQ', m)
        # NOTE: Capabilities are requested in alphabetic order, because
        # sets are unordered, and their "order" is nondeterministic.
        self.assertEqual(m.args[1], 'account-tag extended-join multi-prefix')

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP',
                           args=('*', 'ACK',
                                 'account-tag multi-prefix extended-join')))

        m = self.irc.takeMsg()
        self.failUnless(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args, ('END', ), m)

        m = self.irc.takeMsg()
        self.failUnless(m is None, m)
Ejemplo n.º 14
0
    def testCapNewEchomessageLabeledResponse(self):
        self.irc = irclib.Irc('test')

        self.assertEqual(self.irc.sasl_current_mechanism, None)
        self.assertEqual(self.irc.sasl_next_mechanisms, [])

        self.startCapNegociation(caps='')

        self.endCapNegociation()

        while self.irc.takeMsg():
            pass

        self.irc.feedMsg(ircmsgs.IrcMsg(command='422'))  # ERR_NOMOTD

        m = self.irc.takeMsg()
        self.assertIsNone(m)

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP', args=['*', 'NEW', 'echo-message']))

        m = self.irc.takeMsg()
        self.assertIsNone(m)

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP',
                           args=['*', 'NEW', 'labeled-response']))

        m = self.irc.takeMsg()
        self.assertEqual(
            m,
            ircmsgs.IrcMsg(command='CAP',
                           args=['REQ', 'echo-message labeled-response']))

        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP',
                           args=['*', 'ACK', 'echo-message labeled-response']))

        self.assertIn('echo-message', self.irc.state.capabilities_ack)
        self.assertIn('labeled-response', self.irc.state.capabilities_ack)
Ejemplo n.º 15
0
    def testEchomessageLabeledresponseGrouped(self):
        self.irc = irclib.Irc('test')

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertTrue(m.args == ('LS', '302'),
                        'Expected CAP LS 302, got %r.' % m)

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'NICK', 'Expected NICK, got %r.' % m)

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'USER', 'Expected USER, got %r.' % m)

        self.irc.REQUEST_CAPABILITIES = set(
            ['account-notify', 'a' * 490, 'echo-message', 'labeled-response'])
        self.irc.feedMsg(
            ircmsgs.IrcMsg(command='CAP',
                           args=('*', 'LS', 'account-notify ' + 'a' * 490 +
                                 ' echo-message labeled-response')))

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args[0], 'REQ', m)
        self.assertEqual(m.args[1], 'echo-message labeled-response')

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args[0], 'REQ', m)
        self.assertEqual(m.args[1], 'a' * 490)

        m = self.irc.takeMsg()
        self.assertTrue(m.command == 'CAP', 'Expected CAP, got %r.' % m)
        self.assertEqual(m.args[0], 'REQ', m)
        self.assertEqual(m.args[1], 'account-notify')

        m = self.irc.takeMsg()
        self.assertIsNone(m)
Ejemplo n.º 16
0
def getTestIrc():
    irc = irclib.Irc('test')
    # Gotta clear the connect messages (USER, NICK, etc.)
    while irc.takeMsg():
        pass
    return irc