takashi kadono / Mbed OS Nucleo_446

Dependencies:   ssd1331

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Test_LoRaMacCommand.cpp Source File

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