diff --git a/features/cellular/UNITTESTS/at/at_cellularinformation/at_cellularinformationtest.cpp b/features/cellular/UNITTESTS/at/at_cellularinformation/at_cellularinformationtest.cpp index 0fec4753c1..728a987faa 100644 --- a/features/cellular/UNITTESTS/at/at_cellularinformation/at_cellularinformationtest.cpp +++ b/features/cellular/UNITTESTS/at/at_cellularinformation/at_cellularinformationtest.cpp @@ -52,3 +52,7 @@ TEST(AT_CellularInformation, test_AT_CellularInformation_get_revision) unit->test_AT_CellularInformation_get_revision(); } +TEST(AT_CellularInformation, test_AT_CellularInformation_get_serial_number) +{ + unit->test_AT_CellularInformation_get_serial_number(); +} diff --git a/features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.cpp b/features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.cpp index 2c182d98bf..221ee054f9 100644 --- a/features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.cpp +++ b/features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.cpp @@ -20,6 +20,7 @@ #include "ATHandler_stub.h" #include "EventQueue.h" #include "FileHandle_stub.h" +#include "AT_CellularBase_stub.h" #include "ATHandler.h" #include "AT_CellularInformation.h" #include "AT_CellularBase.h" @@ -43,10 +44,19 @@ void Test_AT_CellularInformation::test_AT_CellularInformation_get_manufacturer() ATHandler ah(&fh, eq, 0, ","); AT_CellularInformation aci(ah); - ATHandler_stub::nsapi_error_value = 8; + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK; + ATHandler_stub::read_string_value = "some"; + ATHandler_stub::ssize_value = 4; char buf[8]; - CHECK(8 == aci.get_manufacturer(buf, 8)); + CHECK(NSAPI_ERROR_OK == aci.get_manufacturer(buf, 8)); + CHECK(strcmp("some", buf) == 0); + + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR; + ATHandler_stub::ssize_value = -1; + buf[0] = 0; + CHECK(NSAPI_ERROR_DEVICE_ERROR == aci.get_manufacturer(buf, 8)); + CHECK(strlen(buf) == 0); } void Test_AT_CellularInformation::test_AT_CellularInformation_get_model() @@ -56,10 +66,18 @@ void Test_AT_CellularInformation::test_AT_CellularInformation_get_model() ATHandler ah(&fh, eq, 0, ","); AT_CellularInformation aci(ah); - ATHandler_stub::nsapi_error_value = 7; - + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK; + ATHandler_stub::read_string_value = "model"; + ATHandler_stub::ssize_value = 5; char buf[8]; - CHECK(7 == aci.get_model(buf, 8)); + CHECK(NSAPI_ERROR_OK == aci.get_model(buf, 8)); + CHECK(strcmp("model", buf) == 0); + + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR; + ATHandler_stub::ssize_value = -1; + buf[0] = 0; + CHECK(NSAPI_ERROR_DEVICE_ERROR == aci.get_model(buf, 8)); + CHECK(strlen(buf) == 0); } void Test_AT_CellularInformation::test_AT_CellularInformation_get_revision() @@ -71,11 +89,53 @@ void Test_AT_CellularInformation::test_AT_CellularInformation_get_revision() //Used heap var here to visit heap constructor AT_CellularInformation *aci = new AT_CellularInformation(ah); - ATHandler_stub::nsapi_error_value = 6; + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK; + ATHandler_stub::read_string_value = "revision"; + ATHandler_stub::ssize_value = 8; - char buf[8]; - CHECK(6 == aci->get_revision(buf, 8)); + char buf[9]; + CHECK(NSAPI_ERROR_OK == aci->get_revision(buf, 9)); + CHECK(strcmp("revision", buf) == 0); + + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR; + ATHandler_stub::ssize_value = -1; + buf[0] = 0; + CHECK(NSAPI_ERROR_DEVICE_ERROR == aci->get_revision(buf, 8)); + CHECK(strlen(buf) == 0); delete aci; } +void Test_AT_CellularInformation::test_AT_CellularInformation_get_serial_number() +{ + EventQueue eq; + FileHandle_stub fh; + ATHandler ah(&fh, eq, 0, ","); + AT_CellularInformation aci(ah); + + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK; + ATHandler_stub::read_string_value = "1234567"; + ATHandler_stub::ssize_value = 7; + char buf[8]; + + CHECK(NSAPI_ERROR_OK == aci.get_serial_number(buf, 8, CellularInformation::SN)); + CHECK(strcmp("1234567", buf) == 0); + + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR; + ATHandler_stub::ssize_value = -1; + buf[0] = 0; + CHECK(NSAPI_ERROR_DEVICE_ERROR == aci.get_serial_number(buf, 8, CellularInformation::SN)); + CHECK(strlen(buf) == 0); + + AT_CellularBase_stub::supported_bool = false; + CHECK(NSAPI_ERROR_UNSUPPORTED == aci.get_serial_number(buf, 8, CellularInformation::IMEI)); + CHECK(strlen(buf) == 0); + + ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK; + ATHandler_stub::read_string_value = "1234567"; + ATHandler_stub::ssize_value = 7; + AT_CellularBase_stub::supported_bool = true; + CHECK(NSAPI_ERROR_OK == aci.get_serial_number(buf, 8, CellularInformation::IMEI)); + CHECK(strcmp("1234567", buf) == 0); +} + diff --git a/features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.h b/features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.h index 458d5a0810..5a94d54be7 100644 --- a/features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.h +++ b/features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.h @@ -29,6 +29,8 @@ public: void test_AT_CellularInformation_get_model(); void test_AT_CellularInformation_get_revision(); + + void test_AT_CellularInformation_get_serial_number(); }; #endif // TEST_AT_CELLULARINFORMATION_H diff --git a/features/cellular/UNITTESTS/stubs/ATHandler_stub.cpp b/features/cellular/UNITTESTS/stubs/ATHandler_stub.cpp index 3917c7a733..8112dee82d 100644 --- a/features/cellular/UNITTESTS/stubs/ATHandler_stub.cpp +++ b/features/cellular/UNITTESTS/stubs/ATHandler_stub.cpp @@ -164,7 +164,7 @@ ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag) if (ATHandler_stub::read_string_index == kRead_string_table_size) { if (ATHandler_stub::read_string_value && ATHandler_stub::ssize_value >= 0) { - memcpy(buf, ATHandler_stub::read_string_value, ATHandler_stub::ssize_value); + memcpy(buf, ATHandler_stub::read_string_value, ATHandler_stub::ssize_value+1); } return ATHandler_stub::ssize_value; } diff --git a/features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.cpp b/features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.cpp index e7e37ac15e..41ecca4656 100644 --- a/features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.cpp +++ b/features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.cpp @@ -25,6 +25,7 @@ using namespace mbed; ATHandler *AT_CellularBase_stub::handler_value = NULL; ATHandler *AT_CellularBase_stub::handler_at_constructor_value = NULL; device_err_t AT_CellularBase_stub::device_err_value; +bool AT_CellularBase_stub::supported_bool = true; AT_CellularBase::AT_CellularBase(ATHandler& at) : _at(at) { @@ -43,5 +44,5 @@ device_err_t AT_CellularBase::get_device_error() const bool AT_CellularBase::is_supported(SupportedFeature feature) { - return true; + return AT_CellularBase_stub::supported_bool; } diff --git a/features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.h b/features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.h index dd57c8a547..971fac848b 100644 --- a/features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.h +++ b/features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.h @@ -21,4 +21,5 @@ namespace AT_CellularBase_stub { extern mbed::ATHandler *handler_value; extern mbed::ATHandler *handler_at_constructor_value; extern mbed::device_err_t device_err_value; + extern bool supported_bool; } diff --git a/features/cellular/UNITTESTS/stubs/SocketAddress_stub.cpp b/features/cellular/UNITTESTS/stubs/SocketAddress_stub.cpp index 76d38dc810..76e02aa12b 100644 --- a/features/cellular/UNITTESTS/stubs/SocketAddress_stub.cpp +++ b/features/cellular/UNITTESTS/stubs/SocketAddress_stub.cpp @@ -73,6 +73,10 @@ SocketAddress::SocketAddress(const SocketAddress &addr) { } +SocketAddress::~SocketAddress() +{ +} + bool SocketAddress::set_ip_address(const char *addr) { return false; @@ -123,6 +127,13 @@ SocketAddress::operator bool() const return false; } +SocketAddress &SocketAddress::operator=(const SocketAddress &addr) +{ + set_addr(addr.get_addr()); + set_port(addr.get_port()); + return *this; +} + bool operator==(const SocketAddress &a, const SocketAddress &b) { return false;