void TCPCONNECTIONTF::testReadMaliciousDataInfinitLoop() { ANET_LOG(DEBUG, "Begin testReadMaliciousDataInfinitLoop"); int64_t now = TimeUtil::getTime(); Transport tranClient; Transport tranServer; const char sepc[] = "tcp:localhost:12346"; ConnPacketFactory factory; DefaultPacketStreamer defaultStreamer(&factory); DefaultPacketHandler defaultHandler; TCPServerAdapter adapter; MaliciousStreamer maliciousStreamer(&factory); IOComponent *listener = tranServer.listen(sepc, &defaultStreamer, &adapter); CPPUNIT_ASSERT(listener); ANET_LOG(SPAM,"After tranServer->listen()"); tranServer.eventIteration(now); ANET_LOG(SPAM,"After tranServer->eventIteration(now)"); //create a connection Connection *conn = tranClient.connect(sepc, &maliciousStreamer); ANET_LOG(SPAM,"After tranClient->connect(spec, _streamer, false)"); CPPUNIT_ASSERT(conn); tranClient.eventIteration(now); ANET_LOG(SPAM,"After tranClient->eventIteration(now)"); //accept the connection tranServer.eventIteration(now); ANET_LOG(SPAM,"After tranServer->eventIteration(now)"); conn->postPacket(new ConnPacket(11), &defaultHandler, NULL); maliciousStreamer._maliciousLen = 0x80000000 + 10; ANET_LOG(DEBUG,"before conn->writeData()"); conn->writeData(); ANET_LOG(DEBUG,"before connAcc->readData()"); tranServer.eventIteration(now); ANET_LOG(DEBUG,"after connAcc->readData()"); tranClient.eventIteration(now); CPPUNIT_ASSERT(conn->isClosed()); ANET_LOG(DEBUG,"after tranClient.eventIteration(now)"); conn->subRef(); listener->subRef(); ANET_LOG(DEBUG, "End testReadMaliciousDataInfinitLoop"); }
/** * test Server and Client memory leak * test whether packets are deleted when connection closed */ void TCPCONNECTIONTF::testMemLeak() { char spec[] = "tcp:localhost:13147"; int64_t now = TimeUtil::getTime(); Transport *tranServer = new Transport; Transport *tranClient = new Transport; ConnServerAdapter *adapter = new ConnServerAdapter; //add listener to tranServer IOComponent *listener = tranServer->listen(spec, _streamer, adapter); CPPUNIT_ASSERT(listener); tranServer->eventIteration(now); //create a connection Connection *conn = tranClient->connect(spec, _streamer, false); CPPUNIT_ASSERT(conn); tranClient->eventIteration(now); //accept the connection tranServer->eventIteration(now); // client send two packets _conn->postPacket(new ConnPacket, _handler, NULL, true); _conn->postPacket(new ConnPacket, _handler, NULL, true); tranClient->eventIteration(now); //server accept two packets tranServer->eventIteration(now); IOComponent *ioc = tranServer->_iocListTail; Connection *tmpConn = ((TCPComponent *)ioc)->_connection; //client close the connection _conn->close(); tranClient->eventIteration(now); tranServer->eventIteration(now); CPPUNIT_ASSERT_EQUAL((size_t)0, tmpConn->_outputQueue.size()); delete adapter; delete tranClient; delete tranServer; listener->subRef(); conn->subRef(); }