Vodafone Test Suite

Dependencies:   mbed-rtos mbed HTTPClient VodafoneUSBModem

Committer:
ashleymills
Date:
Wed Jan 29 16:34:38 2014 +0000
Revision:
74:e52ac9624f7f
Parent:
69:4fc3b0ad12c7
Updated dependencies to latest versions.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ashleymills 67:a61d60fa342c 1 #pragma once
ashleymills 67:a61d60fa342c 2 #include "VodafoneTestCase.h"
ashleymills 67:a61d60fa342c 3 #include "TestHelper.h"
ashleymills 67:a61d60fa342c 4 #include "socket.h"
ashleymills 67:a61d60fa342c 5
ashleymills 67:a61d60fa342c 6 extern const char *gTest14Description;
ashleymills 67:a61d60fa342c 7
ashleymills 67:a61d60fa342c 8 class Test14 : public VodafoneTestCase {
ashleymills 67:a61d60fa342c 9 public:
ashleymills 67:a61d60fa342c 10 Test14(VodafoneUSBModem *m) : VodafoneTestCase(m) {}
ashleymills 67:a61d60fa342c 11 private:
ashleymills 67:a61d60fa342c 12
ashleymills 67:a61d60fa342c 13 virtual void setupTest(){}
ashleymills 67:a61d60fa342c 14
ashleymills 67:a61d60fa342c 15 virtual bool executeTest() {
ashleymills 67:a61d60fa342c 16 char urlBuffer[125],socketBuffer[256],strBytesToSend[32];
ashleymills 67:a61d60fa342c 17 bool outcome = true;
ashleymills 67:a61d60fa342c 18 int sockfd = NULL, socketBufferLength = 256, ret = -1;
ashleymills 67:a61d60fa342c 19 int bytesToSend = 128, nextBytesToSend = 128;
ashleymills 67:a61d60fa342c 20 unsigned char currentChar = 0;
ashleymills 67:a61d60fa342c 21 float timeOut = 1800; // half an hour
ashleymills 67:a61d60fa342c 22
ashleymills 67:a61d60fa342c 23 LOG("Description: %s",gTest14Description);
ashleymills 67:a61d60fa342c 24 LOG("Connecting to internet");
ashleymills 69:4fc3b0ad12c7 25 if(_modem->connect(APN,APN_USERNAME,APN_PASSWORD)==0) {
ashleymills 67:a61d60fa342c 26 LOG("Connected to internet");
ashleymills 67:a61d60fa342c 27 } else {
ashleymills 67:a61d60fa342c 28 LOG("Failed to connect to internet");
ashleymills 67:a61d60fa342c 29 _modem->disconnect();
ashleymills 67:a61d60fa342c 30 return false;
ashleymills 67:a61d60fa342c 31 }
ashleymills 67:a61d60fa342c 32
ashleymills 67:a61d60fa342c 33 Timer t;
ashleymills 67:a61d60fa342c 34 for(int i=0; i<14; i++) {
ashleymills 67:a61d60fa342c 35 LOG("Doing upload for %d bytes",nextBytesToSend);
ashleymills 67:a61d60fa342c 36 // connect to socket and push message
ashleymills 67:a61d60fa342c 37 if(!connectToSocket("109.74.199.96",7777,&sockfd)) {
ashleymills 67:a61d60fa342c 38 LOG("Error connecting to socket");
ashleymills 67:a61d60fa342c 39 _modem->disconnect();
ashleymills 67:a61d60fa342c 40 return false;
ashleymills 67:a61d60fa342c 41 }
ashleymills 67:a61d60fa342c 42
ashleymills 67:a61d60fa342c 43 // send password
ashleymills 67:a61d60fa342c 44 write(sockfd,"7834_0hf093",11);
ashleymills 67:a61d60fa342c 45
ashleymills 67:a61d60fa342c 46 ret = ::recv(sockfd,socketBuffer,socketBufferLength,0);
ashleymills 67:a61d60fa342c 47 socketBuffer[3] = 0x00;
ashleymills 67:a61d60fa342c 48 if(ret<0||strcmp(socketBuffer,"ACK")!=0) {
ashleymills 67:a61d60fa342c 49 LOG("Got :\"%s\"",socketBuffer);
ashleymills 67:a61d60fa342c 50 LOG("Error receiving ACK.");
ashleymills 67:a61d60fa342c 51 close(sockfd);
ashleymills 67:a61d60fa342c 52 _modem->disconnect();
ashleymills 67:a61d60fa342c 53 return false;
ashleymills 67:a61d60fa342c 54 }
ashleymills 67:a61d60fa342c 55
ashleymills 67:a61d60fa342c 56 // send file size
ashleymills 67:a61d60fa342c 57 sprintf(strBytesToSend,"%d",bytesToSend);
ashleymills 67:a61d60fa342c 58 write(sockfd,strBytesToSend,strlen(strBytesToSend));
ashleymills 67:a61d60fa342c 59
ashleymills 67:a61d60fa342c 60 // get ACK
ashleymills 67:a61d60fa342c 61 if(read(sockfd,socketBuffer,256)<=0) {
ashleymills 67:a61d60fa342c 62 LOG("Timeout or error waiting for ack\r\n");
ashleymills 67:a61d60fa342c 63 close(sockfd);
ashleymills 67:a61d60fa342c 64 _modem->disconnect();
ashleymills 67:a61d60fa342c 65 return false;
ashleymills 67:a61d60fa342c 66 }
ashleymills 67:a61d60fa342c 67
ashleymills 67:a61d60fa342c 68 socketBuffer[3] = 0x00;
ashleymills 67:a61d60fa342c 69 if(strcmp(socketBuffer,"ACK")!=0) {
ashleymills 67:a61d60fa342c 70 LOG("Failure to receive ACK\r\n");
ashleymills 67:a61d60fa342c 71 close(sockfd);
ashleymills 67:a61d60fa342c 72 _modem->disconnect();
ashleymills 67:a61d60fa342c 73 return false;
ashleymills 67:a61d60fa342c 74 }
ashleymills 67:a61d60fa342c 75
ashleymills 67:a61d60fa342c 76 // sending file
ashleymills 67:a61d60fa342c 77 t.reset();
ashleymills 67:a61d60fa342c 78 t.start();
ashleymills 67:a61d60fa342c 79 int bytesSent = 0, currentBufferSize = 0;
ashleymills 67:a61d60fa342c 80 currentChar = 0;
ashleymills 67:a61d60fa342c 81 while(bytesToSend&&t.read()<timeOut) {
ashleymills 67:a61d60fa342c 82 if(bytesToSend<socketBufferLength) {
ashleymills 67:a61d60fa342c 83 currentBufferSize = bytesToSend;
ashleymills 67:a61d60fa342c 84 } else {
ashleymills 67:a61d60fa342c 85 currentBufferSize = socketBufferLength;
ashleymills 67:a61d60fa342c 86 }
ashleymills 67:a61d60fa342c 87
ashleymills 67:a61d60fa342c 88 for(int i=0; i<currentBufferSize; i++) {
ashleymills 67:a61d60fa342c 89 socketBuffer[i] = currentChar;
ashleymills 67:a61d60fa342c 90 currentChar++;
ashleymills 67:a61d60fa342c 91 }
ashleymills 67:a61d60fa342c 92
ashleymills 67:a61d60fa342c 93 if(write(sockfd,socketBuffer,currentBufferSize)!=currentBufferSize) {
ashleymills 67:a61d60fa342c 94 LOG("Failure sending present buffer, failed at %d\r\n",bytesToSend);
ashleymills 67:a61d60fa342c 95 close(sockfd);
ashleymills 67:a61d60fa342c 96 _modem->disconnect();
ashleymills 67:a61d60fa342c 97 return false;
ashleymills 67:a61d60fa342c 98 }
ashleymills 67:a61d60fa342c 99 bytesToSend -= currentBufferSize;
ashleymills 67:a61d60fa342c 100 }
ashleymills 67:a61d60fa342c 101 t.stop();
ashleymills 67:a61d60fa342c 102
ashleymills 67:a61d60fa342c 103 if(t.read()>=timeOut) {
ashleymills 67:a61d60fa342c 104 LOG("Timeout when uploading file");
ashleymills 67:a61d60fa342c 105 close(sockfd);
ashleymills 67:a61d60fa342c 106 _modem->disconnect();
ashleymills 67:a61d60fa342c 107 return false;
ashleymills 67:a61d60fa342c 108 }
ashleymills 67:a61d60fa342c 109
ashleymills 67:a61d60fa342c 110 // wait for confirm
ashleymills 67:a61d60fa342c 111 if(read(sockfd,socketBuffer,256)<=0) {
ashleymills 67:a61d60fa342c 112 LOG("Timeout or error waiting for ack\r\n");
ashleymills 67:a61d60fa342c 113 close(sockfd);
ashleymills 67:a61d60fa342c 114 _modem->disconnect();
ashleymills 67:a61d60fa342c 115 return false;
ashleymills 67:a61d60fa342c 116 }
ashleymills 67:a61d60fa342c 117
ashleymills 67:a61d60fa342c 118 socketBuffer[3] = 0x00;
ashleymills 67:a61d60fa342c 119 if(strcmp(socketBuffer,"ACK")!=0) {
ashleymills 67:a61d60fa342c 120 LOG("Failure to receive ACK\r\n");
ashleymills 67:a61d60fa342c 121 close(sockfd);
ashleymills 67:a61d60fa342c 122 _modem->disconnect();
ashleymills 67:a61d60fa342c 123 return false;
ashleymills 67:a61d60fa342c 124 }
ashleymills 67:a61d60fa342c 125 LOG(" DONE. Sent %d bytes in %f seconds for an average of %f kb/s",
ashleymills 67:a61d60fa342c 126 nextBytesToSend,t.read(),((float)nextBytesToSend/1000.0)/t.read());
ashleymills 67:a61d60fa342c 127 close(sockfd);
ashleymills 67:a61d60fa342c 128
ashleymills 67:a61d60fa342c 129 nextBytesToSend*=2;
ashleymills 67:a61d60fa342c 130 bytesToSend = nextBytesToSend;
ashleymills 67:a61d60fa342c 131 }
ashleymills 67:a61d60fa342c 132
ashleymills 67:a61d60fa342c 133 _modem->disconnect();
ashleymills 67:a61d60fa342c 134 return true;
ashleymills 67:a61d60fa342c 135 }
ashleymills 67:a61d60fa342c 136
ashleymills 67:a61d60fa342c 137 virtual void endTest() {}
ashleymills 67:a61d60fa342c 138 char *_ussdResponse;
ashleymills 67:a61d60fa342c 139 };