Vodafone Test Suite

Dependencies:   mbed-rtos mbed HTTPClient VodafoneUSBModem

Tests/Test08.cpp

Committer:
ashleymills
Date:
2012-10-12
Revision:
53:54b2d3a0c7bf
Parent:
52:de6cc9d823ab
Child:
60:7efce4a3c26f

File content as of revision 53:54b2d3a0c7bf:

#include "Test08.h"
#include "socket.h"

bool connectToSocket(char *ipAddress, int port, int *sockfd) {
  int ret = -1;
  *sockfd = -1;
  // create the socket
  if((*sockfd=socket(AF_INET,SOCK_STREAM,0))<0) {
     LOG("Error opening socket\r\n"); 
  } else {
     LOG("Socket open\r\n");
  }
         
  // create the socket address
  sockaddr_in serverAddress;
  std::memset(&serverAddress, 0, sizeof(struct sockaddr_in));
  serverAddress.sin_addr.s_addr = inet_addr(ipAddress);
  serverAddress.sin_family = AF_INET;
  serverAddress.sin_port = htons(port);

  // do socket connect
  LOG("Connecting socket to %s:%d", inet_ntoa(serverAddress.sin_addr), ntohs(serverAddress.sin_port));
  if((ret=::connect(*sockfd, (const struct sockaddr *)&serverAddress, sizeof(serverAddress)))<0) {
     ::close(*sockfd);
     LOG("Could not connect");
     return false;
  } else {
     LOG("Connection OK");
  }
  return true;
}

const char *gTest08DNSIn[5] = {
   "m2mthings.com",
   "kent.ac.uk",
   "example.com",
   "m2mcontroller.com",
   "www.mbed.org",
};

const char *gTest08DNSOut[5] = {
   "109.74.199.96",
   "129.12.10.249",
   "192.0.43.10",
   "62.105.171.138",
   "217.140.101.20",
};

const int gTest08NumDNSVals = 5;

Test08::Test08(VodafoneUSBModem *m) : VodafoneTestCase(m) {
   _description = gTest08Description;
   _testCaseNumber = 8;
}
      
void Test08::setupTest() {}
   
bool Test08::executeTest() {
   bool outcome = true;
   LOG("Description: %s",gTest08Description);
   LOG("Connecting to internet");
   if(_modem->connect("internet","web","web")==0) {
      LOG("Connected to internet");
   } else {
      LOG("Failed to connect to internet");
      outcome = false;
   }
   
   // try connecting to DNS server directly
   int sockfd;
   //if(connectToSocket("88.82.13.28",53,&sockfd)) {
   
   if(connectToSocket("109.74.199.96",80,&sockfd)) {
      close(sockfd);
   }
   
   
   struct hostent *server;
   do {
      while(1) {
         LOG("Getting host address");
         server = ::gethostbyname("m2mthings.com");
         if(server==NULL) {
            LOG("Failure getting host address!");
            outcome = false;
            //break;
         } else {
            LOG("got host address, length %d",server->h_length);
            break;
         }
      }
      
      if(server->h_length==4) {
         LOG("DNS lookup returned %d.%d.%d.%d",
            server->h_addr[0],
            server->h_addr[1],
            server->h_addr[2],
            server->h_addr[3]
         );
         outcome = true;
      } else {
         LOG("Only IPv4 addresses are supported.");
         outcome = false;
         break;
      }
   } while(0);
   
   // this is the real test
   
   char dnsOut[32];
   
   for(int i=0; i<gTest08NumDNSVals; i++) {
      LOG("Running DNS lookup for %s",gTest08DNSIn[i]);
      server = ::gethostbyname(gTest08DNSIn[i]);
      if(server==NULL) {
         LOG("Failure getting host address!");
         outcome = false;
         break;
      } else {
         LOG("Got host address, length %d",server->h_length);
      }
      
      if(server->h_length==4) {
         sprintf(dnsOut,"%d.%d.%d.%d",
            server->h_addr[0],
            server->h_addr[1],
            server->h_addr[2],
            server->h_addr[3]
         );
         LOG("DNS lookup returned %s",dnsOut);
      } else {
         LOG("Error. Only IPv4 addresses are supported.");
         outcome = false;
         break;
      }
      
      LOG("Expected %s, got %s",gTest08DNSOut[i],dnsOut);
      if(strcmp(dnsOut,gTest08DNSOut[i])!=0) {
         LOG("Mismatch. Fail.");
         outcome = false;
         break;
      } else {
         LOG("Match. OK.");
      }
   }
   
   _modem->disconnect();
   return outcome;
}
      
void Test08::endTest() { }