Vodafone Test Suite

Dependencies:   mbed-rtos mbed HTTPClient VodafoneUSBModem

Tests/Test50.h

Committer:
ashleymills
Date:
2012-09-13
Revision:
34:d9e45aad85f2
Parent:
33:16126e029d58
Child:
37:847f5f86e9ff

File content as of revision 34:d9e45aad85f2:

#pragma once
#include "VodafoneTestCase.h"

static const char* gTest50Description = "x10 -> Retreive MSISDN and send SMS to self";
//const int gTest50Depends[] = {};

class Test50 : public VodafoneTestCase {
   public:
      Test50(VodafoneUSBModem *m) : VodafoneTestCase(m) {
         _smsLen = 32;
         _numberLen = 16;
         _description = gTest50Description;
         _testCaseNumber = 50;
      }
      
      virtual void setupTest() {
         allocStorage();
      }
      
      virtual void endTest() {
         freeStorage();
      }
      
      virtual bool execute() {
         LOG(gTest50Description);
         int numIterations = 10;
         size_t smCount;
         LOG("...", _testCaseNumber);
         LOG("Getting MSISDN");
         _modem->sendUSSD("*#100#",_ownNumber,_numberLen);
         LOG("Got  MSISDN %s",_ownNumber);
         for(int i=0; i<numIterations; i++) {
            createRandomString(_smsOut,_smsLen);
            if(_modem->sendSM(_ownNumber,_smsOut)!=0) {
               LOG("Error sending short message");
            }
            LOG("Created: %s",_smsOut);
            bool gotMessage = false;
            Timer t;
            t.start();
            while(!gotMessage && t.read_ms()<25000) {
               if(_modem->getSMCount(&smCount)!=0) {
                  LOG("Faiure getting SM count");
                  return false;
               }
               
               if(smCount>0) {
                  if(_modem->getSM(_senderNumber,_smsIn,_smsLen)!=0) {
                     LOG("Failure getting SM");
                     return false;
                  }
                  LOG("Got SMS: %s",_smsIn);
                  if(strcmp(_smsIn,_smsOut)!=0) {
                     LOG("FAIL: strings did not match");
                     return false;
                  }
                  gotMessage = true;
               }
               Thread::wait(50);
            }
            if(!gotMessage) {
               LOG("FAIL: timeout on waiting for SMS");
               return false;
            }
         }
         
         return true;
      }
      
   private:
      void createRandomString(char *target, int len) {
         for(int i=0; i<len; i++) {
            target[i] = 65+rand()%16;
         }
         target[len-1] = 0x00;
      }
      
      void allocStorage() {
         _ownNumber    = (char*)malloc(_numberLen*sizeof(char));
         _senderNumber = (char*)malloc(_numberLen*sizeof(char));
         _smsOut       = (char*)malloc(_smsLen*sizeof(char));
         _smsIn        = (char*)malloc(_smsLen*sizeof(char));
      }
      
      void freeStorage() {
         free(_ownNumber);
         free(_senderNumber);
         free(_smsOut);
         free(_smsIn);
      }
      
      char* _ownNumber;
      char* _senderNumber;
      char* _smsOut;
      char* _smsIn;
      int _smsLen;
      int _numberLen;
};