From 2802bff83e44cea7b8b316b0597d7a6115068638 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Wed, 30 Mar 2022 10:16:41 +0900 Subject: [PATCH] Add thread_network_destroy API with unittest Change-Id: Ia231285ce774b9a94bc4902ba6465ef420c6c4c4 Signed-off-by: hyunuk.tak --- src/thread-network.c | 23 +++++++++++++++++ tests/unittest/thread-unittest-network.cpp | 40 ++++++++++++++++++++++-------- 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/src/thread-network.c b/src/thread-network.c index 1f62717..f222179 100644 --- a/src/thread-network.c +++ b/src/thread-network.c @@ -84,6 +84,29 @@ int thread_network_create(thread_network_h *network) return THREAD_ERROR_NONE; } +int thread_network_destroy(thread_network_h network) +{ + FUNC_ENTRY; + THREAD_CHECK_SUPPORTED_FEATURE(THREAD_FEATURE_COMMON); + THREAD_CHECK_INIT_STATUS(); + THREAD_VALIDATE_INPUT_PARAMETER(network); + + thread_network_s *current_network = network; + + if (current_network->is_network_active) { + THREAD_DBG("Thread network active, can't be destroyed:: \ + First Reset the Network"); + FUNC_EXIT; + return THREAD_ERROR_OPERATION_FAILED; + } + + _thread_network_free(current_network); + current_network = NULL; + + FUNC_EXIT; + return THREAD_ERROR_NONE; +} + /* Network leader/Creator */ int thread_network_create_operational_network(thread_instance_h instance, const char *name, const char *key, const char *pskc, uint32_t channel, diff --git a/tests/unittest/thread-unittest-network.cpp b/tests/unittest/thread-unittest-network.cpp index b7f1af4..e6d17fc 100644 --- a/tests/unittest/thread-unittest-network.cpp +++ b/tests/unittest/thread-unittest-network.cpp @@ -33,6 +33,7 @@ class ThreadNetworkTest : public ::testing::Test public: thread_instance_h instance; thread_network_h network; + thread_network_h operationalNetwork; char name[NETWORK_DATA_SIZE + 1]; char key[NETWORK_DATA_SIZE + 1]; char pskc[NETWORK_DATA_SIZE + 1]; @@ -53,6 +54,7 @@ protected: thread_initialize(); instance = nullptr; network = nullptr; + operationalNetwork = nullptr; snprintf(name, NETWORK_DATA_SIZE + 1, "Thread-test"); snprintf(key, NETWORK_DATA_SIZE + 1, "f780b002ec7d904c9995daaa78a50083"); snprintf(pskc, NETWORK_DATA_SIZE + 1, "ba473fecdb235d30bd65233e6089ee50"); @@ -69,7 +71,9 @@ protected: if (instance) { if (network) - thread_network_destroy_operational_network(instance, network); + thread_network_destroy(network); + if (operationalNetwork) + thread_network_destroy_operational_network(instance, operationalNetwork); thread_disable(instance); } @@ -102,14 +106,14 @@ TEST_F(ThreadNetworkTest, CreateOperationalNetworkNotInitialized) EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_network_create_operational_network(instance, name, - key, pskc, channel, extendedPanId, panId, &network)); + key, pskc, channel, extendedPanId, panId, &operationalNetwork)); } TEST_F(ThreadNetworkTest, CreateOperationalNetworkInvalidParameter) { EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_network_create_operational_network(instance, name, - key, pskc, channel, extendedPanId, panId, &network)); + key, pskc, channel, extendedPanId, panId, &operationalNetwork)); } TEST_F(ThreadNetworkTest, CreateOperationalNetworkErrorNone) @@ -117,20 +121,20 @@ TEST_F(ThreadNetworkTest, CreateOperationalNetworkErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_network_create_operational_network(instance, name, - key, pskc, channel, extendedPanId, panId, &network)); + key, pskc, channel, extendedPanId, panId, &operationalNetwork)); } TEST_F(ThreadNetworkTest, DestroyOperationalNetworkNotInitialized) { EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, - thread_network_destroy_operational_network(instance, network)); + thread_network_destroy_operational_network(instance, operationalNetwork)); } TEST_F(ThreadNetworkTest, DestroyOperationalNetworkInvalidParameter) { EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, - thread_network_destroy_operational_network(instance, network)); + thread_network_destroy_operational_network(instance, operationalNetwork)); } TEST_F(ThreadNetworkTest, DestroyOperationalNetworkErrorNone) @@ -138,9 +142,9 @@ TEST_F(ThreadNetworkTest, DestroyOperationalNetworkErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_network_create_operational_network(instance, name, - key, pskc, channel, extendedPanId, panId, &network)); + key, pskc, channel, extendedPanId, panId, &operationalNetwork)); EXPECT_EQ(THREAD_ERROR_NONE, - thread_network_destroy_operational_network(instance, network)); + thread_network_destroy_operational_network(instance, operationalNetwork)); } TEST_F(ThreadNetworkTest, SetActiveDatasetTlvsNotInitialized) @@ -220,7 +224,7 @@ TEST_F(ThreadNetworkTest, DetachErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_network_create_operational_network(instance, name, - key, pskc, channel, extendedPanId, panId, &network)); + key, pskc, channel, extendedPanId, panId, &operationalNetwork)); EXPECT_EQ(THREAD_ERROR_NONE, thread_network_detach(instance)); } @@ -334,6 +338,22 @@ TEST_F(ThreadNetworkTest, CreateInvalidParameter) TEST_F(ThreadNetworkTest, CreateErrorNone) { - EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_network_create(&network)); } + +TEST_F(ThreadNetworkTest, DestroyNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, thread_network_destroy(network)); +} + +TEST_F(ThreadNetworkTest, DestroyInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, thread_network_destroy(nullptr)); +} + +TEST_F(ThreadNetworkTest, DestroyErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_network_create(&network)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_network_destroy(network)); +} \ No newline at end of file -- 2.7.4