I should have sent this file : ), the other is too hairy.
#include <cppunit/CompilerOutputter.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/extensions/HelperMacros.h>

#include "../include/base/socket/socket.h"

#include <string.h>
#include <errno.h>
#include <arpa/inet.h>
#include <iostream>

using namespace std;

class TestSocket : public CppUnit::TestFixture
{
  Socket *obj;
  
  CPPUNIT_TEST_SUITE( TestSocket );
  
  CPPUNIT_TEST( testAccept ); // blocks! it shouldn't, thought...
  
  CPPUNIT_TEST_SUITE_END( );
  
public:
  
  void setUp ( )
  {
    obj = new Socket;
  }
  
  void tearDown ( )
  {
    delete obj;
  }
  void testAccept ( )
  {
    cout << "\nIn TestSocket::testAccept()\n";
    int optvalReuseAddr = 1;
    
    char host[] = "localhost";
    int port = 6543;
    
    MYSERVER_SOCKADDRIN sockA;
    int sockALen = sizeof ( sockaddr_in );
    
    MYSERVER_SOCKADDRIN sockIn = { 0 };
    ((sockaddr_in*) (&sockIn))->sin_family = AF_INET;
    ((sockaddr_in*) (&sockIn))->sin_addr.s_addr = inet_addr ( "127.0.0.1" );
    ((sockaddr_in*) (&sockIn))->sin_port = htons ( port );
    
    int sockInLen = sizeof ( sockaddr_in );
    
    CPPUNIT_ASSERT( obj->socket ( AF_INET, SOCK_STREAM, ( getprotobyname ( "tcp" ) )->p_proto  ) != -1 );
    
    CPPUNIT_ASSERT( obj->setsockopt ( SOL_SOCKET, SO_REUSEADDR, (const char*) &optvalReuseAddr, sizeof(optvalReuseAddr) ) != -1 );
    
    CPPUNIT_ASSERT( obj->bind ( &sockIn, sockInLen ) != -1 );

    CPPUNIT_ASSERT( obj->listen ( 1 ) != -1 );
    
    CPPUNIT_ASSERT( obj->setNonBlocking ( 1 ) == 0 );

    CPPUNIT_ASSERT( int(obj->accept ( &sockA, &sockALen ).getHandle()) != -1 );
    
    CPPUNIT_ASSERT( obj->close ( ) != -1 );
  }
};

CPPUNIT_TEST_SUITE_REGISTRATION( TestSocket );

Reply via email to