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)
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)
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()
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)
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)
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))
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', )))
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))
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()
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)
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)
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
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)
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)
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)
def getTestIrc(): irc = irclib.Irc('test') # Gotta clear the connect messages (USER, NICK, etc.) while irc.takeMsg(): pass return irc