blob: a9939ec6ad7424853aa3beae32d5e410bf4b5472 [file] [log] [blame]
/* -*- 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++;
}
*/