Beispiel #1
0
  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");
  }
Beispiel #2
0
  /**
   * 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();
  }