Vodafone Test Suite

Dependencies:   mbed-rtos mbed HTTPClient VodafoneUSBModem

Revision:
67:a61d60fa342c
Parent:
66:6b00a764e549
Child:
69:4fc3b0ad12c7
--- a/Tests/Test14.h	Thu Nov 01 11:19:47 2012 +0000
+++ b/Tests/Test14.h	Thu Nov 01 15:49:08 2012 +0000
@@ -0,0 +1,139 @@
+#pragma once
+#include "VodafoneTestCase.h"
+#include "TestHelper.h"
+#include "socket.h"
+
+extern const char *gTest14Description;
+
+class Test14 : public VodafoneTestCase {
+   public: 
+      Test14(VodafoneUSBModem *m) : VodafoneTestCase(m) {}
+   private:
+   
+      virtual void setupTest(){}
+      
+      virtual bool executeTest() {
+         char urlBuffer[125],socketBuffer[256],strBytesToSend[32];
+         bool outcome = true;
+         int sockfd = NULL, socketBufferLength = 256, ret = -1;
+         int bytesToSend = 128, nextBytesToSend = 128;
+         unsigned char currentChar = 0;
+         float timeOut = 1800; // half an hour
+         
+         LOG("Description: %s",gTest14Description);
+         LOG("Connecting to internet");
+         if(_modem->connect("internet","web","web")==0) {
+            LOG("Connected to internet");
+         } else {
+            LOG("Failed to connect to internet");
+            _modem->disconnect();
+            return false;
+         }
+         
+         Timer t;
+         for(int i=0; i<14; i++) {
+            LOG("Doing upload for %d bytes",nextBytesToSend);
+            // connect to socket and push message
+            if(!connectToSocket("109.74.199.96",7777,&sockfd)) {
+               LOG("Error connecting to socket");
+               _modem->disconnect();
+               return false;
+            }
+            
+            // send password
+            write(sockfd,"7834_0hf093",11);
+                   
+            ret = ::recv(sockfd,socketBuffer,socketBufferLength,0);
+            socketBuffer[3] = 0x00;
+            if(ret<0||strcmp(socketBuffer,"ACK")!=0) {
+               LOG("Got :\"%s\"",socketBuffer);
+               LOG("Error receiving ACK.");
+               close(sockfd);
+               _modem->disconnect();
+               return false;
+            } 
+        
+            // send file size
+            sprintf(strBytesToSend,"%d",bytesToSend);
+            write(sockfd,strBytesToSend,strlen(strBytesToSend));
+
+            // get ACK
+            if(read(sockfd,socketBuffer,256)<=0) {
+               LOG("Timeout or error waiting for ack\r\n");
+               close(sockfd);
+               _modem->disconnect();
+               return false;
+            }
+
+            socketBuffer[3] = 0x00;
+            if(strcmp(socketBuffer,"ACK")!=0) {
+               LOG("Failure to receive ACK\r\n");
+               close(sockfd);
+               _modem->disconnect();
+               return false;
+            }
+
+            // sending file
+            t.reset();
+            t.start();
+            int bytesSent = 0, currentBufferSize = 0;
+            currentChar = 0;
+            while(bytesToSend&&t.read()<timeOut) {
+               if(bytesToSend<socketBufferLength) {
+                  currentBufferSize = bytesToSend;
+               } else {
+                  currentBufferSize = socketBufferLength;
+               }
+
+               for(int i=0; i<currentBufferSize; i++) {
+                  socketBuffer[i] = currentChar;
+                  currentChar++;
+               }
+
+               if(write(sockfd,socketBuffer,currentBufferSize)!=currentBufferSize) {
+                  LOG("Failure sending present buffer, failed at %d\r\n",bytesToSend);
+                  close(sockfd);
+                  _modem->disconnect();
+                  return false;
+               }
+               bytesToSend -= currentBufferSize;
+            }
+            t.stop();
+            
+            if(t.read()>=timeOut) {
+               LOG("Timeout when uploading file");
+               close(sockfd);
+               _modem->disconnect();
+               return false;
+            }
+
+            // wait for confirm
+            if(read(sockfd,socketBuffer,256)<=0) {
+               LOG("Timeout or error waiting for ack\r\n");
+               close(sockfd);
+               _modem->disconnect();
+               return false;
+            }
+
+            socketBuffer[3] = 0x00;
+            if(strcmp(socketBuffer,"ACK")!=0) {
+               LOG("Failure to receive ACK\r\n");
+               close(sockfd);
+               _modem->disconnect();
+               return false;
+            }
+            LOG("   DONE. Sent %d bytes in %f seconds for an average of %f kb/s",
+               nextBytesToSend,t.read(),((float)nextBytesToSend/1000.0)/t.read());
+            close(sockfd);
+         
+            nextBytesToSend*=2;
+            bytesToSend = nextBytesToSend;
+         }
+         
+         _modem->disconnect();
+         return true;
+      }
+      
+      virtual void endTest() {}
+      char *_ussdResponse;
+};
\ No newline at end of file