예제 #1
0
 def runTest(self):
     packets=["FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon null 9999 test 0x100000 english \"penguin 0.1\"\000"),\
      flap(2,"toc_init_done\000"),\
      flap(2,"toc_send_im test hi\000")]
     shouldbe=[[1,"\000\000\000\001"],\
      [2,"SIGN_ON:TOC1.0\000"],\
      [2,"NICK:test\000"],\
      [2,"CONFIG:\000"],\
      [2,"IM_IN:test:F:hi\000"]]
     data=""
     for i in packets:
         data=data+i
     s=StringIOWithoutClosing()
     d=DummyTOC()
     fac=toc.TOCFactory()
     d.factory=fac
     d.makeConnection(protocol.FileWrapper(s))
     d.dataReceived(data)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     value=s.getvalue()
     flaps=[]
     f,value=readFlap(value)
     while f:
         flaps.append(f)
         f,value=readFlap(value)
     if flaps!=shouldbe:
         for i in range(len(flaps)):
             if flaps[i]!=shouldbe[i]:raise AssertionError("MultiPacketTest Failed!\nactual:%s\nshould be:%s"%(flaps[i],shouldbe[i]))
         raise AssertionError("MultiPacketTest Failed with incorrect length!, printing both lists\nactual:%s\nshould be:%s"%(flaps,shouldbe))
예제 #2
0
class FileTransferTestCase(unittest.TestCase):
    """
    test FileSend against FileReceive
    """

    def setUp(self):
        self.input = 'a' * 7000
        self.output = StringIOWithoutClosing()


    def tearDown(self):
        self.input = None
        self.output = None


    def test_fileTransfer(self):
        """
        Test L{FileSend} against L{FileReceive} using a loopback transport.
        """
        auth = 1234
        sender = msn.FileSend(StringIO.StringIO(self.input))
        sender.auth = auth
        sender.fileSize = 7000
        client = msn.FileReceive(auth, "*****@*****.**", self.output)
        client.fileSize = 7000
        def check(ignored):
            self.assertTrue(
                client.completed and sender.completed,
                msg="send failed to complete")
            self.assertEqual(
                self.input, self.output.getvalue(),
                msg="saved file does not match original")
        d = loopback.loopbackAsync(sender, client)
        d.addCallback(check)
        return d
예제 #3
0
class BasicServerFunctionalityTestCase(unittest.TestCase):
    def setUp(self):
        self.f = StringIOWithoutClosing()
        self.t = protocol.FileWrapper(self.f)
        self.p = irc.IRC()
        self.p.makeConnection(self.t)


    def check(self, s):
        self.assertEquals(self.f.getvalue(), s)


    def testPrivmsg(self):
        self.p.privmsg("this-is-sender", "this-is-recip", "this is message")
        self.check(":this-is-sender PRIVMSG this-is-recip :this is message\r\n")


    def testNotice(self):
        self.p.notice("this-is-sender", "this-is-recip", "this is notice")
        self.check(":this-is-sender NOTICE this-is-recip :this is notice\r\n")


    def testAction(self):
        self.p.action("this-is-sender", "this-is-recip", "this is action")
        self.check(":this-is-sender ACTION this-is-recip :this is action\r\n")


    def testJoin(self):
        self.p.join("this-person", "#this-channel")
        self.check(":this-person JOIN #this-channel\r\n")


    def testPart(self):
        self.p.part("this-person", "#that-channel")
        self.check(":this-person PART #that-channel\r\n")


    def testWhois(self):
        """
        Verify that a whois by the client receives the right protocol actions
        from the server.
        """
        timestamp = int(time.time()-100)
        hostname = self.p.hostname
        req = 'requesting-nick'
        targ = 'target-nick'
        self.p.whois(req, targ, 'target', 'host.com',
                'Target User', 'irc.host.com', 'A fake server', False,
                12, timestamp, ['#fakeusers', '#fakemisc'])
        expected = '\r\n'.join([
':%(hostname)s 311 %(req)s %(targ)s target host.com * :Target User',
':%(hostname)s 312 %(req)s %(targ)s irc.host.com :A fake server',
':%(hostname)s 317 %(req)s %(targ)s 12 %(timestamp)s :seconds idle, signon time',
':%(hostname)s 319 %(req)s %(targ)s :#fakeusers #fakemisc',
':%(hostname)s 318 %(req)s %(targ)s :End of WHOIS list.',
'']) % dict(hostname=hostname, timestamp=timestamp, req=req, targ=targ)
        self.check(expected)
예제 #4
0
 def runTest(self):
     sends=["FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon localhost 9999 test 0x00 english penguin\000"),\
      flap(2,"toc_init_done\000"),\
      flap(2,"toc_add_deny\000"),\
      flap(2,"toc_send_im test 1\000"),\
      flap(2,"toc_add_deny test\000"),\
      flap(2,"toc_send_im test 2\000"),\
      flap(2,"toc_add_permit\000"),\
      flap(2,"toc_send_im test 3\000"),\
      flap(2,"toc_add_permit test\000"),\
      flap(2,"toc_send_im test 4\000")]
     expect=[[1,"\000\000\000\001"],\
      [2,"SIGN_ON:TOC1.0\000"],\
      [2,"NICK:test\000"],\
      [2,"CONFIG:\000"],\
      [2,"IM_IN:test:F:1\000"],\
      [2,"ERROR:901:test\000"],\
      [2,"ERROR:901:test\000"],\
      [2,"IM_IN:test:F:4\000"]]
     d = DummyTOC()
     d.factory = toc.TOCFactory()
     s = StringIOWithoutClosing()
     d.makeConnection(protocol.FileWrapper(s))
     for i in sends:
         d.dataReceived(i)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     v = s.getvalue()
     flaps = []
     f, v = readFlap(v)
     while f:
         flaps.append(f)
         f, v = readFlap(v)
     if flaps != expect:
         for i in range(len(flaps)):
             if flaps[i] != expect[i]:
                 raise AssertionError(
                     "PrivacyTest Before Failed!\nactual:%s\nshould be:%s" %
                     (flaps[i], expect[i]))
         raise AssertionError(
             "PrivacyTest Before Failed with incorrect length!\nactual:%s\nshould be:%s"
             % (flaps, expect))
예제 #5
0
 def runTest(self):
     sends=["FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon localhost 9999 test 0x00 english penguin\000"),\
      flap(2,"toc_init_done\000"),\
      flap(2,"toc_add_deny\000"),\
      flap(2,"toc_send_im test 1\000"),\
      flap(2,"toc_add_deny test\000"),\
      flap(2,"toc_send_im test 2\000"),\
      flap(2,"toc_add_permit\000"),\
      flap(2,"toc_send_im test 3\000"),\
      flap(2,"toc_add_permit test\000"),\
      flap(2,"toc_send_im test 4\000")]
     expect=[[1,"\000\000\000\001"],\
      [2,"SIGN_ON:TOC1.0\000"],\
      [2,"NICK:test\000"],\
      [2,"CONFIG:\000"],\
      [2,"IM_IN:test:F:1\000"],\
      [2,"ERROR:901:test\000"],\
      [2,"ERROR:901:test\000"],\
      [2,"IM_IN:test:F:4\000"]]
     d=DummyTOC()
     d.factory=toc.TOCFactory()
     s=StringIOWithoutClosing()
     d.makeConnection(protocol.FileWrapper(s))
     for i in sends:
         d.dataReceived(i)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     v=s.getvalue()
     flaps=[]
     f,v=readFlap(v)
     while f:
         flaps.append(f)
         f,v=readFlap(v)
     if flaps!=expect:
         for i in range(len(flaps)):
             if flaps[i]!=expect[i]:
                 raise AssertionError("PrivacyTest Before Failed!\nactual:%s\nshould be:%s"%(flaps[i],expect[i]))
         raise AssertionError("PrivacyTest Before Failed with incorrect length!\nactual:%s\nshould be:%s"%(flaps,expect))         
예제 #6
0
 def runTest(self):
     packets=["FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon null 9999 test 0x100000 english \"penguin 0.1\"\000"),\
      flap(2,"toc_init_done\000"),\
      flap(2,"toc_send_im test hi\000")]
     shouldbe=[[1,"\000\000\000\001"],\
      [2,"SIGN_ON:TOC1.0\000"],\
      [2,"NICK:test\000"],\
      [2,"CONFIG:\000"],\
      [2,"IM_IN:test:F:hi\000"]]
     data = ""
     for i in packets:
         data = data + i
     s = StringIOWithoutClosing()
     d = DummyTOC()
     fac = toc.TOCFactory()
     d.factory = fac
     d.makeConnection(protocol.FileWrapper(s))
     d.dataReceived(data)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     value = s.getvalue()
     flaps = []
     f, value = readFlap(value)
     while f:
         flaps.append(f)
         f, value = readFlap(value)
     if flaps != shouldbe:
         for i in range(len(flaps)):
             if flaps[i] != shouldbe[i]:
                 raise AssertionError(
                     "MultiPacketTest Failed!\nactual:%s\nshould be:%s" %
                     (flaps[i], shouldbe[i]))
         raise AssertionError(
             "MultiPacketTest Failed with incorrect length!, printing both lists\nactual:%s\nshould be:%s"
             % (flaps, shouldbe))
예제 #7
0
    def setUp(self):
        self.file = StringIOWithoutClosing()
        self.transport = protocol.FileWrapper(self.file)

        self.factory = server.ServerFactory()
        self.protocol = self.factory.buildProtocol(None)

        self.protocol.factory = self.factory

        self.protocol.transport = self.transport
        self.protocol.connectionMade()
        self.protocol.versionSuccess()
        self.protocol.handshakeSuccess('')

        self.messages = []

        def send_message(*args):
            self.messages.append(args)

        self.patch(self.protocol.nc, 'sendMessage', send_message)

        self.control = self.protocol.controlStream
예제 #8
0
class CTCPTest(unittest.TestCase):
    def setUp(self):
        self.file = StringIOWithoutClosing()
        self.transport = protocol.FileWrapper(self.file)
        self.client = IRCClientWithoutLogin()
        self.client.makeConnection(self.transport)

    def test_ERRMSG(self):
        """Testing CTCP query ERRMSG.

        Not because this is this is an especially important case in the
        field, but it does go through the entire dispatch/decode/encode
        process.
        """

        errQuery = (":[email protected] PRIVMSG #theChan :"
                    "%(X)cERRMSG t%(X)c%(EOL)s" % {
                        'X': irc.X_DELIM,
                        'EOL': irc.CR + irc.LF
                    })

        errReply = ("NOTICE nick :%(X)cERRMSG t :"
                    "No error has occoured.%(X)c%(EOL)s" % {
                        'X': irc.X_DELIM,
                        'EOL': irc.CR + irc.LF
                    })

        self.client.dataReceived(errQuery)
        reply = self.file.getvalue()

        self.failUnlessEqual(errReply, reply)

    def tearDown(self):
        self.transport.loseConnection()
        self.client.connectionLost()
        del self.client
        del self.transport
예제 #9
0
파일: test_irc.py 프로젝트: Almad/twisted
class CTCPTest(unittest.TestCase):
    def setUp(self):
        self.file = StringIOWithoutClosing()
        self.transport = protocol.FileWrapper(self.file)
        self.client = IRCClientWithoutLogin()
        self.client.makeConnection(self.transport)


    def test_ERRMSG(self):
        """Testing CTCP query ERRMSG.

        Not because this is this is an especially important case in the
        field, but it does go through the entire dispatch/decode/encode
        process.
        """

        errQuery = (":[email protected] PRIVMSG #theChan :"
                    "%(X)cERRMSG t%(X)c%(EOL)s"
                    % {'X': irc.X_DELIM,
                       'EOL': irc.CR + irc.LF})

        errReply = ("NOTICE nick :%(X)cERRMSG t :"
                    "No error has occoured.%(X)c%(EOL)s"
                    % {'X': irc.X_DELIM,
                       'EOL': irc.CR + irc.LF})

        self.client.dataReceived(errQuery)
        reply = self.file.getvalue()

        self.failUnlessEqual(errReply, reply)


    def tearDown(self):
        self.transport.loseConnection()
        self.client.connectionLost()
        del self.client
        del self.transport
예제 #10
0
 def setUp(self):
     self.file = StringIOWithoutClosing()
     self.transport = protocol.FileWrapper(self.file)
     self.client = IRCClientWithoutLogin()
     self.client.makeConnection(self.transport)
예제 #11
0
 def setUp(self):
     self.f = StringIOWithoutClosing()
     self.t = protocol.FileWrapper(self.f)
     self.p = irc.IRC()
     self.p.makeConnection(self.t)
예제 #12
0
 def runTest(self):
     password1=toc.roast("test pass")
     password2=toc.roast("pass test")
     beforesend=[\
      "FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon localhost 9999 test %s english \"penguin 0.1\"\000"%password1),\
      flap(2,"toc_init_done\000"),\
      flap(2,"toc_set_config \"{m 4}\"\000"),\
      flap(2,"toc_format_nickname BOOGA\000"),\
      flap(2,"toc_format_nickname \"T E S T\"\000"),\
      flap(2,"toc_change_passwd \"testpass\" \"pass test\"\000"),\
      flap(2,"toc_change_passwd \"test pass\" \"pass test\"\000")]
     beforeexpect=[\
      [1,"\000\000\000\001"],\
      [2,"SIGN_ON:TOC1.0\000"],\
      [2,"NICK:test\000"],\
      [2,"CONFIG:\000"],\
      [2,"ERROR:911\000"],\
      [2,"ADMIN_NICK_STATUS:0\000"],\
      [2,"ERROR:911\000"],\
      [2,"ADMIN_PASSWD_STATUS:0\000"]]
     badpasssend=[\
      "FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon localhost 9999 test 0x1000 english \"penguin 0.1\"\000"),\
      flap(2,"toc_init_done")]
     badpassexpect=[\
      [1,"\000\00\000\001"],\
      [2,"ERROR:980\000"]]
     goodpasssend=[\
      "FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon localhost 9999 test %s english \"penguin 0.1\"\000"%password2),\
      flap(2,"toc_init_done")]
     goodpassexpect=[\
      [1,"\000\000\000\001"],\
      [2,"SIGN_ON:TOC1.0\000"],\
      [2,"NICK:T E S T\000"],\
      [2,"CONFIG:{m 4}\000"]]
     fac=toc.TOCFactory()
     d=DummyTOC()
     d.factory=fac
     s=StringIOWithoutClosing()
     d.makeConnection(protocol.FileWrapper(s))
     for i in beforesend:
         d.dataReceived(i)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     v=s.getvalue()
     flaps=[]
     f,v=readFlap(v)
     while f:
         flaps.append(f)
         f,v=readFlap(v)
     if flaps!=beforeexpect:
         for i in range(len(flaps)):
             if flaps[i]!=beforeexpect[i]:
                 raise AssertionError("SavedValuesTest Before Failed!\nactual:%s\nshould be:%s"%(flaps[i],beforeexpect[i]))
         raise AssertionError("SavedValuesTest Before Failed with incorrect length!\nactual:%s\nshould be:%s"%(flaps,beforeexpect))
     d=DummyTOC()
     d.factory=fac
     s=StringIOWithoutClosing()
     d.makeConnection(protocol.FileWrapper(s))
     for i in badpasssend:
         d.dataReceived(i)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     v=s.getvalue()
     flaps=[]
     f,v=readFlap(v)
     while f:
         flaps.append(f)
         f,v=readFlap(v)
     if flaps!=badpassexpect:
         for i in range(len(flaps)):
             if flaps[i]!=badpassexpect[i]:
                 raise AssertionError("SavedValuesTest BadPass Failed!\nactual:%s\nshould be:%s"%(flaps[i],badpassexpect[i]))
         raise AssertionError("SavedValuesTest BadPass Failed with incorrect length!\nactual:%s\nshould be:%s"%(flaps,badpassexpect))
     d=DummyTOC()
     d.factory=fac
     s=StringIOWithoutClosing()
     d.makeConnection(protocol.FileWrapper(s))
     for i in goodpasssend:
         d.dataReceived(i)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     v=s.getvalue()
     flaps=[]
     f,v=readFlap(v)
     while f:
         flaps.append(f)
         f,v=readFlap(v)
     if flaps!=goodpassexpect:
         for i in range(len(flaps)):
             if flaps[i]!=goodpassexpect[i]:
                 raise AssertionError("SavedValuesTest GoodPass Failed!\nactual:%s\nshould be:%s"%(flaps[i],goodpassexpect[i]))
         raise AssertionError("SavedValuesTest GoodPass Failed with incorrect length!\nactual:%s\nshould be:%s"%(flaps,beforeexpect))
예제 #13
0
파일: test_irc.py 프로젝트: Almad/twisted
 def setUp(self):
     self.file = StringIOWithoutClosing()
     self.transport = protocol.FileWrapper(self.file)
     self.client = IRCClientWithoutLogin()
     self.client.makeConnection(self.transport)
예제 #14
0
 def runTest(self):
     password1 = toc.roast("test pass")
     password2 = toc.roast("pass test")
     beforesend=[\
      "FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon localhost 9999 test %s english \"penguin 0.1\"\000"%password1),\
      flap(2,"toc_init_done\000"),\
      flap(2,"toc_set_config \"{m 4}\"\000"),\
      flap(2,"toc_format_nickname BOOGA\000"),\
      flap(2,"toc_format_nickname \"T E S T\"\000"),\
      flap(2,"toc_change_passwd \"testpass\" \"pass test\"\000"),\
      flap(2,"toc_change_passwd \"test pass\" \"pass test\"\000")]
     beforeexpect=[\
      [1,"\000\000\000\001"],\
      [2,"SIGN_ON:TOC1.0\000"],\
      [2,"NICK:test\000"],\
      [2,"CONFIG:\000"],\
      [2,"ERROR:911\000"],\
      [2,"ADMIN_NICK_STATUS:0\000"],\
      [2,"ERROR:911\000"],\
      [2,"ADMIN_PASSWD_STATUS:0\000"]]
     badpasssend=[\
      "FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon localhost 9999 test 0x1000 english \"penguin 0.1\"\000"),\
      flap(2,"toc_init_done")]
     badpassexpect=[\
      [1,"\000\00\000\001"],\
      [2,"ERROR:980\000"]]
     goodpasssend=[\
      "FLAPON\r\n\r\n",\
      flap(1,"\000\000\000\001\000\001\000\004test"),\
      flap(2,"toc_signon localhost 9999 test %s english \"penguin 0.1\"\000"%password2),\
      flap(2,"toc_init_done")]
     goodpassexpect=[\
      [1,"\000\000\000\001"],\
      [2,"SIGN_ON:TOC1.0\000"],\
      [2,"NICK:T E S T\000"],\
      [2,"CONFIG:{m 4}\000"]]
     fac = toc.TOCFactory()
     d = DummyTOC()
     d.factory = fac
     s = StringIOWithoutClosing()
     d.makeConnection(protocol.FileWrapper(s))
     for i in beforesend:
         d.dataReceived(i)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     v = s.getvalue()
     flaps = []
     f, v = readFlap(v)
     while f:
         flaps.append(f)
         f, v = readFlap(v)
     if flaps != beforeexpect:
         for i in range(len(flaps)):
             if flaps[i] != beforeexpect[i]:
                 raise AssertionError(
                     "SavedValuesTest Before Failed!\nactual:%s\nshould be:%s"
                     % (flaps[i], beforeexpect[i]))
         raise AssertionError(
             "SavedValuesTest Before Failed with incorrect length!\nactual:%s\nshould be:%s"
             % (flaps, beforeexpect))
     d = DummyTOC()
     d.factory = fac
     s = StringIOWithoutClosing()
     d.makeConnection(protocol.FileWrapper(s))
     for i in badpasssend:
         d.dataReceived(i)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     v = s.getvalue()
     flaps = []
     f, v = readFlap(v)
     while f:
         flaps.append(f)
         f, v = readFlap(v)
     if flaps != badpassexpect:
         for i in range(len(flaps)):
             if flaps[i] != badpassexpect[i]:
                 raise AssertionError(
                     "SavedValuesTest BadPass Failed!\nactual:%s\nshould be:%s"
                     % (flaps[i], badpassexpect[i]))
         raise AssertionError(
             "SavedValuesTest BadPass Failed with incorrect length!\nactual:%s\nshould be:%s"
             % (flaps, badpassexpect))
     d = DummyTOC()
     d.factory = fac
     s = StringIOWithoutClosing()
     d.makeConnection(protocol.FileWrapper(s))
     for i in goodpasssend:
         d.dataReceived(i)
     d.connectionLost(failure.Failure(main.CONNECTION_DONE))
     v = s.getvalue()
     flaps = []
     f, v = readFlap(v)
     while f:
         flaps.append(f)
         f, v = readFlap(v)
     if flaps != goodpassexpect:
         for i in range(len(flaps)):
             if flaps[i] != goodpassexpect[i]:
                 raise AssertionError(
                     "SavedValuesTest GoodPass Failed!\nactual:%s\nshould be:%s"
                     % (flaps[i], goodpassexpect[i]))
         raise AssertionError(
             "SavedValuesTest GoodPass Failed with incorrect length!\nactual:%s\nshould be:%s"
             % (flaps, beforeexpect))
예제 #15
0
파일: test_irc.py 프로젝트: Almad/twisted
 def setUp(self):
     self.f = StringIOWithoutClosing()
     self.t = protocol.FileWrapper(self.f)
     self.p = irc.IRC()
     self.p.makeConnection(self.t)
예제 #16
0
 def setUp(self):
     self.input = 'a' * 7000
     self.output = StringIOWithoutClosing()
예제 #17
0
 def runTest(self):
     USERS = 2
     data = range(USERS)
     data[0]=("FLAPON\r\n\r\n",\
     flap(1,"\000\000\000\001\000\001\000\004test"),\
     flap(2,"toc_signon localhost 9999 test 0x100000 english \"penguin 0.1\"\000"),\
     flap(2,"toc_add_buddy test\000"),\
     flap(2,"toc_init_done\000"),\
     flap(2,"toc_send_im test \"hi\"\000"),\
     flap(2,"toc_send_im test2 \"hello\"\000"),\
     flap(2,"toc_set_away \"not here\"\000"),\
     flap(2,"toc_set_idle 602\000"),\
     flap(2,"toc_set_idle 0\000"),\
     flap(2,"toc_set_away\000"),\
     flap(2,"toc_evil test norm\000"),\
     flap(2,"toc_chat_join 4 \"Test Chat\"\000"),\
     flap(2,"toc_chat_send 0 \"hello\"\000"),\
     #flap(2,"toc_chat_leave 0\000")) #,\
     flap(2,"toc_chat_invite 0 \"come\" ooga\000"),\
     #flap(2,"toc_chat_accept 0\000"),\
     flap(5,"\000"),\
     flap(2,"toc_chat_whisper 0 ooga \"boo ga\"\000"),\
     flap(2,"toc_chat_leave 0"),\
     flap(5,"\000"))
     data[1]=("FLAPON\r\n\r\n",\
     flap(1,"\000\000\000\001\000\001\000\004ooga"),\
     flap(2,"toc_signon localhost 9999 ooga 0x100000 english \"penguin 0.1\"\000"),\
     flap(2,"toc_add_buddy test\000"),\
     flap(2,"toc_init_done\000"),\
     flap(5,"\000"),\
     flap(5,"\000"),\
     #flap(5,"\000"),\
     #flap(5,"\000"),\
     #flap(5,"\000"),\
     flap(5,"\000"),\
     flap(5,"\000"),\
     flap(5,"\000"),\
     flap(5,"\000"),\
     flap(5,"\000"),\
     flap(5,"\000"),\
     flap(5,"\000"),\
     #flap(5,"\000"),\
     flap(2,"toc_chat_accept 0\000"),\
     flap(2,"toc_chat_send 0 \"hi test\"\000"),\
     flap(5,"\000"),\
     flap(2,"toc_chat_leave 0\000"))
     strings = range(USERS)
     for i in strings:
         strings[i] = StringIOWithoutClosing()
     fac = toc.TOCFactory()
     dummy = range(USERS)
     for i in dummy:
         dummy[i] = DummyTOC()
         dummy[i].factory = fac
         dummy[i].makeConnection(protocol.FileWrapper(strings[i]))
     while sum(map(lambda x: x == (), data)) != USERS:
         for i in range(USERS):
             d = data[i]
             if len(d) > 0:
                 k, data[i] = d[0], d[1:]
                 for j in k:
                     dummy[i].dataReceived(
                         j)  # test by doing a character at a time
             else:
                 dummy[i].connectionLost(
                     failure.Failure(main.CONNECTION_DONE))
     values = range(USERS)
     for i in values:
         values[i] = strings[i].getvalue()
     flaps = map(lambda x: [], range(USERS))
     for value in values:
         i = values.index(value)
         f, value = readFlap(value)
         while f:
             flaps[i].append(f)
             f, value = readFlap(value)
     ts = range(USERS)
     for t in ts:
         ts[t] = dummy[t].signontime
     shouldequal = range(USERS)
     shouldequal[0]=[ \
     [1,"\000\000\000\001"],\
     [2,"SIGN_ON:TOC1.0\000"],\
     [2,"NICK:test\000"],\
     [2,"CONFIG:\00"],\
     [2,"UPDATE_BUDDY:test:T:0:%s:0: O\000"%ts[0]],\
     [2,"IM_IN:test:F:hi\000"],\
     [2,"ERROR:901:test2\000"],\
     #[2,"UPDATE_BUDDY:test:T:0:%s:0: O\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:0:%s:0: OU\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:0:%s:10: OU\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:0:%s:0: OU\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:0:%s:0: O\000"%ts[0]],\
     [2,"EVILED:10:test\000"],\
     [2,"UPDATE_BUDDY:test:T:10:%s:0: O\000"%ts[0]],\
     [2,"CHAT_JOIN:0:Test Chat\000"],\
     [2,"CHAT_UPDATE_BUDDY:0:T:test\000"],\
     [2,"CHAT_IN:0:test:F:hello\000"],\
     [2,"CHAT_UPDATE_BUDDY:0:T:ooga\000"],\
     [2,"CHAT_IN:0:ooga:F:hi test\000"],\
     [2,"CHAT_LEFT:0\000"]]
     shouldequal[1]=[ \
     [1,"\000\000\000\001"],\
     [2,"SIGN_ON:TOC1.0\000"],\
     [2,"NICK:ooga\000"],\
     [2,"CONFIG:\000"],\
     #[2,"UPDATE_BUDDY:test:T:0:%s:0: O\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:0:%s:0: OU\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:0:%s:10: OU\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:0:%s:0: OU\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:0:%s:0: O\000"%ts[0]],\
     [2,"UPDATE_BUDDY:test:T:10:%s:0: O\000"%ts[0]],\
     [2,"CHAT_INVITE:Test Chat:0:test:come\000"],\
     [2,"CHAT_JOIN:0:Test Chat\000"],\
     [2,"CHAT_UPDATE_BUDDY:0:T:test:ooga\000"],\
     [2,"CHAT_IN:0:ooga:F:hi test\000"],\
     [2,"CHAT_IN:0:test:T:boo ga\000"],\
     [2,"CHAT_UPDATE_BUDDY:0:F:test\000"],\
     [2,"CHAT_LEFT:0\000"]]
     if flaps != shouldequal:
         for i in range(len(shouldequal)):
             for j in range(len(shouldequal[i])):
                 if shouldequal[i][j] != flaps[i][j]:
                     raise AssertionError(
                         "GeneralTest Failed!\nUser %s Line %s\nactual:%s\nshould be:%s"
                         % (i, j, flaps[i][j], shouldequal[i][j]))
         raise AssertionError("GeneralTest Failed with incorrect lengths!")