For bug fixes
Fork of MTS-Socket by
Test/TestUDPSocket.h
- Committer:
- mfiore
- Date:
- 2014-06-17
- Revision:
- 10:42220b7df921
- Parent:
- 9:b2e3862705fc
- Child:
- 12:9efe3cc3cb6c
File content as of revision 10:42220b7df921:
#ifndef TESTUDPSOCKET_H #define TESTUDPSOCKET_H #include "mtsas.h" using namespace mts; class TestUDPSocket : public TestCollection { public: TestUDPSocket(); virtual void run(); private: MTSSerialFlowControl* io; Cellular* radio; UDPSocket* sock; }; const char UDP_TEST_SERVER[] = ""; const int UDP_TEST_PORT = -1; const char TEST_PATTERN[] = "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|\r\n" "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}/\r\n" "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}-\r\n" "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}\\\r\n" "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}|\r\n" "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}/\r\n" "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}-\r\n" "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}\\\r\n" "abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()[]{}*\r\n"; TestUDPSocket::TestUDPSocket() : TestCollection("TestUDPSocket") {} void TestUDPSocket::run() { const char APN[] = ""; Endpoint remote; remote.set_address(UDP_TEST_SERVER, UDP_TEST_PORT); MTSLog::setLogLevel(MTSLog::TRACE_LEVEL); Test::start("Setup"); io = new MTSSerialFlowControl(D8, D2, D3, D6); io->baud(115200); radio = CellularFactory::create(io); if (! radio) { Test::assertTrue(false); } radio->configureSignals(D4, D7, RESET); Transport::setTransport(radio); for (int i = 0; i < 10; i++) { if (i >= 10) { Test::assertTrue(false); } if (radio->setApn(APN) == 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 UDPSocket(); sock->set_blocking(false, 10000); Test::end(); /* set up an UDP echo server using netcat * nc -e /bin/cat -l -u -p TEST_PORT * this should echo back anything you send to it */ int bufsize = 1024; char buf[bufsize]; int size = 0; for (int i = 0; i < 10; i++) { Test::start("Test UDP"); logInfo("sending to remote"); size = sock->sendTo(remote, (char*) TEST_PATTERN, sizeof(TEST_PATTERN)); if (size != sizeof(TEST_PATTERN)) { logError("failed to send - only sent %d bytes", size); Test::assertTrue(false); } logInfo("receiving from remote"); size = sock->receiveFrom(remote, buf, bufsize); if (size != sizeof(TEST_PATTERN)) { logError("failed to receive - only received %d bytes", size); Test::assertTrue(false); } else { for (int j = 0; j < sizeof(TEST_PATTERN); j++) { if (buf[j] != TEST_PATTERN[j]) { logError("patterns don't match at %d, pattern [%#02X] received [%#02X]", j, TEST_PATTERN[j], buf[j]); Test::assertTrue(false); } } } Test::end(); wait(5); } } #endif