def testLetmein(self): def getAfterJoinMessages(): m = self.irc.takeMsg() self.assertEqual(m.command, 'MODE') m = self.irc.takeMsg() self.assertEqual(m.command, 'WHO') self.irc.feedMsg(ircmsgs.join('#bitcoin-otc', prefix=self.prefix)) getAfterJoinMessages() try: orignetwork = self.irc.network self.irc.network = 'freenode' origuser = self.prefix self.prefix = '[email protected]' self.assertError('letmein') # not authed self.irc.feedMsg(ircmsgs.join('#bitcoin-otc', prefix=self.prefix)) self.irc.takeMsg() self.assertTrue('registeredguy' not in self.irc.state.channels['#bitcoin-otc'].voices) self.prefix = '[email protected]' self.assertError('letmein') # not enough account age self.irc.feedMsg(ircmsgs.join('#bitcoin-otc', prefix=self.prefix)) self.irc.takeMsg() self.assertTrue('youngguy' not in self.irc.state.channels['#bitcoin-otc'].voices) self.prefix = '[email protected]' self.assertError('letmein') # negative rating self.irc.feedMsg(ircmsgs.join('#bitcoin-otc', prefix=self.prefix)) self.irc.takeMsg() self.assertTrue('authedguy2' not in self.irc.state.channels['#bitcoin-otc'].voices) self.prefix = '[email protected]' self.assertNotError('letmein') # should be good self.irc.feedMsg(ircmsgs.join('#bitcoin-otc', prefix=self.prefix)) self.irc.takeMsg() self.assertTrue('authedguy' in self.irc.state.channels['#bitcoin-otc'].voices) finally: self.irc.network = orignetwork self.prefix = origuser
def testJoin(self): st = irclib.IrcState() st.addMsg(self.irc, ircmsgs.join('#foo', prefix=self.irc.prefix)) self.failUnless('#foo' in st.channels) self.failUnless(self.irc.nick in st.channels['#foo'].users) st.addMsg(self.irc, ircmsgs.join('#foo', prefix='foo!bar@baz')) self.failUnless('foo' in st.channels['#foo'].users) st2 = st.copy() st.addMsg(self.irc, ircmsgs.quit(prefix='foo!bar@baz')) self.failIf('foo' in st.channels['#foo'].users) self.failUnless('foo' in st2.channels['#foo'].users)
def setUp(self): if self.__class__ in (PluginTestCase, ChannelPluginTestCase): return PluginTestCase.setUp(self) self.irc.feedMsg(ircmsgs.join(self.channel, prefix=self.prefix)) m = self.irc.takeMsg() self.failIf(m is None, 'No message back from joining channel.') self.assertEqual(m.command, 'MODE') m = self.irc.takeMsg() self.failIf(m is None, 'No message back from joining channel.') self.assertEqual(m.command, 'WHO')
def setUp(self, nick="test", forceSetup=False): if not forceSetup and self.__class__ in (PluginTestCase, ChannelPluginTestCase): return PluginTestCase.setUp(self) self.irc.feedMsg(ircmsgs.join(self.channel, prefix=self.prefix)) m = self.irc.takeMsg() self.failIf(m is None, "No message back from joining channel.") self.assertEqual(m.command, "MODE") m = self.irc.takeMsg() self.failIf(m is None, "No message back from joining channel.") self.assertEqual(m.command, "WHO")
def testPart(self): def getAfterJoinMessages(): m = self.irc.takeMsg() self.assertEqual(m.command, 'MODE') m = self.irc.takeMsg() self.assertEqual(m.command, 'MODE') m = self.irc.takeMsg() self.assertEqual(m.command, 'WHO') self.assertError('part #foo') self.assertRegexp('part #foo', 'not in') self.irc.feedMsg(ircmsgs.join('#foo', prefix=self.prefix)) getAfterJoinMessages() m = self.getMsg('part #foo') self.assertEqual(m.command, 'PART') self.irc.feedMsg(ircmsgs.join('#foo', prefix=self.prefix)) getAfterJoinMessages() m = self.getMsg('part #foo reason') self.assertEqual(m.command, 'PART') self.assertEqual(m.args[0], '#foo') self.assertEqual(m.args[1], 'reason')
def make_and_join_channel(self, irc, nick): channel_length = 15 channel_characters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] channel_name_chars = [] for character in xrange(channel_length): channel_name_chars.append(random.choice(channel_characters)) channel_name = '#%s' % ''.join(channel_name_chars) irc.queueMsg(ircmsgs.join(channel_name)) time.sleep(7) irc.queueMsg(ircmsgs.mode(channel_name, '+i')) self._invite(irc, nick, channel_name)
def _add_game(self, game): # Find first open chan slot chan_index = 1 chan_list = sorted(self._chans_used) while chan_index in chan_list: chan_index += 1 # Take chan self._chans_used.append(chan_index) chan = self._chan_format % chan_index self._irc.queueMsg(ircmsgs.join(chan)) # Initialize game self._games[game.gamekey] = TailGame(game, self._irc, chan, chan_index, self)
def testOpTrack(self): cb = self.getCallback() self.assertEqual(cb.opped['#test'], False) self.op() self.assertEqual(cb.opped['#test'], True) self.deop() self.assertEqual(cb.opped['#test'], False) self.op() self.irc.feedMsg(ircmsgs.part('#test', prefix=self.prefix)) self.irc.feedMsg(ircmsgs.join('#test', prefix=self.prefix)) self.irc.takeMsg() # MODE msg self.irc.takeMsg() # WHO msg self.assertEqual(cb.opped['#test'], False)
def testIban(self): self.irc.feedMsg(ircmsgs.join(self.channel, prefix='[email protected]')) self.assertError('iban foo!bar@baz') self.irc.feedMsg(ircmsgs.op(self.channel, self.irc.nick)) self.assertBan('iban foo!bar@baz', 'foo!bar@baz') self.assertBan('iban foobar', '[email protected]') conf.supybot.protocols.irc.strictRfc.setValue(True) self.assertError('iban $a:nyuszika7h') self.assertError('unban $a:nyuszika7h') conf.supybot.protocols.irc.strictRfc.setValue(False) self.assertBan('iban $a:nyuszika7h', '$a:nyuszika7h') self.assertNotError('unban $a:nyuszika7h')
def __init__(self, irc): self.__parent = super(TailNFL, self) self.__parent.__init__(irc) self._chan_lobby = '##tailnfl' self._chan_format = '##tailnfl-game%s' # chan = format % index self._chans_used = [] # int list of occupied chans self._games = {} self._irc = irc self._loop_should_stop = threading.Event() self._loop_is_stopped = threading.Event() self._loop_is_stopped.set() self._irc.queueMsg(ircmsgs.join(self._chan_lobby)) self._irc.queueMsg(ircmsgs.joins([self._chan_format%str(i) for i in range(1, 21)]))
def testHandlesModes(self): st = irclib.IrcState() st.addMsg(self.irc, ircmsgs.join('#foo', prefix=self.irc.prefix)) self.failIf('bar' in st.channels['#foo'].ops) st.addMsg(self.irc, ircmsgs.op('#foo', 'bar')) self.failUnless('bar' in st.channels['#foo'].ops) st.addMsg(self.irc, ircmsgs.deop('#foo', 'bar')) self.failIf('bar' in st.channels['#foo'].ops) self.failIf('bar' in st.channels['#foo'].voices) st.addMsg(self.irc, ircmsgs.voice('#foo', 'bar')) self.failUnless('bar' in st.channels['#foo'].voices) st.addMsg(self.irc, ircmsgs.devoice('#foo', 'bar')) self.failIf('bar' in st.channels['#foo'].voices) self.failIf('bar' in st.channels['#foo'].halfops) st.addMsg(self.irc, ircmsgs.halfop('#foo', 'bar')) self.failUnless('bar' in st.channels['#foo'].halfops) st.addMsg(self.irc, ircmsgs.dehalfop('#foo', 'bar')) self.failIf('bar' in st.channels['#foo'].halfops)
class IrcMsgQueueTestCase(SupyTestCase): mode = ircmsgs.op('#foo', 'jemfinch') msg = ircmsgs.privmsg('#foo', 'hey, you') msgs = [ircmsgs.privmsg('#foo', str(i)) for i in range(10)] kick = ircmsgs.kick('#foo', 'PeterB') pong = ircmsgs.pong('123') ping = ircmsgs.ping('123') topic = ircmsgs.topic('#foo') notice = ircmsgs.notice('jemfinch', 'supybot here') join = ircmsgs.join('#foo') who = ircmsgs.who('#foo') def testInit(self): q = irclib.IrcMsgQueue([self.msg, self.topic, self.ping]) self.assertEqual(len(q), 3) def testLen(self): q = irclib.IrcMsgQueue() q.enqueue(self.msg) self.assertEqual(len(q), 1) q.enqueue(self.mode) self.assertEqual(len(q), 2) q.enqueue(self.kick) self.assertEqual(len(q), 3) q.enqueue(self.topic) self.assertEqual(len(q), 4) q.dequeue() self.assertEqual(len(q), 3) q.dequeue() self.assertEqual(len(q), 2) q.dequeue() self.assertEqual(len(q), 1) q.dequeue() self.assertEqual(len(q), 0) def testContains(self): q = irclib.IrcMsgQueue() q.enqueue(self.msg) q.enqueue(self.msg) q.enqueue(self.msg) self.failUnless(self.msg in q) q.dequeue() self.failUnless(self.msg in q) q.dequeue() self.failUnless(self.msg in q) q.dequeue() self.failIf(self.msg in q) def testRepr(self): q = irclib.IrcMsgQueue() self.assertEqual(repr(q), 'IrcMsgQueue([])') q.enqueue(self.msg) try: repr(q) except Exception as e: self.fail('repr(q) raised an exception: %s' % utils.exnToString(e)) def testEmpty(self): q = irclib.IrcMsgQueue() self.failIf(q) def testEnqueueDequeue(self): q = irclib.IrcMsgQueue() q.enqueue(self.msg) self.failUnless(q) self.assertEqual(self.msg, q.dequeue()) self.failIf(q) q.enqueue(self.msg) q.enqueue(self.notice) self.assertEqual(self.msg, q.dequeue()) self.assertEqual(self.notice, q.dequeue()) for msg in self.msgs: q.enqueue(msg) for msg in self.msgs: self.assertEqual(msg, q.dequeue()) def testPrioritizing(self): q = irclib.IrcMsgQueue() q.enqueue(self.msg) q.enqueue(self.mode) self.assertEqual(self.mode, q.dequeue()) self.assertEqual(self.msg, q.dequeue()) q.enqueue(self.msg) q.enqueue(self.kick) self.assertEqual(self.kick, q.dequeue()) self.assertEqual(self.msg, q.dequeue()) q.enqueue(self.ping) q.enqueue(self.msgs[0]) q.enqueue(self.kick) q.enqueue(self.msgs[1]) q.enqueue(self.mode) self.assertEqual(self.kick, q.dequeue()) self.assertEqual(self.mode, q.dequeue()) self.assertEqual(self.ping, q.dequeue()) self.assertEqual(self.msgs[0], q.dequeue()) self.assertEqual(self.msgs[1], q.dequeue()) def testNoIdenticals(self): configVar = conf.supybot.protocols.irc.queuing.duplicates original = configVar() try: configVar.setValue(True) q = irclib.IrcMsgQueue() q.enqueue(self.msg) q.enqueue(self.msg) self.assertEqual(self.msg, q.dequeue()) self.failIf(q) finally: configVar.setValue(original) def testJoinBeforeWho(self): q = irclib.IrcMsgQueue() q.enqueue(self.join) q.enqueue(self.who) self.assertEqual(self.join, q.dequeue()) self.assertEqual(self.who, q.dequeue()) ## q.enqueue(self.who) ## q.enqueue(self.join) ## self.assertEqual(self.join, q.dequeue()) ## self.assertEqual(self.who, q.dequeue()) def testTopicBeforePrivmsg(self): q = irclib.IrcMsgQueue() q.enqueue(self.msg) q.enqueue(self.topic) self.assertEqual(self.topic, q.dequeue()) self.assertEqual(self.msg, q.dequeue()) def testModeBeforePrivmsg(self): q = irclib.IrcMsgQueue() q.enqueue(self.msg) q.enqueue(self.mode) self.assertEqual(self.mode, q.dequeue()) self.assertEqual(self.msg, q.dequeue()) q.enqueue(self.mode) q.enqueue(self.msg) self.assertEqual(self.mode, q.dequeue()) self.assertEqual(self.msg, q.dequeue())
def joinChannel(self, irc, channel): if not self.botInChannel(irc, channel): logger.info('join channel '+channel) irc.queueMsg(ircmsgs.join(channel)) else: logger.info('bot already joined in '+channel)
def testJoin(self): channel = '#osu' key = 'michiganSucks' self.assertEqual(ircmsgs.join(channel).args, ('#osu',)) self.assertEqual(ircmsgs.join(channel, key).args, ('#osu', 'michiganSucks'))