increased chunk size
Fork of MTS-Socket by
Diff: Test/TestTCPSocketConnection.h
- Revision:
- 7:08b474178245
- Child:
- 8:a3b41ec82e63
diff -r 5b31d0623028 -r 08b474178245 Test/TestTCPSocketConnection.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Test/TestTCPSocketConnection.h Tue Jun 03 14:49:26 2014 +0000 @@ -0,0 +1,245 @@ +#ifndef TESTTCPSOCKETCONNECTION_H +#define TESTTCPSOCKETCONNECTION_H + +#include "mtsas.h" +#include <string> + +using namespace mts; + +class TestTCPSocketConnection : public TestCollection +{ +public: + TestTCPSocketConnection(); + virtual void run(); + +private: + bool runIteration(const string name); + MTSSerialFlowControl* io; + Cellular* radio; + TCPSocketConnection* sock; +}; + +const char PATTERN_LINE1[] = "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|"; +const char PATTERN[] = "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|" + "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}/" + "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}-" + "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}\\" + "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|" + "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}/" + "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}-" + "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}\\" + "abcdefghiiklmnopqrstuvwzyzABCDEFGHIiKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}*"; + +const char MENU_LINE1[] = "1 send ascii pattern until keypress"; +const char MENU[] = "1 send ascii pattern until keypress" + "2 send ascii pattern (numbered)" + "3 send pattern and close socket" + "4 send [ETX] and wait for keypress" + "5 send [DLE] and wait for keypress" + "6 send all hex values (00-FF)" + "q quit" + ">:"; + +const char TEST_SERVER[] = "204.26.122.5"; +const int TEST_PORT = 7000; + +TestTCPSocketConnection::TestTCPSocketConnection() : TestCollection("TestTCPSocketConnection") {} + +void TestTCPSocketConnection::run() { + MTSLog::setLogLevel(MTSLog::TRACE_LEVEL); + + Test::start("Setup"); + io = new MTSSerialFlowControl(PTD3, PTD2, PTA12, PTC8); + io->baud(115200); + radio = CellularFactory::create(io); + if (! radio) { + Test::assertTrue(false); + } + radio->configureSignals(PTA4, PTC9, PTA20); + Transport::setTransport(radio); + + for (int i = 0; i < 10; i++) { + if (i >= 10) { + Test::assertTrue(false); + } + if (radio->setApn("wap.cingular") == SUCCESS) { + break; + } else { + wait(1); + } + } + for (int i = 0; i < 3; i++) { + if (i >= 3) { + Test::assertTrue(false); + } + if (radio->connect()) { + break; + } else { + wait(1); + } + } + + for (int i = 0; i < 5; i++) { + if (i >= 5) { + Test::assertTrue(false); + } + if (radio->ping()) { + break; + } else { + wait(1); + } + } + + sock = new TCPSocketConnection(); + sock->set_blocking(false); + Test::end(); + + for (int i = 0; i < 5; i++) { + Test::assertTrue(runIteration("Iteration " + i)); + } +} + +bool TestTCPSocketConnection::runIteration(const string iteration) { + Timer tmr; + int bytesRead = 0; + const int readSize = 1024; + char buffer[readSize] = {0}; + string result; + + for (int i = 0; i < 5; i++) { + if (i >= 5) { + return false; + } + if (! sock->connect(TEST_SERVER, TEST_PORT)) { + break; + } else { + wait(1); + } + } + + logInfo("Receiving Data"); + tmr.reset(); + tmr.start(); + do { + bytesRead = sock->receive(buffer, readSize); + + if (bytesRead > 0) { + result.append(buffer, bytesRead); + } else if (bytesRead <= 0) { + break; + } + + logInfo("Total Bytes Read: %d", result.size()); + } while(tmr.read() <= 15 && result.size() < readSize); + + size_t pos = result.find(MENU_LINE1); + if(pos != string::npos) { + int patternSize = sizeof(MENU) - 1; + const char* ptr = &result.data()[pos]; + bool match = true; + for(int i = 0; i < patternSize; i++) { + if(MENU[i] != ptr[i]) { + logError("1st Pattern Doesn't Match At [%d]", i); + logError("Pattern [%02X] Buffer [%02X]", MENU[i], ptr[i]); + match = false; + break; + } + } + if(match) { + logError("Found Menu"); + } + } + + result.clear(); + + logInfo("Writing To Socket: 2"); + if(sock->send("2\r\n", 3) == 3) { + logInfo("Successfully Wrote '2'"); + } else { + logError("Failed To Write '2'"); + return false; + } + logInfo("Expecting 'how many ? >:"); + bytesRead = sock->receive(buffer, readSize); + if(bytesRead > 0) { + result.append(buffer, bytesRead); + logInfo("Received: [%d] [%s]", bytesRead, result.c_str()); + if(result.find("how many") != std::string::npos) { + logInfo("Successfully Found 'how many'"); + logInfo("Writing To Socket: 2"); + if(sock->send("2\r\n", 3) == 3) { + logInfo("Successfully wrote '2'"); + } else { + logError("Failed to write '2'"); + return false; + } + } else { + logInfo("Missing second option to menu item 2"); + } + } else { + logError("Error reading from socket"); + return false; + } + + result.clear(); + + logInfo("Receiving Data"); + tmr.reset(); + tmr.start(); + do { + bytesRead = sock->receive(buffer, readSize); + + if (bytesRead > 0) { + result.append(buffer, bytesRead); + } else if (bytesRead <= 0) { + break; + } + + logInfo("Total Bytes Read: %d", result.size()); + } while(tmr.read() <= 15 && result.size() < readSize); + + logInfo("Received Data: [%d] [%s]", result.size(), result.c_str()); + + pos = result.find(PATTERN_LINE1); + if(pos != string::npos) { + int patternSize = sizeof(PATTERN) - 1; + const char* ptr = &result.data()[pos]; + bool match = true; + for(int i = 0; i < patternSize; i++) { + if(PATTERN[i] != ptr[i]) { + logError("1st Pattern Doesn't Match At [%d]", i); + logError("Pattern [%02X] Buffer [%02X]", PATTERN[i], ptr[i]); + match = false; + break; + } + } + if(match) { + logError("Found 1st Pattern"); + } + + pos = result.find(PATTERN_LINE1, pos + patternSize); + if(pos != std::string::npos) { + ptr = &result.data()[pos]; + match = true; + for(int i = 0; i < patternSize; i++) { + if(PATTERN[i] != ptr[i]) { + logError("2nd Pattern Doesn't Match At [%d]", i); + logError("Pattern [%02X] Buffer [%02X]", PATTERN[i], ptr[i]); + match = false; + break; + } + } + if(match) { + logError("Found 2nd Pattern"); + } + } + } + + result.clear(); + + sock->close(); + + return true; +} + +#endif \ No newline at end of file