Vodafone Test Suite

Dependencies:   mbed-rtos mbed HTTPClient VodafoneUSBModem

Committer:
ashleymills
Date:
Thu Nov 01 11:19:47 2012 +0000
Revision:
66:6b00a764e549
Child:
67:a61d60fa342c
Renamed tests in sequential order to make it easier to manage and cleaner to follow.

Who changed what in which revision?

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