Add thread_network_destroy API with unittest 30/273130/1
authorhyunuk.tak <hyunuk.tak@samsung.com>
Wed, 30 Mar 2022 01:16:41 +0000 (10:16 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 31 Mar 2022 00:59:25 +0000 (09:59 +0900)
Change-Id: Ia231285ce774b9a94bc4902ba6465ef420c6c4c4
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
src/thread-network.c
tests/unittest/thread-unittest-network.cpp

index 1f62717..f222179 100644 (file)
@@ -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,
index b7f1af4..e6d17fc 100644 (file)
@@ -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