Skip to content

Commit 8fab40a

Browse files
author
Cruz Monrreal
authored
Merge pull request #7286 from jarvte/add_cellular_information_tests
Add cellular information tests
2 parents 9adcf96 + f64c84b commit 8fab40a

File tree

12 files changed

+241
-31
lines changed

12 files changed

+241
-31
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
/*
2+
* Copyright (c) 2018, Arm Limited and affiliates.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
19+
#if !defined(MBED_CONF_NSAPI_PRESENT)
20+
#error [NOT_SUPPORTED] A json configuration file is needed. Skipping this build.
21+
#endif
22+
23+
#include "CellularUtil.h" // for CELLULAR_ helper macros
24+
#include "CellularTargets.h"
25+
26+
#ifndef CELLULAR_DEVICE
27+
#error [NOT_SUPPORTED] CELLULAR_DEVICE must be defined
28+
#endif
29+
30+
#ifndef MBED_CONF_APP_CELLULAR_SIM_PIN
31+
#error [NOT_SUPPORTED] SIM pin code is needed. Skipping this build.
32+
#endif
33+
34+
#include "greentea-client/test_env.h"
35+
#include "unity.h"
36+
#include "utest.h"
37+
38+
#include "mbed.h"
39+
40+
#include "CellularConnectionFSM.h"
41+
#include "CellularDevice.h"
42+
#include "../../cellular_tests_common.h"
43+
44+
#define SIM_TIMEOUT (180*1000)
45+
46+
static UARTSerial cellular_serial(MDMTXD, MDMRXD, MBED_CONF_PLATFORM_DEFAULT_SERIAL_BAUD_RATE);
47+
static EventQueue queue(2 * EVENTS_EVENT_SIZE);
48+
static CellularConnectionFSM cellular;
49+
static CellularConnectionFSM::CellularState cellular_target_state;
50+
static rtos::Semaphore fsm_semaphore(0);
51+
52+
static bool fsm_callback(int state, int next_state)
53+
{
54+
if (next_state == CellularConnectionFSM::STATE_SIM_PIN) {
55+
TEST_ASSERT(fsm_semaphore.release() == osOK);
56+
return false;
57+
}
58+
return true;
59+
}
60+
61+
static void init_to_sim_state()
62+
{
63+
cellular.set_serial(&cellular_serial);
64+
TEST_ASSERT(cellular.init() == NSAPI_ERROR_OK);
65+
#if defined (MDMRTS) && defined (MDMCTS)
66+
cellular_serial.set_flow_control(SerialBase::RTSCTS, MDMRTS, MDMCTS);
67+
#endif
68+
cellular.set_callback(&fsm_callback);
69+
TEST_ASSERT(cellular.start_dispatch() == NSAPI_ERROR_OK);
70+
cellular_target_state = CellularConnectionFSM::STATE_SIM_PIN;
71+
TEST_ASSERT(cellular.continue_to_state(cellular_target_state) == NSAPI_ERROR_OK);
72+
TEST_ASSERT(fsm_semaphore.wait(SIM_TIMEOUT) == 1);
73+
}
74+
75+
static void test_information_interface()
76+
{
77+
CellularInformation *info = cellular.get_device()->open_information(&cellular_serial);
78+
const int kbuf_size = 100;
79+
char *buf = (char*)malloc(sizeof(char) * kbuf_size);
80+
81+
TEST_ASSERT(info->get_manufacturer(buf, kbuf_size) == NSAPI_ERROR_OK);
82+
TEST_ASSERT(info->get_model(buf, kbuf_size) == NSAPI_ERROR_OK);
83+
TEST_ASSERT(info->get_revision(buf, kbuf_size) == NSAPI_ERROR_OK);
84+
TEST_ASSERT(info->get_serial_number(buf, kbuf_size, CellularInformation::SN) == NSAPI_ERROR_OK);
85+
86+
nsapi_error_t err = info->get_serial_number(buf, kbuf_size, CellularInformation::IMEI);
87+
TEST_ASSERT(err == NSAPI_ERROR_UNSUPPORTED || err == NSAPI_ERROR_OK);
88+
89+
err = info->get_serial_number(buf, kbuf_size, CellularInformation::IMEISV);
90+
TEST_ASSERT(err == NSAPI_ERROR_UNSUPPORTED || err == NSAPI_ERROR_OK);
91+
92+
err = info->get_serial_number(buf, kbuf_size, CellularInformation::SVN);
93+
TEST_ASSERT(err == NSAPI_ERROR_UNSUPPORTED || err == NSAPI_ERROR_OK);
94+
95+
cellular.get_device()->close_information();
96+
97+
free(buf);
98+
}
99+
100+
using namespace utest::v1;
101+
102+
static utest::v1::status_t greentea_failure_handler(const Case *const source, const failure_t reason)
103+
{
104+
greentea_case_failure_abort_handler(source, reason);
105+
return STATUS_ABORT;
106+
}
107+
108+
static Case cases[] = {
109+
Case("CellularInformation init", init_to_sim_state, greentea_failure_handler),
110+
Case("CellularInformation test interface", test_information_interface, greentea_failure_handler)
111+
};
112+
113+
static utest::v1::status_t test_setup(const size_t number_of_cases)
114+
{
115+
GREENTEA_SETUP(10*60, "default_auto");
116+
return verbose_test_setup_handler(number_of_cases);
117+
}
118+
119+
static Specification specification(test_setup, cases);
120+
121+
int main()
122+
{
123+
#if MBED_CONF_MBED_TRACE_ENABLE
124+
trace_open();
125+
#endif
126+
int ret = Harness::run(specification);
127+
#if MBED_CONF_MBED_TRACE_ENABLE
128+
trace_close();
129+
#endif
130+
return ret;
131+
}

features/cellular/TESTS/api/cellular_power/main.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,17 @@ static void urc_callback()
5454
static void wait_for_power(CellularPower* pwr)
5555
{
5656
nsapi_error_t err = pwr->set_device_ready_urc_cb(&urc_callback);
57-
MBED_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_UNSUPPORTED);
57+
TEST_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_UNSUPPORTED);
5858

5959
int sanity_count = 0;
6060
while (pwr->is_device_ready() != NSAPI_ERROR_OK) {
6161
sanity_count++;
6262
wait(1);
63-
MBED_ASSERT(sanity_count < 20);
63+
TEST_ASSERT(sanity_count < 20);
6464
}
6565

6666
err = pwr->set_at_mode();
67-
MBED_ASSERT(err == NSAPI_ERROR_OK);
67+
TEST_ASSERT(err == NSAPI_ERROR_OK);
6868

6969
pwr->remove_device_ready_urc_cb(&urc_callback);
7070
}
@@ -75,17 +75,17 @@ static void test_power_interface()
7575
CellularPower* pwr = cellular_device->open_power(&cellular_serial);
7676

7777
nsapi_error_t err = pwr->on();
78-
MBED_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_UNSUPPORTED);
78+
TEST_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_UNSUPPORTED);
7979
wait_for_power(pwr);
8080

81-
MBED_ASSERT(pwr->set_power_level(1,0) == NSAPI_ERROR_OK);
81+
TEST_ASSERT(pwr->set_power_level(1,0) == NSAPI_ERROR_OK);
8282

8383
err = pwr->reset();
84-
MBED_ASSERT(err == NSAPI_ERROR_OK);
84+
TEST_ASSERT(err == NSAPI_ERROR_OK);
8585
wait_for_power(pwr);
8686

8787
err = pwr->off();
88-
MBED_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_UNSUPPORTED);
88+
TEST_ASSERT(err == NSAPI_ERROR_OK || err == NSAPI_ERROR_UNSUPPORTED);
8989
}
9090

9191
using namespace utest::v1;

features/cellular/TESTS/api/cellular_sim/main.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ static char *get_rand_string(char *str, size_t size)
6767
static bool fsm_callback(int state, int next_state)
6868
{
6969
if (next_state == CellularConnectionFSM::STATE_SIM_PIN) {
70-
MBED_ASSERT(network_semaphore.release() == osOK);
70+
TEST_ASSERT(network_semaphore.release() == osOK);
7171
return false;
7272
}
7373
return true;
@@ -106,27 +106,27 @@ static void test_sim_interface()
106106

107107
// change pin and change it back
108108
err = sim->change_pin(MBED_CONF_APP_CELLULAR_SIM_PIN, pin);
109-
MBED_ASSERT(err == NSAPI_ERROR_OK);
109+
TEST_ASSERT(err == NSAPI_ERROR_OK);
110110
err = sim->change_pin(pin, MBED_CONF_APP_CELLULAR_SIM_PIN);
111-
MBED_ASSERT(err == NSAPI_ERROR_OK);
111+
TEST_ASSERT(err == NSAPI_ERROR_OK);
112112

113113
// 3. test set_pin_query
114114
err = sim->set_pin_query(MBED_CONF_APP_CELLULAR_SIM_PIN, false);
115-
MBED_ASSERT(err == NSAPI_ERROR_OK);
115+
TEST_ASSERT(err == NSAPI_ERROR_OK);
116116
err = sim->set_pin_query(MBED_CONF_APP_CELLULAR_SIM_PIN, true);
117-
MBED_ASSERT(err == NSAPI_ERROR_OK);
117+
TEST_ASSERT(err == NSAPI_ERROR_OK);
118118

119119
// 4. test get_sim_state
120120
CellularSIM::SimState state;
121121
err = sim->get_sim_state(state);
122-
MBED_ASSERT(err == NSAPI_ERROR_OK);
123-
MBED_ASSERT(state == CellularSIM::SimStateReady);
122+
TEST_ASSERT(err == NSAPI_ERROR_OK);
123+
TEST_ASSERT(state == CellularSIM::SimStateReady);
124124

125125
// 5. test get_imsi
126126
char imsi[16] = {0};
127127
err = sim->get_imsi(imsi);
128-
MBED_ASSERT(err == NSAPI_ERROR_OK);
129-
MBED_ASSERT(strlen(imsi) > 0);
128+
TEST_ASSERT(err == NSAPI_ERROR_OK);
129+
TEST_ASSERT(strlen(imsi) > 0);
130130
}
131131

132132
using namespace utest::v1;

features/cellular/TESTS/socket/udp/main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ static void network_callback(nsapi_event_t ev, intptr_t ptr)
145145
{
146146
if (ev == NSAPI_EVENT_CONNECTION_STATUS_CHANGE) {
147147
if (ptr == NSAPI_STATUS_GLOBAL_UP) {
148-
MBED_ASSERT(network_semaphore.release() == osOK);
148+
TEST_ASSERT(network_semaphore.release() == osOK);
149149
}
150150
}
151151
}

features/cellular/UNITTESTS/at/at_cellularinformation/at_cellularinformationtest.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,7 @@ TEST(AT_CellularInformation, test_AT_CellularInformation_get_revision)
5252
unit->test_AT_CellularInformation_get_revision();
5353
}
5454

55+
TEST(AT_CellularInformation, test_AT_CellularInformation_get_serial_number)
56+
{
57+
unit->test_AT_CellularInformation_get_serial_number();
58+
}

features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.cpp

Lines changed: 68 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "ATHandler_stub.h"
2121
#include "EventQueue.h"
2222
#include "FileHandle_stub.h"
23+
#include "AT_CellularBase_stub.h"
2324
#include "ATHandler.h"
2425
#include "AT_CellularInformation.h"
2526
#include "AT_CellularBase.h"
@@ -43,10 +44,19 @@ void Test_AT_CellularInformation::test_AT_CellularInformation_get_manufacturer()
4344
ATHandler ah(&fh, eq, 0, ",");
4445
AT_CellularInformation aci(ah);
4546

46-
ATHandler_stub::nsapi_error_value = 8;
47+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
48+
ATHandler_stub::read_string_value = "some";
49+
ATHandler_stub::ssize_value = 4;
4750

4851
char buf[8];
49-
CHECK(8 == aci.get_manufacturer(buf, 8));
52+
CHECK(NSAPI_ERROR_OK == aci.get_manufacturer(buf, 8));
53+
CHECK(strcmp("some", buf) == 0);
54+
55+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
56+
ATHandler_stub::ssize_value = -1;
57+
buf[0] = 0;
58+
CHECK(NSAPI_ERROR_DEVICE_ERROR == aci.get_manufacturer(buf, 8));
59+
CHECK(strlen(buf) == 0);
5060
}
5161

5262
void Test_AT_CellularInformation::test_AT_CellularInformation_get_model()
@@ -56,10 +66,18 @@ void Test_AT_CellularInformation::test_AT_CellularInformation_get_model()
5666
ATHandler ah(&fh, eq, 0, ",");
5767
AT_CellularInformation aci(ah);
5868

59-
ATHandler_stub::nsapi_error_value = 7;
60-
69+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
70+
ATHandler_stub::read_string_value = "model";
71+
ATHandler_stub::ssize_value = 5;
6172
char buf[8];
62-
CHECK(7 == aci.get_model(buf, 8));
73+
CHECK(NSAPI_ERROR_OK == aci.get_model(buf, 8));
74+
CHECK(strcmp("model", buf) == 0);
75+
76+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
77+
ATHandler_stub::ssize_value = -1;
78+
buf[0] = 0;
79+
CHECK(NSAPI_ERROR_DEVICE_ERROR == aci.get_model(buf, 8));
80+
CHECK(strlen(buf) == 0);
6381
}
6482

6583
void Test_AT_CellularInformation::test_AT_CellularInformation_get_revision()
@@ -71,11 +89,53 @@ void Test_AT_CellularInformation::test_AT_CellularInformation_get_revision()
7189
//Used heap var here to visit heap constructor
7290
AT_CellularInformation *aci = new AT_CellularInformation(ah);
7391

74-
ATHandler_stub::nsapi_error_value = 6;
92+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
93+
ATHandler_stub::read_string_value = "revision";
94+
ATHandler_stub::ssize_value = 8;
7595

76-
char buf[8];
77-
CHECK(6 == aci->get_revision(buf, 8));
96+
char buf[9];
97+
CHECK(NSAPI_ERROR_OK == aci->get_revision(buf, 9));
98+
CHECK(strcmp("revision", buf) == 0);
99+
100+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
101+
ATHandler_stub::ssize_value = -1;
102+
buf[0] = 0;
103+
CHECK(NSAPI_ERROR_DEVICE_ERROR == aci->get_revision(buf, 8));
104+
CHECK(strlen(buf) == 0);
78105

79106
delete aci;
80107
}
81108

109+
void Test_AT_CellularInformation::test_AT_CellularInformation_get_serial_number()
110+
{
111+
EventQueue eq;
112+
FileHandle_stub fh;
113+
ATHandler ah(&fh, eq, 0, ",");
114+
AT_CellularInformation aci(ah);
115+
116+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
117+
ATHandler_stub::read_string_value = "1234567";
118+
ATHandler_stub::ssize_value = 7;
119+
char buf[8];
120+
121+
CHECK(NSAPI_ERROR_OK == aci.get_serial_number(buf, 8, CellularInformation::SN));
122+
CHECK(strcmp("1234567", buf) == 0);
123+
124+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_DEVICE_ERROR;
125+
ATHandler_stub::ssize_value = -1;
126+
buf[0] = 0;
127+
CHECK(NSAPI_ERROR_DEVICE_ERROR == aci.get_serial_number(buf, 8, CellularInformation::SN));
128+
CHECK(strlen(buf) == 0);
129+
130+
AT_CellularBase_stub::supported_bool = false;
131+
CHECK(NSAPI_ERROR_UNSUPPORTED == aci.get_serial_number(buf, 8, CellularInformation::IMEI));
132+
CHECK(strlen(buf) == 0);
133+
134+
ATHandler_stub::nsapi_error_value = NSAPI_ERROR_OK;
135+
ATHandler_stub::read_string_value = "1234567";
136+
ATHandler_stub::ssize_value = 7;
137+
AT_CellularBase_stub::supported_bool = true;
138+
CHECK(NSAPI_ERROR_OK == aci.get_serial_number(buf, 8, CellularInformation::IMEI));
139+
CHECK(strcmp("1234567", buf) == 0);
140+
}
141+

features/cellular/UNITTESTS/at/at_cellularinformation/test_at_cellularinformation.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class Test_AT_CellularInformation
2929
void test_AT_CellularInformation_get_model();
3030

3131
void test_AT_CellularInformation_get_revision();
32+
33+
void test_AT_CellularInformation_get_serial_number();
3234
};
3335

3436
#endif // TEST_AT_CELLULARINFORMATION_H

features/cellular/UNITTESTS/stubs/ATHandler_stub.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ ssize_t ATHandler::read_string(char *buf, size_t size, bool read_even_stop_tag)
164164

165165
if (ATHandler_stub::read_string_index == kRead_string_table_size) {
166166
if (ATHandler_stub::read_string_value && ATHandler_stub::ssize_value >= 0) {
167-
memcpy(buf, ATHandler_stub::read_string_value, ATHandler_stub::ssize_value);
167+
memcpy(buf, ATHandler_stub::read_string_value, ATHandler_stub::ssize_value+1);
168168
}
169169
return ATHandler_stub::ssize_value;
170170
}

features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ using namespace mbed;
2525
ATHandler *AT_CellularBase_stub::handler_value = NULL;
2626
ATHandler *AT_CellularBase_stub::handler_at_constructor_value = NULL;
2727
device_err_t AT_CellularBase_stub::device_err_value;
28+
bool AT_CellularBase_stub::supported_bool = true;
2829

2930
AT_CellularBase::AT_CellularBase(ATHandler& at) : _at(at)
3031
{
@@ -43,5 +44,5 @@ device_err_t AT_CellularBase::get_device_error() const
4344

4445
bool AT_CellularBase::is_supported(SupportedFeature feature)
4546
{
46-
return true;
47+
return AT_CellularBase_stub::supported_bool;
4748
}

features/cellular/UNITTESTS/stubs/AT_CellularBase_stub.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ namespace AT_CellularBase_stub {
2121
extern mbed::ATHandler *handler_value;
2222
extern mbed::ATHandler *handler_at_constructor_value;
2323
extern mbed::device_err_t device_err_value;
24+
extern bool supported_bool;
2425
}

0 commit comments

Comments
 (0)