Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Test_LoRaMacCommand.cpp
00001 /* 00002 * Copyright (c) 2018, Arm Limited and affiliates 00003 * SPDX-License-Identifier: Apache-2.0 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 */ 00017 00018 #include "gtest/gtest.h" 00019 #include "LoRaMacCommand.h" 00020 00021 #include "LoRaPHY_stub.h" 00022 00023 class my_LoRaPHY : public LoRaPHY 00024 { 00025 public: 00026 my_LoRaPHY(){}; 00027 00028 virtual ~my_LoRaPHY(){}; 00029 }; 00030 00031 uint8_t my_cb() 00032 { 00033 return 1; 00034 } 00035 00036 class Test_LoRaMacCommand : public testing::Test { 00037 protected: 00038 LoRaMacCommand *object; 00039 00040 virtual void SetUp() 00041 { 00042 object = new LoRaMacCommand(); 00043 } 00044 00045 virtual void TearDown() 00046 { 00047 delete object; 00048 } 00049 }; 00050 00051 TEST_F(Test_LoRaMacCommand, constructor) 00052 { 00053 EXPECT_TRUE(object); 00054 } 00055 00056 TEST_F(Test_LoRaMacCommand, get_mac_cmd_length) 00057 { 00058 object->add_link_check_req(); 00059 EXPECT_TRUE(object->get_mac_cmd_length() == 1); 00060 object->clear_command_buffer(); 00061 EXPECT_TRUE(object->get_mac_cmd_length() == 0); 00062 } 00063 00064 TEST_F(Test_LoRaMacCommand, parse_mac_commands_to_repeat) 00065 { 00066 loramac_mlme_confirm_t mlme; 00067 lora_mac_system_params_t params; 00068 my_LoRaPHY phy; 00069 uint8_t buf[20]; 00070 00071 object->parse_mac_commands_to_repeat(); 00072 00073 buf[0] = 2; 00074 buf[1] = 16; 00075 buf[2] = 32; 00076 EXPECT_TRUE(object->process_mac_commands(buf, 0, 3, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00077 00078 buf[0] = 3; 00079 LoRaPHY_stub::uint8_value = 7; 00080 LoRaPHY_stub::linkAdrNbBytesParsed = 5; 00081 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00082 00083 buf[0] = 4; 00084 buf[1] = 2; 00085 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00086 00087 buf[0] = 5; 00088 buf[1] = 2; 00089 buf[2] = 2; 00090 buf[3] = 2; 00091 buf[4] = 2; 00092 buf[5] = 2; 00093 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00094 00095 buf[0] = 6; 00096 object->set_batterylevel_callback(my_cb); 00097 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00098 00099 buf[0] = 7; 00100 buf[1] = 2; 00101 buf[2] = 2; 00102 buf[3] = 2; 00103 buf[4] = 2; 00104 buf[5] = 2; 00105 EXPECT_TRUE(object->process_mac_commands(buf, 0, 6, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00106 00107 buf[0] = 8; 00108 buf[1] = 0; 00109 EXPECT_TRUE(object->process_mac_commands(buf, 0, 2, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00110 00111 buf[0] = 9; 00112 buf[1] = 48; 00113 EXPECT_TRUE(object->process_mac_commands(buf, 0, 2, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00114 00115 buf[0] = 10; 00116 buf[1] = 2; 00117 buf[1] = 3; 00118 buf[1] = 4; 00119 EXPECT_TRUE(object->process_mac_commands(buf, 0, 4, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00120 00121 object->parse_mac_commands_to_repeat(); 00122 } 00123 00124 TEST_F(Test_LoRaMacCommand, clear_repeat_buffer) 00125 { 00126 object->clear_repeat_buffer(); 00127 } 00128 00129 TEST_F(Test_LoRaMacCommand, copy_repeat_commands_to_buffer) 00130 { 00131 loramac_mlme_confirm_t mlme; 00132 lora_mac_system_params_t params; 00133 my_LoRaPHY phy; 00134 uint8_t buf[20]; 00135 00136 object->clear_command_buffer(); 00137 buf[0] = 5; 00138 buf[1] = 2; 00139 buf[2] = 2; 00140 buf[3] = 2; 00141 buf[4] = 2; 00142 buf[5] = 2; 00143 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00144 object->parse_mac_commands_to_repeat(); 00145 00146 object->clear_command_buffer(); 00147 EXPECT_TRUE(object->get_mac_cmd_length() == 0); 00148 00149 object->copy_repeat_commands_to_buffer(); 00150 00151 EXPECT_TRUE(object->get_mac_cmd_length() != 0); 00152 } 00153 00154 TEST_F(Test_LoRaMacCommand, get_repeat_commands_length) 00155 { 00156 EXPECT_TRUE(object->get_repeat_commands_length() == 0 ); 00157 } 00158 00159 TEST_F(Test_LoRaMacCommand, clear_sticky_mac_cmd) 00160 { 00161 loramac_mlme_confirm_t mlme; 00162 lora_mac_system_params_t params; 00163 my_LoRaPHY phy; 00164 uint8_t buf[20]; 00165 00166 EXPECT_TRUE(object->has_sticky_mac_cmd() == false); 00167 00168 object->clear_command_buffer(); 00169 buf[0] = 5; 00170 buf[1] = 2; 00171 buf[2] = 2; 00172 buf[3] = 2; 00173 buf[4] = 2; 00174 buf[5] = 2; 00175 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00176 00177 EXPECT_TRUE(object->has_sticky_mac_cmd() == true); 00178 00179 object->clear_sticky_mac_cmd(); 00180 EXPECT_TRUE(object->has_sticky_mac_cmd() == false); 00181 } 00182 00183 TEST_F(Test_LoRaMacCommand, has_sticky_mac_cmd) 00184 { 00185 loramac_mlme_confirm_t mlme; 00186 lora_mac_system_params_t params; 00187 my_LoRaPHY phy; 00188 uint8_t buf[20]; 00189 00190 EXPECT_TRUE(object->has_sticky_mac_cmd() == false); 00191 00192 object->clear_command_buffer(); 00193 buf[0] = 5; 00194 buf[1] = 2; 00195 buf[2] = 2; 00196 buf[3] = 2; 00197 buf[4] = 2; 00198 buf[5] = 2; 00199 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00200 00201 EXPECT_TRUE(object->has_sticky_mac_cmd() == true); 00202 } 00203 00204 TEST_F(Test_LoRaMacCommand, process_mac_commands) 00205 { 00206 loramac_mlme_confirm_t mlme; 00207 lora_mac_system_params_t params; 00208 my_LoRaPHY phy; 00209 uint8_t buf[20]; 00210 EXPECT_TRUE(object->process_mac_commands(NULL, 0, 0, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00211 00212 buf[0] = 2; 00213 buf[1] = 16; 00214 buf[2] = 32; 00215 EXPECT_TRUE(object->process_mac_commands(buf, 0, 3, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00216 00217 buf[0] = 3; 00218 LoRaPHY_stub::uint8_value = 7; 00219 LoRaPHY_stub::linkAdrNbBytesParsed = 5; 00220 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00221 00222 //Overflow add_link_adr_ans function here 00223 object->clear_command_buffer(); 00224 buf[0] = 3; 00225 for (int i=0; i < 64; i++) { 00226 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00227 } 00228 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_LENGTH_ERROR); 00229 00230 object->clear_command_buffer(); 00231 buf[0] = 4; 00232 buf[1] = 2; 00233 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00234 00235 //Overflow add_duty_cycle_ans() 00236 object->clear_command_buffer(); 00237 for (int i=0; i < 128; i++) { 00238 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00239 } 00240 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_LENGTH_ERROR); 00241 00242 object->clear_command_buffer(); 00243 buf[0] = 5; 00244 buf[1] = 2; 00245 buf[2] = 2; 00246 buf[3] = 2; 00247 buf[4] = 2; 00248 buf[5] = 2; 00249 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00250 00251 //Overflow add_rx_param_setup_ans 00252 object->clear_command_buffer(); 00253 LoRaPHY_stub::uint8_value = 7; 00254 for (int i=0; i < 64; i++) { 00255 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00256 } 00257 EXPECT_TRUE(object->process_mac_commands(buf, 0, 5, 0, mlme, params, phy) == LORAWAN_STATUS_LENGTH_ERROR); 00258 00259 object->clear_command_buffer(); 00260 buf[0] = 6; 00261 object->set_batterylevel_callback(my_cb); 00262 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00263 00264 //overflow add_dev_status_ans 00265 object->clear_command_buffer(); 00266 for (int i=0; i < 42; i++) { 00267 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00268 } 00269 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_LENGTH_ERROR); 00270 00271 object->clear_command_buffer(); 00272 buf[0] = 7; 00273 buf[1] = 2; 00274 buf[2] = 2; 00275 buf[3] = 2; 00276 buf[4] = 2; 00277 buf[5] = 2; 00278 EXPECT_TRUE(object->process_mac_commands(buf, 0, 6, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00279 00280 //Overflow add_new_channel_ans 00281 object->clear_command_buffer(); 00282 LoRaPHY_stub::uint8_value = 7; 00283 for (int i=0; i < 64; i++) { 00284 EXPECT_TRUE(object->process_mac_commands(buf, 0, 6, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00285 } 00286 EXPECT_TRUE(object->process_mac_commands(buf, 0, 6, 0, mlme, params, phy) == LORAWAN_STATUS_LENGTH_ERROR); 00287 00288 object->clear_command_buffer(); 00289 buf[0] = 8; 00290 buf[1] = 0; 00291 EXPECT_TRUE(object->process_mac_commands(buf, 0, 2, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00292 00293 //Overflow add_rx_timing_setup_ans 00294 object->clear_command_buffer(); 00295 LoRaPHY_stub::uint8_value = 7; 00296 for (int i=0; i < 128; i++) { 00297 EXPECT_TRUE(object->process_mac_commands(buf, 0, 2, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00298 } 00299 EXPECT_TRUE(object->process_mac_commands(buf, 0, 2, 0, mlme, params, phy) == LORAWAN_STATUS_LENGTH_ERROR); 00300 00301 object->clear_command_buffer(); 00302 buf[0] = 9; 00303 buf[1] = 48; 00304 EXPECT_TRUE(object->process_mac_commands(buf, 0, 2, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00305 00306 //Overflow add_tx_param_setup_ans 00307 LoRaPHY_stub::bool_counter = 0; 00308 LoRaPHY_stub::bool_table[0] = true; 00309 object->clear_command_buffer(); 00310 LoRaPHY_stub::uint8_value = 7; 00311 for (int i=0; i < 128; i++) { 00312 EXPECT_TRUE(object->process_mac_commands(buf, 0, 2, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00313 LoRaPHY_stub::bool_counter = 0; 00314 } 00315 EXPECT_TRUE(object->process_mac_commands(buf, 0, 2, 0, mlme, params, phy) == LORAWAN_STATUS_LENGTH_ERROR); 00316 00317 object->clear_command_buffer(); 00318 buf[0] = 10; 00319 buf[1] = 2; 00320 buf[1] = 3; 00321 buf[1] = 4; 00322 EXPECT_TRUE(object->process_mac_commands(buf, 0, 4, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00323 00324 //Overflow add_tx_param_setup_ans 00325 LoRaPHY_stub::bool_counter = 0; 00326 LoRaPHY_stub::bool_table[0] = true; 00327 object->clear_command_buffer(); 00328 LoRaPHY_stub::uint8_value = 7; 00329 for (int i=0; i < 64; i++) { 00330 EXPECT_TRUE(object->process_mac_commands(buf, 0, 4, 0, mlme, params, phy) == LORAWAN_STATUS_OK); 00331 LoRaPHY_stub::bool_counter = 0; 00332 } 00333 EXPECT_TRUE(object->process_mac_commands(buf, 0, 4, 0, mlme, params, phy) == LORAWAN_STATUS_LENGTH_ERROR); 00334 00335 object->clear_command_buffer(); 00336 buf[0] = 80; 00337 EXPECT_TRUE(object->process_mac_commands(buf, 0, 1, 0, mlme, params, phy) == LORAWAN_STATUS_UNSUPPORTED); 00338 } 00339 00340 TEST_F(Test_LoRaMacCommand, add_link_check_req) 00341 { 00342 object->add_link_check_req(); 00343 EXPECT_TRUE(object->get_mac_commands_buffer()[0] == 2); 00344 EXPECT_TRUE(object->get_mac_cmd_length() == 1); 00345 object->clear_command_buffer(); 00346 EXPECT_TRUE(object->get_mac_cmd_length() == 0); 00347 } 00348 00349 TEST_F(Test_LoRaMacCommand, set_batterylevel_callback) 00350 { 00351 object->set_batterylevel_callback(my_cb); 00352 } 00353
Generated on Tue Aug 9 2022 00:37:22 by
1.7.2