| /* -*- Mode: C++; tab-width: 4 indent-tabs-mode: nil -*- |
| * |
| * Copyright (c) 2013 Nest Labs, Inc. |
| * All rights reserved. |
| * |
| * This document is the property of Nest. It is considered |
| * confidential and proprietary information. |
| * |
| * This document may not be reproduced or transmitted in any form, |
| * in whole or in part, without the express written permission of |
| * Nest. |
| * |
| * Description: |
| * This is source file that implements gtest testcase for dynamic |
| * poll rate feature. |
| * |
| */ |
| |
| #include "cstdio" |
| #include "sys/types.h" |
| #include "gtest.h" |
| //#include "nlwpan_delegate.h" |
| #include "networkmanager-gtest-config.h" |
| #include <nlwpan.h> |
| #include <nlwpan_netif.h> |
| #include "nlnetworkmanager-device-driver-6lowpan-datapoll.hpp" |
| #include "nlnetworkmanager-device-driver-6lowpan-silabs.hpp" |
| |
| #ifdef BUILD_FEATURE_DYNAMIC_POLL_RATE |
| |
| namespace nl |
| { |
| |
| namespace Network |
| { |
| |
| namespace Manager |
| { |
| |
| namespace Device |
| { |
| |
| namespace Driver |
| { |
| |
| namespace SixLoWPAN |
| { |
| |
| DataPollTimerParams* datapoll_test_get_timerparams(DataPollTuner& tuner) { |
| return &tuner.mTimerParams; |
| } |
| |
| DataPollTuner *SiLabs :: device_driver_silabs_test_get_polltuner() { |
| return &mParentCheckTimer; |
| } |
| |
| Device::SixLoWPAN::Ember *SiLabs :: device_driver_silabs_test_get_emberDevice() { |
| return &mEmberDevice; |
| } |
| |
| int datapoll_test_get_current_algo(DataPollTuner& tuner) { |
| if (tuner.mCurrentAlgo == NULL) { |
| return 0; |
| } else if (tuner.mCurrentAlgo == &(tuner.mPollAlgo0)) { |
| return 1; |
| } else if (tuner.mCurrentAlgo == &(tuner.mPollAlgo1)) { |
| return 2; |
| } else if (tuner.mCurrentAlgo == &(tuner.mPollAlgo2)) { |
| return 3; |
| } else if (tuner.mCurrentAlgo == &(tuner.mPollAlgo3)) { |
| return 4; |
| } else { |
| return -1; |
| } |
| } |
| |
| class ShellDynamicPollTest : public testing::Test { |
| private: |
| protected: |
| |
| // Per-test-case set-up. |
| // Called before the first test in this test case. |
| // Can be omitted if not needed. |
| static void SetUpTestCase() { |
| nl_task_sleep_ms(50); |
| gtest_nm_start(); |
| nl_task_sleep_ms(50); |
| SilabInstance = &(nl::Network::Manager::Device::Driver::SixLoWPAN::SiLabs::GetInstance()); |
| }; |
| |
| // Per-test-case tear-down. |
| // Called after the last test in this test case. |
| // Can be omitted if not needed. |
| static void TearDownTestCase() { |
| nl_task_sleep_ms(50); |
| gtest_nm_stop(); |
| nl_task_sleep_ms(50); |
| SilabInstance = NULL; |
| }; |
| |
| // You can define per-test set-up and tear-down logic as usual. |
| virtual void SetUp() { |
| MY_PRINT("DynamicPollTest\(with NM running\) starts \n"); |
| }; |
| virtual void TearDown() { |
| MY_PRINT("DynamicPollTest\(with NM running\) tears down \n"); |
| }; |
| |
| public: |
| static nl::Network::Manager::Device::Driver::SixLoWPAN::SiLabs * SilabInstance; |
| }; |
| |
| nl::Network::Manager::Device::Driver::SixLoWPAN::SiLabs * ShellDynamicPollTest::SilabInstance = NULL; |
| |
| void crash(){ |
| int* a = NULL; |
| *a = 1; |
| } |
| |
| TEST_F(ShellDynamicPollTest, startAndStop) { |
| ASSERT_TRUE(SilabInstance != NULL); |
| DataPollTuner* Tuner = SilabInstance->device_driver_silabs_test_get_polltuner(); |
| Tuner->Start(static_cast<nl::Network::Manager::Technology::SixLoWPAN *>(SilabInstance->device_driver_silabs_test_get_emberDevice()->GetTechnology())); |
| nl_task_sleep_ms(50); |
| Tuner->SetStaticInterval(5000); |
| nl_task_sleep_ms(50); |
| ASSERT_TRUE(datapoll_test_get_timerparams(*Tuner)->staticInterval == 5000); |
| ASSERT_TRUE(datapoll_test_get_timerparams(*Tuner)->muxedInterval == 5000); |
| MY_PRINT("I want to crash! \n"); |
| crash(); |
| } |
| |
| class DataPollTunerTest : public testing::Test { |
| private: |
| protected: |
| |
| // Per-test-case set-up. |
| // Called before the first test in this test case. |
| // Can be omitted if not needed. |
| static void SetUpTestCase() { |
| MY_PRINT("Test set \"DataPollTunerTest\" starts: \n"); |
| }; |
| |
| // Per-test-case tear-down. |
| // Called after the last test in this test case. |
| // Can be omitted if not needed. |
| static void TearDownTestCase() { |
| MY_PRINT("Test set \"DataPollTunerTest\" ends. \n"); |
| }; |
| |
| // You can define per-test set-up and tear-down logic as usual. |
| virtual void SetUp() { |
| MY_PRINT("DataPollTunerTest testcase starts \n"); |
| }; |
| virtual void TearDown() { |
| MY_PRINT("DataPollTunerTest testcase tears down \n"); |
| }; |
| |
| public: |
| }; |
| |
| TEST_F(DataPollTunerTest, startAndStop) { |
| nl::Network::Manager::Device::Driver::SixLoWPAN::DataPollTuner Tuner; |
| nl::Network::Manager::Technology::SixLoWPAN tmpSixLoWPAN; |
| MY_PRINT("Starting Tuner \n"); |
| Tuner.Start(&tmpSixLoWPAN); |
| //nl_task_sleep_ms(50) |
| ASSERT_TRUE(datapoll_test_get_current_algo(Tuner) == 1); |
| ASSERT_TRUE(datapoll_test_get_timerparams(Tuner)->staticInterval == NLNETWORKMANAGER_DEFAULT_6LOWPAN_DATA_POLL_INTERVAL); |
| Tuner.SetPollAlgo(2); |
| ASSERT_TRUE(datapoll_test_get_current_algo(Tuner) == 3); |
| MY_PRINT("Stoping Tuner \n"); |
| Tuner.Stop(); |
| ASSERT_TRUE(datapoll_test_get_timerparams(Tuner)->muxedInterval == 0); |
| } |
| |
| TEST_F(DataPollTunerTest, dynamicInterval) { |
| nl::Network::Manager::Device::Driver::SixLoWPAN::DataPollTuner Tuner; |
| nl::Network::Manager::Technology::SixLoWPAN tmpSixLoWPAN; |
| MY_PRINT("Starting Tuner \n"); |
| Tuner.Start(&tmpSixLoWPAN); |
| //nl_task_sleep_ms(50) |
| ASSERT_TRUE(datapoll_test_get_current_algo(Tuner) == 1); |
| ASSERT_TRUE(datapoll_test_get_timerparams(Tuner)->staticInterval == NLNETWORKMANAGER_DEFAULT_6LOWPAN_DATA_POLL_INTERVAL); |
| Tuner.SetPollAlgo(2); |
| ASSERT_TRUE(datapoll_test_get_current_algo(Tuner) == 3); |
| MY_PRINT("Stoping Tuner \n"); |
| Tuner.Stop(); |
| ASSERT_TRUE(datapoll_test_get_timerparams(Tuner)->staticInterval == 0); |
| } |
| |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| #endif //BUILD_FEATURE_DYNAMIC_POLL_RATE |
| /* |
| void b(){ |
| |
| ASSERT_TRUE(false); |
| } |
| |
| void a(){ |
| b(); |
| //assert(0); |
| } |
| TEST_F(set1, testcase2) { |
| MY_PRINT("set1 testcase2 \n"); |
| ASSERT_NO_FATAL_FAILURE(a()); |
| assert(0); |
| num_of_test_run++; |
| } |
| |
| TEST_F(set2, testcase1) { |
| MY_PRINT("set2 testcase2 \n"); |
| num_of_test_run++; |
| } |
| |
| TEST_F(set2, testcase2) { |
| MY_PRINT("set2 testcase2 \n"); |
| ASSERT_TRUE(false); |
| num_of_test_run++; |
| } |
| */ |
| |