Vodafone Test Suite
Dependencies: mbed-rtos mbed HTTPClient VodafoneUSBModem
Tests/Test14.h@67:a61d60fa342c, 2012-11-01 (annotated)
- Committer:
- ashleymills
- Date:
- Thu Nov 01 15:49:08 2012 +0000
- Revision:
- 67:a61d60fa342c
- Parent:
- 66:6b00a764e549
- Child:
- 69:4fc3b0ad12c7
Updated suite to latest version of library.; Added upload test, uploads increasingly large files from 128 bytes to 1meg in powers of 2 increments.
Who changed what in which revision?
User | Revision | Line number | New 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 | 67:a61d60fa342c | 25 | if(_modem->connect("internet","web","web")==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 | }; |