Vodafone Test Suite

Dependencies:   mbed-rtos mbed HTTPClient VodafoneUSBModem

Committer:
ashleymills
Date:
Thu Oct 11 10:00:19 2012 +0000
Revision:
52:de6cc9d823ab
Parent:
51:15ba73d1cc45
Child:
53:54b2d3a0c7bf
Improved DNS test case to idenfity timeout problem.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 45:f68fea0831d7 1 #include "Test08.h"
ashleymills 52:de6cc9d823ab 2 #include "socket.h"
ashleymills 52:de6cc9d823ab 3
ashleymills 52:de6cc9d823ab 4 bool connectToSocket(char *ipAddress, int port, int *sockfd) {
ashleymills 52:de6cc9d823ab 5 int ret = -1;
ashleymills 52:de6cc9d823ab 6 *sockfd = -1;
ashleymills 52:de6cc9d823ab 7 // create the socket
ashleymills 52:de6cc9d823ab 8 if((*sockfd=socket(AF_INET,SOCK_STREAM,0))<0) {
ashleymills 52:de6cc9d823ab 9 LOG("Error opening socket\r\n");
ashleymills 52:de6cc9d823ab 10 } else {
ashleymills 52:de6cc9d823ab 11 LOG("Socket open\r\n");
ashleymills 52:de6cc9d823ab 12 }
ashleymills 52:de6cc9d823ab 13
ashleymills 52:de6cc9d823ab 14 // create the socket address
ashleymills 52:de6cc9d823ab 15 sockaddr_in serverAddress;
ashleymills 52:de6cc9d823ab 16 std::memset(&serverAddress, 0, sizeof(struct sockaddr_in));
ashleymills 52:de6cc9d823ab 17 serverAddress.sin_addr.s_addr = inet_addr(ipAddress);
ashleymills 52:de6cc9d823ab 18 serverAddress.sin_family = AF_INET;
ashleymills 52:de6cc9d823ab 19 serverAddress.sin_port = htons(port);
ashleymills 52:de6cc9d823ab 20
ashleymills 52:de6cc9d823ab 21 // do socket connect
ashleymills 52:de6cc9d823ab 22 LOG("Connecting socket to %s:%d", inet_ntoa(serverAddress.sin_addr), ntohs(serverAddress.sin_port));
ashleymills 52:de6cc9d823ab 23 if((ret=::connect(*sockfd, (const struct sockaddr *)&serverAddress, sizeof(serverAddress)))<0) {
ashleymills 52:de6cc9d823ab 24 ::close(*sockfd);
ashleymills 52:de6cc9d823ab 25 LOG("Could not connect");
ashleymills 52:de6cc9d823ab 26 return false;
ashleymills 52:de6cc9d823ab 27 } else {
ashleymills 52:de6cc9d823ab 28 LOG("Connection OK");
ashleymills 52:de6cc9d823ab 29 }
ashleymills 52:de6cc9d823ab 30 return true;
ashleymills 52:de6cc9d823ab 31 }
ashleymills 45:f68fea0831d7 32
ashleymills 47:85c30274cc9b 33 const char *gTest08DNSIn[5] = {
ashleymills 47:85c30274cc9b 34 "m2mthings.com",
ashleymills 51:15ba73d1cc45 35 "kent.ac.uk",
ashleymills 47:85c30274cc9b 36 "example.com",
ashleymills 52:de6cc9d823ab 37 "m2mcontroller.com",
ashleymills 47:85c30274cc9b 38 "www.mbed.org",
ashleymills 47:85c30274cc9b 39 };
ashleymills 47:85c30274cc9b 40
ashleymills 47:85c30274cc9b 41 const char *gTest08DNSOut[5] = {
ashleymills 47:85c30274cc9b 42 "109.74.199.96",
ashleymills 51:15ba73d1cc45 43 "129.12.10.249",
ashleymills 47:85c30274cc9b 44 "192.0.43.10",
ashleymills 52:de6cc9d823ab 45 "62.105.171.138",
ashleymills 47:85c30274cc9b 46 "217.140.101.20",
ashleymills 47:85c30274cc9b 47 };
ashleymills 47:85c30274cc9b 48
ashleymills 47:85c30274cc9b 49 const int gTest08NumDNSVals = 5;
ashleymills 47:85c30274cc9b 50
ashleymills 45:f68fea0831d7 51 Test08::Test08(VodafoneUSBModem *m) : VodafoneTestCase(m) {
ashleymills 45:f68fea0831d7 52 _description = gTest08Description;
ashleymills 45:f68fea0831d7 53 _testCaseNumber = 8;
ashleymills 45:f68fea0831d7 54 }
ashleymills 45:f68fea0831d7 55
ashleymills 45:f68fea0831d7 56 void Test08::setupTest() {}
ashleymills 45:f68fea0831d7 57
ashleymills 45:f68fea0831d7 58 bool Test08::executeTest() {
ashleymills 45:f68fea0831d7 59 bool outcome = true;
ashleymills 45:f68fea0831d7 60 LOG("Description: %s",gTest08Description);
ashleymills 45:f68fea0831d7 61 LOG("Connecting to internet");
ashleymills 45:f68fea0831d7 62 if(_modem->connect("internet","web","web")==0) {
ashleymills 45:f68fea0831d7 63 LOG("Connected to internet");
ashleymills 45:f68fea0831d7 64 } else {
ashleymills 45:f68fea0831d7 65 LOG("Failed to connect to internet");
ashleymills 45:f68fea0831d7 66 outcome = false;
ashleymills 45:f68fea0831d7 67 }
ashleymills 52:de6cc9d823ab 68
ashleymills 52:de6cc9d823ab 69 // try connecting to DNS server directly
ashleymills 52:de6cc9d823ab 70 int sockfd;
ashleymills 52:de6cc9d823ab 71 //if(connectToSocket("88.82.13.28",53,&sockfd)) {
ashleymills 52:de6cc9d823ab 72 if(connectToSocket("109.74.199.96",80,&sockfd)) {
ashleymills 52:de6cc9d823ab 73 close(sockfd);
ashleymills 52:de6cc9d823ab 74 }
ashleymills 52:de6cc9d823ab 75
ashleymills 46:d2c22206031a 76 struct hostent *server;
ashleymills 46:d2c22206031a 77 do {
ashleymills 46:d2c22206031a 78 while(1) {
ashleymills 46:d2c22206031a 79 LOG("Getting host address");
ashleymills 46:d2c22206031a 80 server = ::gethostbyname("m2mthings.com");
ashleymills 46:d2c22206031a 81 if(server==NULL) {
ashleymills 46:d2c22206031a 82 LOG("Failure getting host address!");
ashleymills 46:d2c22206031a 83 outcome = false;
ashleymills 46:d2c22206031a 84 //break;
ashleymills 46:d2c22206031a 85 } else {
ashleymills 46:d2c22206031a 86 LOG("got host address, length %d",server->h_length);
ashleymills 46:d2c22206031a 87 break;
ashleymills 46:d2c22206031a 88 }
ashleymills 46:d2c22206031a 89 }
ashleymills 46:d2c22206031a 90
ashleymills 46:d2c22206031a 91 if(server->h_length==4) {
ashleymills 46:d2c22206031a 92 LOG("DNS lookup returned %d.%d.%d.%d",
ashleymills 46:d2c22206031a 93 server->h_addr[0],
ashleymills 46:d2c22206031a 94 server->h_addr[1],
ashleymills 46:d2c22206031a 95 server->h_addr[2],
ashleymills 46:d2c22206031a 96 server->h_addr[3]
ashleymills 46:d2c22206031a 97 );
ashleymills 47:85c30274cc9b 98 outcome = true;
ashleymills 46:d2c22206031a 99 } else {
ashleymills 46:d2c22206031a 100 LOG("Only IPv4 addresses are supported.");
ashleymills 46:d2c22206031a 101 outcome = false;
ashleymills 46:d2c22206031a 102 break;
ashleymills 46:d2c22206031a 103 }
ashleymills 46:d2c22206031a 104 } while(0);
ashleymills 45:f68fea0831d7 105
ashleymills 47:85c30274cc9b 106 // this is the real test
ashleymills 47:85c30274cc9b 107
ashleymills 47:85c30274cc9b 108 char dnsOut[32];
ashleymills 47:85c30274cc9b 109
ashleymills 47:85c30274cc9b 110 for(int i=0; i<gTest08NumDNSVals; i++) {
ashleymills 47:85c30274cc9b 111 LOG("Running DNS lookup for %s",gTest08DNSIn[i]);
ashleymills 47:85c30274cc9b 112 server = ::gethostbyname(gTest08DNSIn[i]);
ashleymills 47:85c30274cc9b 113 if(server==NULL) {
ashleymills 47:85c30274cc9b 114 LOG("Failure getting host address!");
ashleymills 47:85c30274cc9b 115 outcome = false;
ashleymills 47:85c30274cc9b 116 break;
ashleymills 47:85c30274cc9b 117 } else {
ashleymills 47:85c30274cc9b 118 LOG("Got host address, length %d",server->h_length);
ashleymills 47:85c30274cc9b 119 }
ashleymills 47:85c30274cc9b 120
ashleymills 47:85c30274cc9b 121 if(server->h_length==4) {
ashleymills 47:85c30274cc9b 122 sprintf(dnsOut,"%d.%d.%d.%d",
ashleymills 47:85c30274cc9b 123 server->h_addr[0],
ashleymills 47:85c30274cc9b 124 server->h_addr[1],
ashleymills 47:85c30274cc9b 125 server->h_addr[2],
ashleymills 47:85c30274cc9b 126 server->h_addr[3]
ashleymills 47:85c30274cc9b 127 );
ashleymills 47:85c30274cc9b 128 LOG("DNS lookup returned %s",dnsOut);
ashleymills 47:85c30274cc9b 129 } else {
ashleymills 47:85c30274cc9b 130 LOG("Error. Only IPv4 addresses are supported.");
ashleymills 47:85c30274cc9b 131 outcome = false;
ashleymills 47:85c30274cc9b 132 break;
ashleymills 47:85c30274cc9b 133 }
ashleymills 47:85c30274cc9b 134
ashleymills 47:85c30274cc9b 135 LOG("Expected %s, got %s",gTest08DNSOut[i],dnsOut);
ashleymills 47:85c30274cc9b 136 if(strcmp(dnsOut,gTest08DNSOut[i])!=0) {
ashleymills 47:85c30274cc9b 137 LOG("Mismatch. Fail.");
ashleymills 47:85c30274cc9b 138 outcome = false;
ashleymills 47:85c30274cc9b 139 break;
ashleymills 47:85c30274cc9b 140 } else {
ashleymills 47:85c30274cc9b 141 LOG("Match. OK.");
ashleymills 47:85c30274cc9b 142 }
ashleymills 47:85c30274cc9b 143 }
ashleymills 47:85c30274cc9b 144
ashleymills 45:f68fea0831d7 145 _modem->disconnect();
ashleymills 45:f68fea0831d7 146 return outcome;
ashleymills 45:f68fea0831d7 147 }
ashleymills 45:f68fea0831d7 148
ashleymills 45:f68fea0831d7 149 void Test08::endTest() { }