[CodeClean] separate meta
authorJaeyun <jy1210.jung@samsung.com>
Thu, 8 Sep 2022 06:27:39 +0000 (15:27 +0900)
committerSangjung Woo <again4you@gmail.com>
Thu, 15 Sep 2022 05:22:36 +0000 (14:22 +0900)
Internal util functions to handle metadata.

Signed-off-by: Jaeyun <jy1210.jung@samsung.com>
12 files changed:
src/CMakeLists.txt
src/libnnstreamer-edge/nnstreamer-edge-aitt.c
src/libnnstreamer-edge/nnstreamer-edge-common.c [deleted file]
src/libnnstreamer-edge/nnstreamer-edge-common.h [deleted file]
src/libnnstreamer-edge/nnstreamer-edge-data.c
src/libnnstreamer-edge/nnstreamer-edge-data.h
src/libnnstreamer-edge/nnstreamer-edge-internal.c
src/libnnstreamer-edge/nnstreamer-edge-internal.h
src/libnnstreamer-edge/nnstreamer-edge-metadata.c [new file with mode: 0644]
src/libnnstreamer-edge/nnstreamer-edge-metadata.h [new file with mode: 0644]
tests/unittest_nnstreamer-edge-aitt.cc
tests/unittest_nnstreamer-edge.cc

index de9c6346760fcea6de9ffa393081f7f00c06a3b8..8920f47be48535cdb7c887758b2e39b4a9d8f8f1 100644 (file)
@@ -1,7 +1,7 @@
 # NNStreamer-Edge library
 SET(NNS_EDGE_LIB_NAME nnstreamer-edge)
 SET(NNS_EDGE_SRCS
-    ${NNS_EDGE_SRC_DIR}/nnstreamer-edge-common.c
+    ${NNS_EDGE_SRC_DIR}/nnstreamer-edge-metadata.c
     ${NNS_EDGE_SRC_DIR}/nnstreamer-edge-data.c
     ${NNS_EDGE_SRC_DIR}/nnstreamer-edge-event.c
     ${NNS_EDGE_SRC_DIR}/nnstreamer-edge-internal.c
index 04aac49e78a4407d10f02d9eba37fae2b4f8491d..5165470c2498d5fa5ae8ff47d024333d646e4bc6 100644 (file)
@@ -16,7 +16,6 @@
 
 #include "nnstreamer-edge-data.h"
 #include "nnstreamer-edge-event.h"
-#include "nnstreamer-edge-common.h"
 #include "nnstreamer-edge-internal.h"
 #include "nnstreamer-edge-util.h"
 #include "nnstreamer-edge-log.h"
diff --git a/src/libnnstreamer-edge/nnstreamer-edge-common.c b/src/libnnstreamer-edge/nnstreamer-edge-common.c
deleted file mode 100644 (file)
index 840582b..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-/* SPDX-License-Identifier: Apache-2.0 */
-/**
- * Copyright (C) 2022 Samsung Electronics Co., Ltd. All Rights Reserved.
- *
- * @file   nnstreamer-edge-common.c
- * @date   6 April 2022
- * @brief  Common util functions for nnstreamer edge.
- * @see    https://github.com/nnstreamer/nnstreamer
- * @author Gichan Jang <gichan2.jang@samsung.com>
- * @bug    No known bugs except for NYI items
- */
-
-#include "nnstreamer-edge-common.h"
-#include "nnstreamer-edge-data.h"
-#include "nnstreamer-edge-log.h"
-#include "nnstreamer-edge-util.h"
-
-/**
- * @brief Internal function to find node in the list.
- */
-static nns_edge_metadata_node_s *
-nns_edge_metadata_find (nns_edge_metadata_s * meta, const char *key)
-{
-  nns_edge_metadata_node_s *node;
-
-  if (!meta)
-    return NULL;
-
-  if (!STR_IS_VALID (key))
-    return NULL;
-
-  node = meta->list;
-  while (node) {
-    if (strcasecmp (key, node->key) == 0)
-      return node;
-
-    node = node->next;
-  }
-
-  return NULL;
-}
-
-/**
- * @brief Internal function to initialize metadata structure.
- */
-int
-nns_edge_metadata_init (nns_edge_metadata_s * meta)
-{
-  if (!meta)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  memset (meta, 0, sizeof (nns_edge_metadata_s));
-  return NNS_EDGE_ERROR_NONE;
-}
-
-/**
- * @brief Internal function to free the list and items in metadata structure.
- */
-int
-nns_edge_metadata_free (nns_edge_metadata_s * meta)
-{
-  nns_edge_metadata_node_s *node, *tmp;
-
-  if (!meta)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  node = meta->list;
-  meta->list_len = 0;
-  meta->list = NULL;
-
-  while (node) {
-    tmp = node->next;
-
-    SAFE_FREE (node->key);
-    SAFE_FREE (node->value);
-    SAFE_FREE (node);
-
-    node = tmp;
-  }
-
-  return NNS_EDGE_ERROR_NONE;
-}
-
-/**
- * @brief Internal function to set the metadata.
- */
-int
-nns_edge_metadata_set (nns_edge_metadata_s * meta,
-    const char *key, const char *value)
-{
-  nns_edge_metadata_node_s *node;
-
-  if (!meta)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  if (!STR_IS_VALID (key))
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  if (!STR_IS_VALID (value))
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  /* Replace old value if key exists in the list. */
-  node = nns_edge_metadata_find (meta, key);
-  if (node) {
-    char *val = nns_edge_strdup (value);
-
-    if (!val)
-      return NNS_EDGE_ERROR_OUT_OF_MEMORY;
-
-    SAFE_FREE (node->value);
-    node->value = val;
-    return NNS_EDGE_ERROR_NONE;
-  }
-
-  node = calloc (1, sizeof (nns_edge_metadata_node_s));
-  if (!node)
-    return NNS_EDGE_ERROR_OUT_OF_MEMORY;
-
-  node->key = nns_edge_strdup (key);
-  node->value = nns_edge_strdup (value);
-
-  if (!node->key || !node->value) {
-    SAFE_FREE (node->key);
-    SAFE_FREE (node->value);
-    SAFE_FREE (node);
-    return NNS_EDGE_ERROR_OUT_OF_MEMORY;
-  }
-
-  /* Prepend new node to the start of the list. */
-  meta->list_len++;
-  node->next = meta->list;
-  meta->list = node;
-
-  return NNS_EDGE_ERROR_NONE;
-}
-
-/**
- * @brief Internal function to get the metadata in the list. Caller should release the returned value using free().
- */
-int
-nns_edge_metadata_get (nns_edge_metadata_s * meta,
-    const char *key, char **value)
-{
-  nns_edge_metadata_node_s *node;
-
-  if (!value)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  node = nns_edge_metadata_find (meta, key);
-  if (node) {
-    *value = nns_edge_strdup (node->value);
-    return (*value) ? NNS_EDGE_ERROR_NONE : NNS_EDGE_ERROR_OUT_OF_MEMORY;
-  }
-
-  return NNS_EDGE_ERROR_INVALID_PARAMETER;
-}
-
-/**
- * @brief Internal function to copy the metadata.
- */
-int
-nns_edge_metadata_copy (nns_edge_metadata_s * dest, nns_edge_metadata_s * src)
-{
-  nns_edge_metadata_s tmp;
-  nns_edge_metadata_node_s *node;
-  int ret;
-
-  if (!dest || !src)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  nns_edge_metadata_init (&tmp);
-
-  node = src->list;
-  while (node) {
-    ret = nns_edge_metadata_set (&tmp, node->key, node->value);
-    if (ret != NNS_EDGE_ERROR_NONE) {
-      nns_edge_metadata_free (&tmp);
-      return ret;
-    }
-
-    node = node->next;
-  }
-
-  /* Replace dest when new metadata is successfully copied. */
-  nns_edge_metadata_free (dest);
-  *dest = tmp;
-
-  return NNS_EDGE_ERROR_NONE;
-}
-
-/**
- * @brief Internal function to serialize the metadata. Caller should release the returned value using free().
- */
-int
-nns_edge_metadata_serialize (nns_edge_metadata_s * meta,
-    void **data, size_t *data_len)
-{
-  nns_edge_metadata_node_s *node;
-  char *serialized, *ptr;
-  size_t total, len;
-
-  if (!meta)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  if (!data || !data_len)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  *data = NULL;
-  *data_len = 0U;
-
-  if (meta->list_len == 0)
-    return NNS_EDGE_ERROR_NONE;
-
-  total = len = sizeof (unsigned int);
-
-  node = meta->list;
-  while (node) {
-    total += (strlen (node->key) + strlen (node->value) + 2);
-    node = node->next;
-  }
-
-  serialized = ptr = (char *) malloc (total);
-  if (!serialized)
-    return NNS_EDGE_ERROR_OUT_OF_MEMORY;
-
-  /* length + list of key-value pair */
-  ((unsigned int *) serialized)[0] = meta->list_len;
-  ptr += len;
-
-  node = meta->list;
-  while (node) {
-    len = strlen (node->key);
-    memcpy (ptr, node->key, len);
-    ptr[len] = '\0';
-    ptr += (len + 1);
-
-    len = strlen (node->value);
-    memcpy (ptr, node->value, len);
-    ptr[len] = '\0';
-    ptr += (len + 1);
-
-    node = node->next;
-  }
-
-  *data = serialized;
-  *data_len = total;
-
-  return NNS_EDGE_ERROR_NONE;
-}
-
-/**
- * @brief Internal function to deserialize memory into metadata.
- */
-int
-nns_edge_metadata_deserialize (nns_edge_metadata_s * meta,
-    void *data, size_t data_len)
-{
-  char *key, *value;
-  size_t cur;
-  unsigned int total;
-  int ret;
-
-  if (!meta)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  if (!data || data_len <= 0)
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
-
-  nns_edge_metadata_free (meta);
-
-  /* length + list of key-value pair */
-  total = ((unsigned int *) data)[0];
-
-  cur = sizeof (unsigned int);
-  while (cur < data_len || meta->list_len < total) {
-    key = (char *) data + cur;
-    cur += (strlen (key) + 1);
-
-    value = (char *) data + cur;
-    cur += (strlen (value) + 1);
-
-    ret = nns_edge_metadata_set (meta, key, value);
-    if (ret != NNS_EDGE_ERROR_NONE) {
-      nns_edge_metadata_free (meta);
-      return ret;
-    }
-  }
-
-  return NNS_EDGE_ERROR_NONE;
-}
diff --git a/src/libnnstreamer-edge/nnstreamer-edge-common.h b/src/libnnstreamer-edge/nnstreamer-edge-common.h
deleted file mode 100644 (file)
index d648386..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* SPDX-License-Identifier: Apache-2.0 */
-/**
- * Copyright (C) 2022 Samsung Electronics Co., Ltd. All Rights Reserved.
- *
- * @file   nnstreamer-edge-common.h
- * @date   6 April 2022
- * @brief  Common util functions for nnstreamer edge.
- * @see    https://github.com/nnstreamer/nnstreamer
- * @author Gichan Jang <gichan2.jang@samsung.com>
- * @bug    No known bugs except for NYI items
- * @note   This file is internal header for nnstreamer edge utils. DO NOT export this file.
- * @todo   Rename this to nnstreamer-edge-meta after separating util functions.
- */
-
-#ifndef __NNSTREAMER_EDGE_COMMON_H__
-#define __NNSTREAMER_EDGE_COMMON_H__
-
-#include "nnstreamer-edge.h"
-#include "nnstreamer-edge-internal.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @brief Internal function to initialize metadata structure.
- */
-int nns_edge_metadata_init (nns_edge_metadata_s *meta);
-
-/**
- * @brief Internal function to free the list and items in metadata structure.
- */
-int nns_edge_metadata_free (nns_edge_metadata_s *meta);
-
-/**
- * @brief Internal function to set the metadata.
- */
-int nns_edge_metadata_set (nns_edge_metadata_s *meta, const char *key, const char *value);
-
-/**
- * @brief Internal function to get the metadata in the list. Caller should release the returned value using free().
- */
-int nns_edge_metadata_get (nns_edge_metadata_s *meta, const char *key, char **value);
-
-/**
- * @brief Internal function to copy the metadata.
- */
-int nns_edge_metadata_copy (nns_edge_metadata_s *dest, nns_edge_metadata_s *src);
-
-/**
- * @brief Internal function to serialize the metadata. Caller should release the returned value using free().
- */
-int nns_edge_metadata_serialize (nns_edge_metadata_s *meta, void **data, size_t *data_len);
-
-/**
- * @brief Internal function to deserialize memory into metadata.
- */
-int nns_edge_metadata_deserialize (nns_edge_metadata_s *meta, void *data, size_t data_len);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* __NNSTREAMER_EDGE_COMMON_H__ */
index 66e511353dae9c1f312daf9632a59ae918c54a4d..fe6da050bec4ba4640d62902c2ff4cea69d30445 100644 (file)
@@ -12,7 +12,6 @@
 
 #include "nnstreamer-edge-data.h"
 #include "nnstreamer-edge-log.h"
-#include "nnstreamer-edge-common.h"
 #include "nnstreamer-edge-util.h"
 
 /**
@@ -36,7 +35,7 @@ nns_edge_data_create (nns_edge_data_h * data_h)
 
   nns_edge_lock_init (ed);
   ed->magic = NNS_EDGE_MAGIC;
-  nns_edge_metadata_init (&ed->metadata);
+  nns_edge_metadata_create (&ed->metadata);
 
   *data_h = ed;
   return NNS_EDGE_ERROR_NONE;
@@ -72,7 +71,7 @@ nns_edge_data_destroy (nns_edge_data_h data_h)
       ed->data[i].destroy_cb (ed->data[i].data);
   }
 
-  nns_edge_metadata_free (&ed->metadata);
+  nns_edge_metadata_destroy (ed->metadata);
 
   nns_edge_unlock (ed);
   nns_edge_lock_destroy (ed);
@@ -161,7 +160,7 @@ nns_edge_data_copy (nns_edge_data_h data_h, nns_edge_data_h * new_data_h)
     copied->data[i].destroy_cb = nns_edge_free;
   }
 
-  ret = nns_edge_metadata_copy (&copied->metadata, &ed->metadata);
+  ret = nns_edge_metadata_copy (copied->metadata, ed->metadata);
 
 done:
   if (ret != NNS_EDGE_ERROR_NONE) {
@@ -322,7 +321,7 @@ nns_edge_data_set_info (nns_edge_data_h data_h, const char *key,
     return NNS_EDGE_ERROR_INVALID_PARAMETER;
   }
 
-  ret = nns_edge_metadata_set (&ed->metadata, key, value);
+  ret = nns_edge_metadata_set (ed->metadata, key, value);
 
   nns_edge_unlock (ed);
   return ret;
@@ -361,7 +360,7 @@ nns_edge_data_get_info (nns_edge_data_h data_h, const char *key, char **value)
     return NNS_EDGE_ERROR_INVALID_PARAMETER;
   }
 
-  ret = nns_edge_metadata_get (&ed->metadata, key, value);
+  ret = nns_edge_metadata_get (ed->metadata, key, value);
 
   nns_edge_unlock (ed);
   return ret;
@@ -391,7 +390,7 @@ nns_edge_data_serialize_meta (nns_edge_data_h data_h, void **data,
     return NNS_EDGE_ERROR_INVALID_PARAMETER;
   }
 
-  ret = nns_edge_metadata_serialize (&ed->metadata, data, data_len);
+  ret = nns_edge_metadata_serialize (ed->metadata, data, data_len);
 
   nns_edge_unlock (ed);
   return ret;
@@ -421,7 +420,7 @@ nns_edge_data_deserialize_meta (nns_edge_data_h data_h, void *data,
     return NNS_EDGE_ERROR_INVALID_PARAMETER;
   }
 
-  ret = nns_edge_metadata_deserialize (&ed->metadata, data, data_len);
+  ret = nns_edge_metadata_deserialize (ed->metadata, data, data_len);
 
   nns_edge_unlock (ed);
   return ret;
@@ -464,7 +463,7 @@ nns_edge_data_serialize (nns_edge_data_h data_h, void **data, size_t *len)
     data_len += ed->data[n].data_len;
   }
 
-  ret = nns_edge_metadata_serialize (&ed->metadata, &meta_serialized,
+  ret = nns_edge_metadata_serialize (ed->metadata, &meta_serialized,
       &edata_header.meta_len);
   if (NNS_EDGE_ERROR_NONE != ret) {
     goto done;
@@ -543,7 +542,7 @@ nns_edge_data_deserialize (nns_edge_data_h data_h, void *data)
     ptr += ed->data[n].data_len;
   }
 
-  ret = nns_edge_metadata_deserialize (&ed->metadata, ptr, meta_len);
+  ret = nns_edge_metadata_deserialize (ed->metadata, ptr, meta_len);
 
   nns_edge_unlock (ed);
   return ret;
index f87b6bcde5b964a01f71c5b3dde7257aeb5e6ec6..729ff1997ca6bb16819610dad42c2086bedcca83 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "nnstreamer-edge.h"
 #include "nnstreamer-edge-internal.h"
+#include "nnstreamer-edge-metadata.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -29,7 +30,7 @@ typedef struct {
   pthread_mutex_t lock;
   unsigned int num;
   nns_edge_raw_data_s data[NNS_EDGE_DATA_LIMIT];
-  nns_edge_metadata_s metadata;
+  nns_edge_metadata_h metadata;
 } nns_edge_data_s;
 
 /**
index 4d763c8b1c50d9a29a71517897e5eae750ee96ed..6b28e37366dd8e0d3e5db16d0e885702a46b3e99 100644 (file)
@@ -17,7 +17,6 @@
 #include "nnstreamer-edge-data.h"
 #include "nnstreamer-edge-event.h"
 #include "nnstreamer-edge-log.h"
-#include "nnstreamer-edge-common.h"
 #include "nnstreamer-edge-util.h"
 #include "nnstreamer-edge-internal.h"
 
@@ -1248,9 +1247,9 @@ nns_edge_create_handle (const char *id, nns_edge_connect_type_e connect_type,
   eh->node_type = node_type;
   eh->broker_h = NULL;
   eh->connections = NULL;
-  nns_edge_metadata_init (&eh->meta);
   eh->listening = false;
   eh->listener_fd = -1;
+  nns_edge_metadata_create (&eh->metadata);
   nns_edge_queue_create (&eh->send_queue);
 
   *edge_h = eh;
@@ -1411,7 +1410,8 @@ nns_edge_release_handle (nns_edge_h edge_h)
 
   _nns_edge_remove_all_connection (eh);
 
-  nns_edge_metadata_free (&eh->meta);
+  nns_edge_metadata_destroy (eh->metadata);
+  eh->metadata = NULL;
   SAFE_FREE (eh->id);
   SAFE_FREE (eh->topic);
   SAFE_FREE (eh->host);
@@ -1747,7 +1747,7 @@ nns_edge_set_info (nns_edge_h edge_h, const char *key, const char *value)
     nns_edge_loge ("Cannot update %s.", key);
     ret = NNS_EDGE_ERROR_INVALID_PARAMETER;
   } else {
-    ret = nns_edge_metadata_set (&eh->meta, key, value);
+    ret = nns_edge_metadata_set (eh->metadata, key, value);
   }
 
   nns_edge_unlock (eh);
@@ -1811,7 +1811,7 @@ nns_edge_get_info (nns_edge_h edge_h, const char *key, char **value)
       *value = nns_edge_strdup_printf ("%lld", (long long) eh->client_id);
     }
   } else {
-    ret = nns_edge_metadata_get (&eh->meta, key, value);
+    ret = nns_edge_metadata_get (eh->metadata, key, value);
   }
 
   nns_edge_unlock (eh);
index 4641a04f39fe02132096caa6dbbfada3250e78c3..9e0b01b6dd6c0f5492e4faf799285b4bc3816476 100644 (file)
@@ -19,6 +19,7 @@ extern "C" {
 #endif /* __cplusplus */
 
 #include "nnstreamer-edge.h"
+#include "nnstreamer-edge-metadata.h"
 #include "nnstreamer-edge-queue.h"
 
 typedef void *nns_edge_broker_h;
@@ -32,28 +33,6 @@ typedef struct {
   nns_edge_data_destroy_cb destroy_cb;
 } nns_edge_raw_data_s;
 
-/**
- * @brief Internal data structure for metadata.
- */
-typedef struct _nns_edge_metadata_node_s nns_edge_metadata_node_s;
-
-/**
- * @brief Internal data structure for metadata.
- */
-struct _nns_edge_metadata_node_s {
-  char *key;
-  char *value;
-  nns_edge_metadata_node_s *next;
-};
-
-/**
- * @brief Internal data structure to handle metadata. This struct should be managed in the handle.
- */
-typedef struct {
-  unsigned int list_len;
-  nns_edge_metadata_node_s *list;
-} nns_edge_metadata_s;
-
 /**
  * @brief Internal data structure for edge event.
  */
@@ -77,7 +56,7 @@ typedef struct {
   char *dest_host; /**< destination IP address (broker or target device) */
   int dest_port; /**< destination port number (broker or target device) */
   nns_edge_node_type_e node_type;
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h metadata;
 
   /* Edge event callback and user data */
   nns_edge_event_cb event_cb;
diff --git a/src/libnnstreamer-edge/nnstreamer-edge-metadata.c b/src/libnnstreamer-edge/nnstreamer-edge-metadata.c
new file mode 100644 (file)
index 0000000..9b53e43
--- /dev/null
@@ -0,0 +1,368 @@
+/* SPDX-License-Identifier: Apache-2.0 */
+/**
+ * Copyright (C) 2022 Samsung Electronics Co., Ltd. All Rights Reserved.
+ *
+ * @file   nnstreamer-edge-metadata.c
+ * @date   6 April 2022
+ * @brief  Util functions for metadata.
+ * @see    https://github.com/nnstreamer/nnstreamer
+ * @author Gichan Jang <gichan2.jang@samsung.com>
+ * @bug    No known bugs except for NYI items
+ */
+
+#include "nnstreamer-edge-metadata.h"
+#include "nnstreamer-edge-util.h"
+
+/**
+ * @brief Internal data structure for metadata.
+ */
+typedef struct _nns_edge_metadata_node_s nns_edge_metadata_node_s;
+
+/**
+ * @brief Internal data structure for metadata.
+ */
+struct _nns_edge_metadata_node_s
+{
+  char *key;
+  char *value;
+  nns_edge_metadata_node_s *next;
+};
+
+/**
+ * @brief Internal data structure to handle metadata. This struct should be managed in the handle.
+ */
+typedef struct
+{
+  unsigned int list_len;
+  nns_edge_metadata_node_s *list;
+} nns_edge_metadata_s;
+
+/**
+ * @brief Internal function to find node in the list.
+ */
+static nns_edge_metadata_node_s *
+nns_edge_metadata_find (nns_edge_metadata_s * meta, const char *key)
+{
+  nns_edge_metadata_node_s *node;
+
+  if (!meta)
+    return NULL;
+
+  if (!STR_IS_VALID (key))
+    return NULL;
+
+  node = meta->list;
+  while (node) {
+    if (strcasecmp (key, node->key) == 0)
+      return node;
+
+    node = node->next;
+  }
+
+  return NULL;
+}
+
+/**
+ * @brief Internal function to initialize metadata structure.
+ */
+static int
+nns_edge_metadata_init (nns_edge_metadata_s * meta)
+{
+  if (!meta)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  memset (meta, 0, sizeof (nns_edge_metadata_s));
+  return NNS_EDGE_ERROR_NONE;
+}
+
+/**
+ * @brief Internal function to free the list and items in metadata structure.
+ */
+static int
+nns_edge_metadata_free (nns_edge_metadata_s * meta)
+{
+  nns_edge_metadata_node_s *node, *tmp;
+
+  if (!meta)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  node = meta->list;
+  meta->list_len = 0;
+  meta->list = NULL;
+
+  while (node) {
+    tmp = node->next;
+
+    SAFE_FREE (node->key);
+    SAFE_FREE (node->value);
+    SAFE_FREE (node);
+
+    node = tmp;
+  }
+
+  return NNS_EDGE_ERROR_NONE;
+}
+
+/**
+ * @brief Internal function to create metadata.
+ */
+int
+nns_edge_metadata_create (nns_edge_metadata_h * metadata_h)
+{
+  nns_edge_metadata_s *meta;
+
+  if (!metadata_h)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  meta = calloc (1, sizeof (nns_edge_metadata_s));
+  if (!meta)
+    return NNS_EDGE_ERROR_OUT_OF_MEMORY;
+
+  nns_edge_metadata_init (meta);
+
+  *metadata_h = meta;
+  return NNS_EDGE_ERROR_NONE;
+}
+
+/**
+ * @brief Internal function to destroy metadata.
+ */
+int
+nns_edge_metadata_destroy (nns_edge_metadata_h metadata_h)
+{
+  nns_edge_metadata_s *meta;
+
+  meta = (nns_edge_metadata_s *) metadata_h;
+
+  if (!meta)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  nns_edge_metadata_free (meta);
+  free (meta);
+
+  return NNS_EDGE_ERROR_NONE;
+}
+
+/**
+ * @brief Internal function to set the metadata.
+ */
+int
+nns_edge_metadata_set (nns_edge_metadata_h metadata_h,
+    const char *key, const char *value)
+{
+  nns_edge_metadata_s *meta;
+  nns_edge_metadata_node_s *node;
+
+  meta = (nns_edge_metadata_s *) metadata_h;
+
+  if (!meta)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  if (!STR_IS_VALID (key))
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  if (!STR_IS_VALID (value))
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  /* Replace old value if key exists in the list. */
+  node = nns_edge_metadata_find (meta, key);
+  if (node) {
+    char *val = nns_edge_strdup (value);
+
+    if (!val)
+      return NNS_EDGE_ERROR_OUT_OF_MEMORY;
+
+    SAFE_FREE (node->value);
+    node->value = val;
+    return NNS_EDGE_ERROR_NONE;
+  }
+
+  node = calloc (1, sizeof (nns_edge_metadata_node_s));
+  if (!node)
+    return NNS_EDGE_ERROR_OUT_OF_MEMORY;
+
+  node->key = nns_edge_strdup (key);
+  node->value = nns_edge_strdup (value);
+
+  if (!node->key || !node->value) {
+    SAFE_FREE (node->key);
+    SAFE_FREE (node->value);
+    SAFE_FREE (node);
+    return NNS_EDGE_ERROR_OUT_OF_MEMORY;
+  }
+
+  /* Prepend new node to the start of the list. */
+  meta->list_len++;
+  node->next = meta->list;
+  meta->list = node;
+
+  return NNS_EDGE_ERROR_NONE;
+}
+
+/**
+ * @brief Internal function to get the metadata in the list. Caller should release the returned value using free().
+ */
+int
+nns_edge_metadata_get (nns_edge_metadata_h metadata_h,
+    const char *key, char **value)
+{
+  nns_edge_metadata_s *meta;
+  nns_edge_metadata_node_s *node;
+
+  meta = (nns_edge_metadata_s *) metadata_h;
+
+  if (!value)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  node = nns_edge_metadata_find (meta, key);
+  if (node) {
+    *value = nns_edge_strdup (node->value);
+    return (*value) ? NNS_EDGE_ERROR_NONE : NNS_EDGE_ERROR_OUT_OF_MEMORY;
+  }
+
+  return NNS_EDGE_ERROR_INVALID_PARAMETER;
+}
+
+/**
+ * @brief Internal function to copy the metadata.
+ */
+int
+nns_edge_metadata_copy (nns_edge_metadata_h dest_h, nns_edge_metadata_h src_h)
+{
+  nns_edge_metadata_s *dest, *src;
+  nns_edge_metadata_s tmp;
+  nns_edge_metadata_node_s *node;
+  int ret;
+
+  dest = (nns_edge_metadata_s *) dest_h;
+  src = (nns_edge_metadata_s *) src_h;
+
+  if (!dest || !src)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  nns_edge_metadata_init (&tmp);
+
+  node = src->list;
+  while (node) {
+    ret = nns_edge_metadata_set (&tmp, node->key, node->value);
+    if (ret != NNS_EDGE_ERROR_NONE) {
+      nns_edge_metadata_free (&tmp);
+      return ret;
+    }
+
+    node = node->next;
+  }
+
+  /* Replace dest when new metadata is successfully copied. */
+  nns_edge_metadata_free (dest);
+  *dest = tmp;
+
+  return NNS_EDGE_ERROR_NONE;
+}
+
+/**
+ * @brief Internal function to serialize the metadata. Caller should release the returned value using free().
+ */
+int
+nns_edge_metadata_serialize (nns_edge_metadata_h metadata_h,
+    void **data, size_t *data_len)
+{
+  nns_edge_metadata_s *meta;
+  nns_edge_metadata_node_s *node;
+  char *serialized, *ptr;
+  size_t total, len;
+
+  meta = (nns_edge_metadata_s *) metadata_h;
+
+  if (!meta)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  if (!data || !data_len)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  *data = NULL;
+  *data_len = 0U;
+
+  if (meta->list_len == 0)
+    return NNS_EDGE_ERROR_NONE;
+
+  total = len = sizeof (unsigned int);
+
+  node = meta->list;
+  while (node) {
+    total += (strlen (node->key) + strlen (node->value) + 2);
+    node = node->next;
+  }
+
+  serialized = ptr = (char *) malloc (total);
+  if (!serialized)
+    return NNS_EDGE_ERROR_OUT_OF_MEMORY;
+
+  /* length + list of key-value pair */
+  ((unsigned int *) serialized)[0] = meta->list_len;
+  ptr += len;
+
+  node = meta->list;
+  while (node) {
+    len = strlen (node->key);
+    memcpy (ptr, node->key, len);
+    ptr[len] = '\0';
+    ptr += (len + 1);
+
+    len = strlen (node->value);
+    memcpy (ptr, node->value, len);
+    ptr[len] = '\0';
+    ptr += (len + 1);
+
+    node = node->next;
+  }
+
+  *data = serialized;
+  *data_len = total;
+
+  return NNS_EDGE_ERROR_NONE;
+}
+
+/**
+ * @brief Internal function to deserialize memory into metadata.
+ */
+int
+nns_edge_metadata_deserialize (nns_edge_metadata_h metadata_h,
+    void *data, size_t data_len)
+{
+  nns_edge_metadata_s *meta;
+  char *key, *value;
+  size_t cur;
+  unsigned int total;
+  int ret;
+
+  meta = (nns_edge_metadata_s *) metadata_h;
+
+  if (!meta)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  if (!data || data_len <= 0)
+    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+
+  nns_edge_metadata_free (meta);
+
+  /* length + list of key-value pair */
+  total = ((unsigned int *) data)[0];
+
+  cur = sizeof (unsigned int);
+  while (cur < data_len || meta->list_len < total) {
+    key = (char *) data + cur;
+    cur += (strlen (key) + 1);
+
+    value = (char *) data + cur;
+    cur += (strlen (value) + 1);
+
+    ret = nns_edge_metadata_set (meta, key, value);
+    if (ret != NNS_EDGE_ERROR_NONE) {
+      nns_edge_metadata_free (meta);
+      return ret;
+    }
+  }
+
+  return NNS_EDGE_ERROR_NONE;
+}
diff --git a/src/libnnstreamer-edge/nnstreamer-edge-metadata.h b/src/libnnstreamer-edge/nnstreamer-edge-metadata.h
new file mode 100644 (file)
index 0000000..77d355a
--- /dev/null
@@ -0,0 +1,63 @@
+/* SPDX-License-Identifier: Apache-2.0 */
+/**
+ * Copyright (C) 2022 Samsung Electronics Co., Ltd. All Rights Reserved.
+ *
+ * @file   nnstreamer-edge-metadata.h
+ * @date   6 April 2022
+ * @brief  Util functions for metadata.
+ * @see    https://github.com/nnstreamer/nnstreamer
+ * @author Gichan Jang <gichan2.jang@samsung.com>
+ * @bug    No known bugs except for NYI items
+ * @note   This file is internal header to handle metadata. DO NOT export this file.
+ */
+
+#ifndef __NNSTREAMER_EDGE_METADATA_H__
+#define __NNSTREAMER_EDGE_METADATA_H__
+
+#include "nnstreamer-edge.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef void *nns_edge_metadata_h;
+
+/**
+ * @brief Internal function to create metadata.
+ */
+int nns_edge_metadata_create (nns_edge_metadata_h *metadata_h);
+
+/**
+ * @brief Internal function to destroy metadata.
+ */
+int nns_edge_metadata_destroy (nns_edge_metadata_h metadata_h);
+
+/**
+ * @brief Internal function to set the metadata.
+ */
+int nns_edge_metadata_set (nns_edge_metadata_h metadata_h, const char *key, const char *value);
+
+/**
+ * @brief Internal function to get the metadata in the list. Caller should release the returned value using free().
+ */
+int nns_edge_metadata_get (nns_edge_metadata_h metadata_h, const char *key, char **value);
+
+/**
+ * @brief Internal function to copy the metadata.
+ */
+int nns_edge_metadata_copy (nns_edge_metadata_h dest_h, nns_edge_metadata_h src_h);
+
+/**
+ * @brief Internal function to serialize the metadata. Caller should release the returned value using free().
+ */
+int nns_edge_metadata_serialize (nns_edge_metadata_h metadata_h, void **data, size_t *data_len);
+
+/**
+ * @brief Internal function to deserialize memory into metadata.
+ */
+int nns_edge_metadata_deserialize (nns_edge_metadata_h metadata_h, void *data, size_t data_len);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __NNSTREAMER_EDGE_METADATA_H__ */
index 53d67df61d86733bf0ca15a20feae69ba2f7bad2..7180a8a8c1694d5d7428f6ade961512d33e664bc 100644 (file)
@@ -9,7 +9,6 @@
 
 #include <gtest/gtest.h>
 #include "nnstreamer-edge.h"
-#include "nnstreamer-edge-common.h"
 #include "nnstreamer-edge-internal.h"
 #include "nnstreamer-edge-log.h"
 #include "nnstreamer-edge-util.h"
index 68f45b9fc411156ec9248a98274b1fc095fcbdf3..6476665e93326f7183e2adba7279bfb12f535a8d 100644 (file)
@@ -11,7 +11,7 @@
 #include "nnstreamer-edge.h"
 #include "nnstreamer-edge-data.h"
 #include "nnstreamer-edge-event.h"
-#include "nnstreamer-edge-common.h"
+#include "nnstreamer-edge-metadata.h"
 #include "nnstreamer-edge-internal.h"
 #include "nnstreamer-edge-log.h"
 #include "nnstreamer-edge-util.h"
@@ -2727,24 +2727,24 @@ TEST(edgeEvent, parseCapabilityInvalidParam04_n)
 }
 
 /**
- * @brief Initialize edge metadata - invalid param.
+ * @brief Create edge metadata - invalid param.
  */
-TEST(edgeMeta, initInvalidParam01_n)
+TEST(edgeMeta, createInvalidParam01_n)
 {
   int ret;
 
-  ret = nns_edge_metadata_init (NULL);
+  ret = nns_edge_metadata_create (NULL);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 }
 
 /**
- * @brief Release resources of edge metadata - invalid param.
+ * @brief Destroy edge metadata - invalid param.
  */
-TEST(edgeMeta, freeInvalidParam01_n)
+TEST(edgeMeta, destroyInvalidParam01_n)
 {
   int ret;
 
-  ret = nns_edge_metadata_free (NULL);
+  ret = nns_edge_metadata_destroy (NULL);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2764,16 +2764,16 @@ TEST(edgeMeta, setInvalidParam01_n)
  */
 TEST(edgeMeta, setInvalidParam02_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_set (&meta, NULL, "temp-value");
+  ret = nns_edge_metadata_set (meta, NULL, "temp-value");
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2782,16 +2782,16 @@ TEST(edgeMeta, setInvalidParam02_n)
  */
 TEST(edgeMeta, setInvalidParam03_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_set (&meta, "", "temp-value");
+  ret = nns_edge_metadata_set (meta, "", "temp-value");
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2800,16 +2800,16 @@ TEST(edgeMeta, setInvalidParam03_n)
  */
 TEST(edgeMeta, setInvalidParam04_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_set (&meta, "temp-key", NULL);
+  ret = nns_edge_metadata_set (meta, "temp-key", NULL);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2818,16 +2818,16 @@ TEST(edgeMeta, setInvalidParam04_n)
  */
 TEST(edgeMeta, setInvalidParam05_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_set (&meta, "temp-key", "");
+  ret = nns_edge_metadata_set (meta, "temp-key", "");
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2848,17 +2848,17 @@ TEST(edgeMeta, getInvalidParam01_n)
  */
 TEST(edgeMeta, getInvalidParam02_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   char *value = NULL;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_get (&meta, NULL, &value);
+  ret = nns_edge_metadata_get (meta, NULL, &value);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2867,17 +2867,17 @@ TEST(edgeMeta, getInvalidParam02_n)
  */
 TEST(edgeMeta, getInvalidParam03_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   char *value = NULL;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_get (&meta, "", &value);
+  ret = nns_edge_metadata_get (meta, "", &value);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2886,16 +2886,16 @@ TEST(edgeMeta, getInvalidParam03_n)
  */
 TEST(edgeMeta, getInvalidParam04_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_get (&meta, "temp-key", NULL);
+  ret = nns_edge_metadata_get (meta, "temp-key", NULL);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2904,40 +2904,40 @@ TEST(edgeMeta, getInvalidParam04_n)
  */
 TEST(edgeMeta, copy)
 {
-  nns_edge_metadata_s src, desc;
+  nns_edge_metadata_h src, desc;
   char *value = NULL;
   int ret;
 
-  ret = nns_edge_metadata_init (&src);
+  ret = nns_edge_metadata_create (&src);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
-  ret = nns_edge_metadata_init (&desc);
+  ret = nns_edge_metadata_create (&desc);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_set (&src, "temp-key1", "temp-value1");
+  ret = nns_edge_metadata_set (src, "temp-key1", "temp-value1");
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
-  ret = nns_edge_metadata_set (&src, "temp-key2", "temp-value2");
+  ret = nns_edge_metadata_set (src, "temp-key2", "temp-value2");
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
   /* Replace old value */
-  ret = nns_edge_metadata_set (&src, "temp-key2", "temp-value2-replaced");
+  ret = nns_edge_metadata_set (src, "temp-key2", "temp-value2-replaced");
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_copy (&desc, &src);
+  ret = nns_edge_metadata_copy (desc, src);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_get (&desc, "temp-key1", &value);
+  ret = nns_edge_metadata_get (desc, "temp-key1", &value);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
   EXPECT_STREQ (value, "temp-value1");
   nns_edge_free (value);
 
-  ret = nns_edge_metadata_get (&desc, "temp-key2", &value);
+  ret = nns_edge_metadata_get (desc, "temp-key2", &value);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
   EXPECT_STREQ (value, "temp-value2-replaced");
   nns_edge_free (value);
 
-  ret = nns_edge_metadata_free (&src);
+  ret = nns_edge_metadata_destroy (src);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
-  ret = nns_edge_metadata_free (&desc);
+  ret = nns_edge_metadata_destroy (desc);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2946,16 +2946,16 @@ TEST(edgeMeta, copy)
  */
 TEST(edgeMeta, copyInvalidParam01_n)
 {
-  nns_edge_metadata_s src;
+  nns_edge_metadata_h src;
   int ret;
 
-  ret = nns_edge_metadata_init (&src);
+  ret = nns_edge_metadata_create (&src);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_copy (NULL, &src);
+  ret = nns_edge_metadata_copy (NULL, src);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&src);
+  ret = nns_edge_metadata_destroy (src);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2964,16 +2964,16 @@ TEST(edgeMeta, copyInvalidParam01_n)
  */
 TEST(edgeMeta, copyInvalidParam02_n)
 {
-  nns_edge_metadata_s desc;
+  nns_edge_metadata_h desc;
   int ret;
 
-  ret = nns_edge_metadata_init (&desc);
+  ret = nns_edge_metadata_create (&desc);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_copy (&desc, NULL);
+  ret = nns_edge_metadata_copy (desc, NULL);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&desc);
+  ret = nns_edge_metadata_destroy (desc);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -2982,52 +2982,48 @@ TEST(edgeMeta, copyInvalidParam02_n)
  */
 TEST(edgeMeta, serialize)
 {
-  nns_edge_metadata_s src, desc;
+  nns_edge_metadata_h src, desc;
   char *value;
   void *data;
   size_t data_len;
   int ret;
 
-  ret = nns_edge_metadata_init (&src);
+  ret = nns_edge_metadata_create (&src);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
-  ret = nns_edge_metadata_init (&desc);
+  ret = nns_edge_metadata_create (&desc);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_set (&src, "temp-key1", "temp-value1");
+  ret = nns_edge_metadata_set (src, "temp-key1", "temp-value1");
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
-  ret = nns_edge_metadata_set (&src, "temp-key2", "temp-value2");
+  ret = nns_edge_metadata_set (src, "temp-key2", "temp-value2");
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
-  ret = nns_edge_metadata_set (&src, "temp-key3", "temp-value3");
+  ret = nns_edge_metadata_set (src, "temp-key3", "temp-value3");
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  EXPECT_EQ (src.list_len, 3U);
-  EXPECT_EQ (desc.list_len, 0U);
-
-  ret = nns_edge_metadata_serialize (&src, &data, &data_len);
+  ret = nns_edge_metadata_serialize (src, &data, &data_len);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_deserialize (&desc, data, data_len);
+  ret = nns_edge_metadata_deserialize (desc, data, data_len);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
-  EXPECT_EQ (desc.list_len, 3U);
 
-  ret = nns_edge_metadata_get (&desc, "temp-key1", &value);
+  ret = nns_edge_metadata_get (desc, "temp-key1", &value);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
   EXPECT_STREQ (value, "temp-value1");
   nns_edge_free (value);
 
-  ret = nns_edge_metadata_get (&desc, "temp-key2", &value);
+  ret = nns_edge_metadata_get (desc, "temp-key2", &value);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
   EXPECT_STREQ (value, "temp-value2");
   nns_edge_free (value);
 
-  ret = nns_edge_metadata_get (&desc, "temp-key3", &value);
+  ret = nns_edge_metadata_get (desc, "temp-key3", &value);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
   EXPECT_STREQ (value, "temp-value3");
   nns_edge_free (value);
 
-  ret = nns_edge_metadata_free (&src);
+  ret = nns_edge_metadata_destroy (src);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
-  ret = nns_edge_metadata_free (&desc);
+  ret = nns_edge_metadata_destroy (desc);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
   free (data);
@@ -3051,17 +3047,17 @@ TEST(edgeMeta, serializeInvalidParam01_n)
  */
 TEST(edgeMeta, serializeInvalidParam02_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   size_t data_len;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_serialize (&meta, NULL, &data_len);
+  ret = nns_edge_metadata_serialize (meta, NULL, &data_len);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -3070,17 +3066,17 @@ TEST(edgeMeta, serializeInvalidParam02_n)
  */
 TEST(edgeMeta, serializeInvalidParam03_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   void *data;
   int ret;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_serialize (&meta, &data, NULL);
+  ret = nns_edge_metadata_serialize (meta, &data, NULL);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -3109,19 +3105,19 @@ TEST(edgeMeta, deserializeInvalidParam01_n)
  */
 TEST(edgeMeta, deserializeInvalidParam02_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   size_t data_len;
   int ret;
 
   data_len = 10U + sizeof (unsigned int);
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_deserialize (&meta, NULL, data_len);
+  ret = nns_edge_metadata_deserialize (meta, NULL, data_len);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
@@ -3130,7 +3126,7 @@ TEST(edgeMeta, deserializeInvalidParam02_n)
  */
 TEST(edgeMeta, deserializeInvalidParam03_n)
 {
-  nns_edge_metadata_s meta;
+  nns_edge_metadata_h meta;
   void *data;
   size_t data_len;
   int ret;
@@ -3140,13 +3136,13 @@ TEST(edgeMeta, deserializeInvalidParam03_n)
   ASSERT_TRUE (data != NULL);
   ((unsigned int *) data)[0] = 0U;
 
-  ret = nns_edge_metadata_init (&meta);
+  ret = nns_edge_metadata_create (&meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_deserialize (&meta, data, 0);
+  ret = nns_edge_metadata_deserialize (meta, data, 0);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_metadata_free (&meta);
+  ret = nns_edge_metadata_destroy (meta);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
   free (data);